@sapui5/sap.fe.core 1.113.0 → 1.115.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 (375) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +68 -5
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +120 -4
  7. package/src/sap/fe/core/AppComponent-dbg.js +8 -2
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +19 -3
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +17 -11
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +13 -2
  17. package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
  18. package/src/sap/fe/core/CommonUtils.js +1 -1
  19. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  20. package/src/sap/fe/core/CommonUtils.ts +96 -473
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
  22. package/src/sap/fe/core/ExtensionAPI.ts +2 -2
  23. package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
  24. package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
  25. package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
  26. package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
  27. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  28. package/src/sap/fe/core/TemplateComponent.ts +6 -0
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
  35. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
  36. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
  48. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  50. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
  52. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
  53. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
  54. package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
  55. package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
  56. package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
  57. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  58. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  59. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  61. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
  65. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
  78. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  79. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
  81. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
  82. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  83. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  84. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
  85. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
  86. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  87. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
  89. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  90. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  91. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
  97. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
  98. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  104. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
  105. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  106. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  107. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  109. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  112. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  113. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  114. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  116. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  117. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  119. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
  120. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
  121. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
  122. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
  123. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  124. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  125. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  126. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  127. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
  129. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  132. package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
  133. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  135. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  136. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  137. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  139. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  140. package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
  141. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
  142. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  143. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  144. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  145. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  146. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  147. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  149. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  150. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  151. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  152. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  154. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  155. package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
  157. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  158. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  159. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
  160. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
  161. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  163. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
  164. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
  165. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  166. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  167. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
  168. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
  169. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  170. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  171. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
  172. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  173. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  176. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
  177. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  178. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
  180. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  183. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
  184. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  187. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  188. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
  189. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  190. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  191. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
  192. package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
  193. package/src/sap/fe/core/fpm/Component.js +1 -1
  194. package/src/sap/fe/core/fpm/Component.js.map +1 -1
  195. package/src/sap/fe/core/fpm/Component.ts +3 -1
  196. package/src/sap/fe/core/fpm/manifest.json +1 -1
  197. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
  198. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  199. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
  201. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
  202. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  203. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  204. package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
  205. package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
  206. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
  207. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
  208. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  209. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  210. package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
  211. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
  212. package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
  213. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
  214. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  215. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  216. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  217. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  218. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  219. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
  220. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  221. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  222. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
  223. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
  224. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  225. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  226. package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
  227. package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
  228. package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
  229. package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
  230. package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
  231. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
  232. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  234. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
  235. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
  236. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  237. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
  239. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
  242. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  243. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  244. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
  245. package/src/sap/fe/core/library-dbg.js +4 -3
  246. package/src/sap/fe/core/library-preload.js +91 -74
  247. package/src/sap/fe/core/library-preload.js.map +1 -1
  248. package/src/sap/fe/core/library.js +1 -1
  249. package/src/sap/fe/core/library.js.map +1 -1
  250. package/src/sap/fe/core/library.ts +1 -1
  251. package/src/sap/fe/core/manifest.json +1 -1
  252. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
  253. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
  256. package/src/sap/fe/core/messagebundle.properties +12 -8
  257. package/src/sap/fe/core/messagebundle_ar.properties +7 -5
  258. package/src/sap/fe/core/messagebundle_bg.properties +7 -5
  259. package/src/sap/fe/core/messagebundle_ca.properties +7 -5
  260. package/src/sap/fe/core/messagebundle_cs.properties +7 -5
  261. package/src/sap/fe/core/messagebundle_cy.properties +7 -5
  262. package/src/sap/fe/core/messagebundle_da.properties +7 -5
  263. package/src/sap/fe/core/messagebundle_de.properties +7 -5
  264. package/src/sap/fe/core/messagebundle_el.properties +7 -5
  265. package/src/sap/fe/core/messagebundle_en.properties +7 -5
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
  270. package/src/sap/fe/core/messagebundle_es.properties +7 -5
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
  272. package/src/sap/fe/core/messagebundle_et.properties +7 -5
  273. package/src/sap/fe/core/messagebundle_fi.properties +7 -5
  274. package/src/sap/fe/core/messagebundle_fr.properties +7 -5
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
  276. package/src/sap/fe/core/messagebundle_hi.properties +7 -5
  277. package/src/sap/fe/core/messagebundle_hr.properties +7 -5
  278. package/src/sap/fe/core/messagebundle_hu.properties +7 -5
  279. package/src/sap/fe/core/messagebundle_id.properties +7 -5
  280. package/src/sap/fe/core/messagebundle_it.properties +8 -6
  281. package/src/sap/fe/core/messagebundle_iw.properties +7 -5
  282. package/src/sap/fe/core/messagebundle_ja.properties +7 -5
  283. package/src/sap/fe/core/messagebundle_kk.properties +7 -5
  284. package/src/sap/fe/core/messagebundle_ko.properties +7 -5
  285. package/src/sap/fe/core/messagebundle_lt.properties +7 -5
  286. package/src/sap/fe/core/messagebundle_lv.properties +7 -5
  287. package/src/sap/fe/core/messagebundle_ms.properties +7 -5
  288. package/src/sap/fe/core/messagebundle_nl.properties +7 -5
  289. package/src/sap/fe/core/messagebundle_no.properties +7 -5
  290. package/src/sap/fe/core/messagebundle_pl.properties +7 -5
  291. package/src/sap/fe/core/messagebundle_pt.properties +7 -5
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
  293. package/src/sap/fe/core/messagebundle_ro.properties +7 -5
  294. package/src/sap/fe/core/messagebundle_ru.properties +7 -5
  295. package/src/sap/fe/core/messagebundle_sh.properties +7 -5
  296. package/src/sap/fe/core/messagebundle_sk.properties +7 -5
  297. package/src/sap/fe/core/messagebundle_sl.properties +7 -5
  298. package/src/sap/fe/core/messagebundle_sv.properties +7 -5
  299. package/src/sap/fe/core/messagebundle_th.properties +7 -5
  300. package/src/sap/fe/core/messagebundle_tr.properties +7 -5
  301. package/src/sap/fe/core/messagebundle_uk.properties +7 -5
  302. package/src/sap/fe/core/messagebundle_vi.properties +7 -5
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
  305. package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
  306. package/src/sap/fe/core/operationsHelper.ts +1 -1
  307. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
  308. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  309. package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
  310. package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
  311. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
  312. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  313. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  314. package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
  315. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
  316. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  317. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  318. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
  319. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
  320. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  321. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  322. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
  323. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
  324. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  325. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  326. package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
  327. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
  328. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  329. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  330. package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
  331. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
  332. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  333. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  334. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
  335. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
  336. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  337. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
  338. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
  339. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  340. package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
  341. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  342. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  343. package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
  344. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  345. package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
  346. package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
  347. package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
  348. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  349. package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
  350. package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
  351. package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
  352. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  353. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  354. package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
  355. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
  356. package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
  357. package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
  358. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  359. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  360. package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
  361. package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
  362. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  363. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  364. package/src/sap/fe/core/type/TypeUtil.ts +2 -2
  365. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
  366. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
  367. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
  368. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
  369. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
  370. package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
  371. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  372. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  373. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  374. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  375. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -197,6 +197,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
197
197
  let bValueHelpEnabledForUnit;
198
198
  let oTextBinding;
199
199
  aTableFields.forEach(function (oColumnInfo) {
200
+ if (!oColumnInfo.annotationPath) {
201
+ return;
202
+ }
200
203
  const sDataPropertyPath = oColumnInfo.dataProperty;
201
204
  if (sDataPropertyPath) {
202
205
  var _oDataFieldConverted$, _oDataFieldConverted$2, _oDataFieldConverted$3, _oDataFieldConverted$4, _oPropertyInfo, _oPropertyInfo$annota, _oPropertyInfo$annota2, _unitPropertyInfo$ann, _unitPropertyInfo$ann2;
@@ -742,7 +745,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
742
745
  * @returns Promise returning instance of dialog.
743
746
  */
744
747
  getDialogContext: function (table, dialog) {
745
- let transCtx = dialog && dialog.getBindingContext();
748
+ let transCtx = dialog === null || dialog === void 0 ? void 0 : dialog.getBindingContext();
746
749
  if (!transCtx) {
747
750
  const model = table.getModel();
748
751
  const listBinding = table.getRowBinding();
@@ -1223,10 +1226,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
1223
1226
  return compileExpression(totalExp);
1224
1227
  },
1225
1228
  hasEditableFieldsBinding: (fields, editable) => {
1226
- return compileExpression(MassEditHelper.helpers.getBindingExpForHasEditableFields(fields, editable));
1229
+ const ret = compileExpression(MassEditHelper.helpers.getBindingExpForHasEditableFields(fields, editable));
1230
+ if (ret === "true") {
1231
+ return true;
1232
+ } else if (ret === "false") {
1233
+ return false;
1234
+ } else {
1235
+ return ret;
1236
+ }
1227
1237
  }
1228
1238
  }
1229
1239
  };
1230
1240
  return MassEditHelper;
1231
1241
  }, false);
1232
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdEhlbHBlciIsImluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aCIsInNQYXRoIiwiYVZhbHVlcyIsImFGaW5hbFBhdGgiLCJpbmRleCIsImFQYXRocyIsInNwbGl0Iiwic0Z1bGxQYXRoIiwiZm9yRWFjaCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRVbmlxdWVWYWx1ZXMiLCJzVmFsdWUiLCJzZWxmIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsImdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGgiLCJzRGF0YVByb3BlcnR5UGF0aCIsIm9WYWx1ZXMiLCJyZXN1bHQiLCJhUHJvcGVydHlQYXRocyIsImdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3giLCJhQ29udGV4dHMiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0IiwiYVByb3BlcnR5VmFsdWVzIiwib0NvbnRleHQiLCJvRGF0YU9iamVjdCIsImdldE9iamVjdCIsInNNdWx0aUxldmVsUGF0aENvbmRpdGlvbiIsImhhc093blByb3BlcnR5IiwicHVzaCIsImFVbmlxdWVQcm9wZXJ0eVZhbHVlcyIsImZpbHRlciIsImdldEhpZGRlblZhbHVlRm9yQ29udGV4dHMiLCJoaWRkZW5WYWx1ZSIsIiRQYXRoIiwic29tZSIsImdldElucHV0VHlwZSIsInByb3BlcnR5SW5mbyIsImRhdGFGaWVsZENvbnZlcnRlZCIsIm9EYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsImlucHV0VHlwZSIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1ZhbGlkRm9yTWFzc0VkaXQiLCJpc011bHRpVmFsdWVGaWVsZCIsImhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImdldElzRmllbGRHcnAiLCIkVHlwZSIsIlRhcmdldCIsInZhbHVlIiwiZ2V0VGV4dFBhdGgiLCJwcm9wZXJ0eSIsInRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwicGFyYW1ldGVycyIsInByb3BzIiwicHJlcGFyZURhdGFGb3JEaWFsb2ciLCJvVGFibGUiLCJhRGF0YUFycmF5Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiZGF0YSIsImFUYWJsZUZpZWxkcyIsImdldFRhYmxlRmllbGRzIiwib0VudGl0eVR5cGVDb250ZXh0IiwiZ2V0Q29udGV4dCIsIm9FbnRpdHlTZXRDb250ZXh0Iiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRGF0YUZpZWxkTW9kZWwiLCJKU09OTW9kZWwiLCJvUmVzdWx0Iiwic0xhYmVsVGV4dCIsImJWYWx1ZUhlbHBFbmFibGVkIiwic1VuaXRQcm9wZXJ0eVBhdGgiLCJiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQiLCJvVGV4dEJpbmRpbmciLCJvQ29sdW1uSW5mbyIsImRhdGFQcm9wZXJ0eSIsIm9Qcm9wZXJ0eUluZm8iLCJsYWJlbCIsInRhcmdldE9iamVjdCIsInRhcmdldEVudGl0eVR5cGUiLCJlbnRpdHlQcm9wZXJ0aWVzIiwib1Byb3BlcnR5IiwibmFtZSIsImdldFRleHRCaW5kaW5nIiwib0ZpZWxkQ29udGV4dCIsImFubm90YXRpb25QYXRoIiwib0RhdGFGaWVsZENvbnZlcnRlZCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib1Byb3BlcnR5Q29udGV4dCIsIm9JbnRlcmZhY2UiLCJnZXRJbnRlcmZhY2UiLCJWYWx1ZSIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiYkhpZGRlbkZpZWxkIiwiaXNJbWFnZSIsImNvbnRleHQiLCJnZXRQYXRoIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJjaGFydFByb3BlcnR5IiwidGVybSIsImlzQWN0aW9uIiwiQWN0aW9uIiwiaXNGaWVsZEdycCIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwidW5pdFByb3BlcnR5SW5mbyIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJoYXNWYWx1ZUhlbHAiLCJoYXNDb250ZXh0RGVwZW5kZW50VkgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyIsInByb3BlcnR5Rm9yRmllbGRDb250cm9sIiwiZXhwQmluZGluZyIsImdldEVkaXRNb2RlIiwiY29uc3RhbnQiLCJlZGl0TW9kZVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJFZGl0TW9kZSIsImVkaXRNb2RlSXNTdGF0aWMiLCJpbmNsdWRlcyIsImVkaXRhYmxlIiwiRWRpdGFibGUiLCJuYXZQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiaXNSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJpc1ZhbHVlSGVscEVuYWJsZWQiLCJpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0IiwidW5pdFByb3BlcnR5IiwiaXNGaWVsZFJlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZGVmYXVsdFNlbGVjdGlvblBhdGgiLCJkZWZhdWx0U2VsZWN0aW9uVW5pdFBhdGgiLCJlbnRpdHlTZXQiLCJkaXNwbGF5IiwibnVsbGFibGUiLCJpc1Byb3BlcnR5UmVhZE9ubHkiLCJlZGl0TW9kZSIsImhhc1ZIIiwicnVudGltZVBhdGgiLCJwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInByb3BlcnR5UGF0aEZvclZhbHVlSGVscCIsInVuaXRJbmZvIiwic2V0RGF0YSIsImFDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsImNvbHVtbnNEYXRhIiwiZ2V0UGFyZW50IiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29sdW1ucyIsIm1hcCIsIm9Db2x1bW4iLCJzRGF0YVByb3BlcnR5IiwiZ2V0RGF0YVByb3BlcnR5IiwiYVJlYWx0ZWRDb2x1bW5JbmZvIiwidHlwZSIsImdldEhlYWRlciIsImdldERlZmF1bHRUZXh0c0ZvckRpYWxvZyIsIm9SZXNvdXJjZUJ1bmRsZSIsImlTZWxlY3RlZENvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwia2VlcEV4aXN0aW5nUHJlZml4IiwibGVhdmVCbGFua1ZhbHVlIiwiY2xlYXJGaWVsZFZhbHVlIiwibWFzc0VkaXRUaXRsZSIsImdldFRleHQiLCJ0b1N0cmluZyIsImFwcGx5QnV0dG9uVGV4dCIsInVzZVZhbHVlSGVscFZhbHVlIiwiY2FuY2VsQnV0dG9uVGV4dCIsIm5vRmllbGRzIiwib2tCdXR0b25UZXh0Iiwic2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nIiwib0RlZmF1bHRWYWx1ZXMiLCJiVU9NRmllbGQiLCJzSW5wdXRUeXBlIiwiYlByb3BlcnR5UmVxdWlyZWQiLCJzU3VmZml4Rm9yS2VlcEV4aXN0aW5nIiwiZGVmYXVsdE9wdGlvbnMiLCJzZWxlY3RPcHRpb25zRXhpc3QiLCJzZWxlY3RPcHRpb25zIiwia2VlcEVudHJ5IiwidGV4dCIsImtleSIsImZhbHNlRW50cnkiLCJ0ZXh0SW5mbyIsInRydXRoeUVudHJ5IiwidW5zaGlmdCIsInZoZEVudHJ5IiwiY2xlYXJFbnRyeSIsImVtcHR5RW50cnkiLCJnZXRUZXh0QXJyYW5nZW1lbnRJbmZvIiwic2VsZWN0ZWRDb250ZXh0IiwiZGVzY3JpcHRpb25WYWx1ZSIsImZ1bGxUZXh0IiwiTG9nIiwiaW5mbyIsInRleHRBcnJhbmdlbWVudCIsInZhbHVlUGF0aCIsImRlc2NyaXB0aW9uIiwiaXNFZGl0YWJsZSIsImFueSIsImJpbmRpbmciLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsIm9uQ29udGV4dEVkaXRhYmxlQ2hhbmdlIiwib0RpYWxvZ0RhdGFNb2RlbCIsIm9iamVjdHNGb3JWaXNpYmlsaXR5IiwiZ2V0UHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsInVwZGF0ZU9uQ29udGV4dENoYW5nZSIsIm1PVG9Vc2UiLCJ2YWx1ZXMiLCJhdHRhY2hDaGFuZ2UiLCJiaW5kIiwiZ2V0Qm91bmRPYmplY3QiLCJBbnkiLCJtb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRGaWVsZFZpc2libGl0eSIsImlzQ29udGV4dEVkaXRhYmxlIiwic2V0UnVudGltZU1vZGVsT25EaWFsb2ciLCJkaWFsb2dDb250ZXh0IiwiYVVuaXREYXRhIiwiYVJlc3VsdHMiLCJ0ZXh0UGF0aHMiLCJhUmVhZE9ubHlGaWVsZEluZm8iLCJvRGF0YSIsInVuaXREYXRhIiwicmVzdWx0cyIsInJlYWRhYmxlUHJvcGVydHlEYXRhIiwic2VsZWN0ZWRLZXkiLCJvSW5EYXRhIiwib1RleHRJbmZvIiwic1Byb3BlcnR5S2V5Iiwic1VuaXRQcm9wZXJ0eU5hbWUiLCJvRGlzdGluY3RWYWx1ZU1hcCIsIm9EaXN0aW5jdFVuaXRNYXAiLCJzTXVsdGlMZXZlbFBhdGhWYWx1ZSIsImVudHJ5IiwidW5pdEVudHJ5Iiwic011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlIiwiYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMiLCJvYmoiLCJiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMiLCJvcGVyYW5kcyIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwidmlzaWJsZSIsImdldERpYWxvZ0NvbnRleHQiLCJ0YWJsZSIsImRpYWxvZyIsInRyYW5zQ3R4IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJsaXN0QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0cmFuc2llbnRMaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwib25EaWFsb2dPcGVuIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJmaWVsZHNJbmZvTW9kZWwiLCJjbG9zZURpYWxvZyIsIm9EaWFsb2ciLCJjbG9zZSIsImRlc3Ryb3kiLCJtZXNzYWdlSGFuZGxpbmdGb3JNYXNzRWRpdCIsIm9Db250cm9sbGVyIiwib0luRGlhbG9nIiwiZXJyb3JDb250ZXh0cyIsIkRyYWZ0U3RhdHVzIiwiRkVMaWJyYXJ5IiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImdldFZpZXciLCJtZXNzYWdlSGFuZGxlciIsInNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImZuR2V0TWVzc2FnZVN1YnRpdGxlIiwibWVzc2FnZUhhbmRsaW5nIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwidW5ib3VuZEVycm9ycyIsIm1lc3NhZ2UiLCJnZXRUYXJnZXQiLCJlZGl0RmxvdyIsInNldERyYWZ0U3RhdHVzIiwiU2F2ZWQiLCJzdWNjZXNzVG9hc3QiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkNsZWFyIiwic2hvd01lc3NhZ2VCb3giLCJzaG93TWVzc2FnZURpYWxvZyIsImlzT3BlbiIsImdldFNpZGVFZmZlY3REYXRhRm9yS2V5IiwiYXBwQ29tcG9uZW50Iiwic093bmVyRW50aXR5VHlwZSIsImJhc2VTaWRlRWZmZWN0c01hcEFycmF5Iiwia2V5VmFsdWUiLCJzaWRlRWZmZWN0U2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImZpZWxkR3JvdXBJZHMiLCJjb21wdXRlRmllbGRHcm91cElkcyIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJmbkdldFBhdGhGb3JTb3VyY2VQcm9wZXJ0eSIsInNFbnRpdHlUeXBlIiwic05hdmlnYXRpb25QYXRoIiwic3Vic3RyIiwibGFzdEluZGV4T2YiLCJwT3duZXJFbnRpdHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlcXVlc3RPYmplY3QiLCJmbkdldEVudGl0eVR5cGVPZk93bmVyIiwiYmFzZU5hdlBhdGgiLCJ0YXJnZXRFbnRpdHkiLCJhVGFyZ2V0cyIsIm93bmVyRW50aXR5VHlwZSIsInBPd25lciIsIiRQYXJ0bmVyIiwib3duZXJOYXZQYXRoIiwiZW50aXR5T2JqT2ZPd25lclBhcnRuZXIiLCJlbnRpdHlUeXBlT2ZPd25lclBhcnRuZXIiLCJmbkdldFRhcmdldHNGb3JNYXNzRWRpdCIsInNpZGVFZmZlY3RzRGF0YSIsInRhcmdldFByb3BlcnRpZXMiLCJhVGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwiYVRhcmdldEVudGl0aWVzIiwiYVByb21pc2VzIiwidGFyZ2V0UHJvcCIsInRoZW4iLCJyZXN1bHRFbnRpdHkiLCJhbGwiLCJjaGVja0lmRW50aXR5RXhpc3RzQXNUYXJnZXRFbnRpdHkiLCJzaWRlRWZmZWN0c01hcCIsInNpZGVFZmZlY3RzT25PdGhlckVudGl0eSIsImVudGl0eVNldE5hbWUiLCJwb3AiLCJzaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQiLCJ0YXJnZXRFbnRpdGllc0FycmF5Iiwic2lkZUVmZmVjdHMiLCJpbm5lck9iaiIsImhhbmRsZU1hc3NFZGl0RmllbGRVcGRhdGVBbmRSZXF1ZXN0U2lkZUVmZmVjdHMiLCJtUGFyYW1zIiwib0ZpZWxkUHJvbWlzZSIsImdyb3VwSWQiLCJkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSIsImltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvbWlzZXMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImlzU2lkZUVmZmVjdHNXaXRoQ3VycmVudEVudGl0eUFzVGFyZ2V0IiwiYWxsRW50aXR5VHlwZXNXaXRoUXVhbGlmaWVyIiwic2lkZUVmZmVjdHNEYXRhRm9yRmllbGQiLCJtVmlzaXRlZFNpZGVFZmZlY3RzIiwiZW50cmllcyIsImVudGl0eVR5cGVXaXRoUXVhbGlmaWVyIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYWxsRmFpbGVkU2lkZUVmZmVjdHMiLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJhRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQiLCJjb25jYXQiLCJhU2lkZUVmZmVjdCIsImFJbW1lZGlhdGVUYXJnZXRzIiwiYWxsVGFyZ2V0cyIsInRyaWdnZXJBY3Rpb25OYW1lIiwiZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucyIsIm1TaWRlRWZmZWN0Iiwic2lkZUVmZmVjdEVudGl0eVR5cGUiLCJ0YXJnZXRzQXJyYXlGb3JBbGxQcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInRyaWdnZXJBY3Rpb24iLCJhRGVmZXJyZWRUYXJnZXRzIiwidGFyZ2V0IiwiaXNTdGF0aWNBY3Rpb24iLCJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsIlRyaWdnZXJBY3Rpb24iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJhbGxTZXR0bGVkIiwiY3JlYXRlRGlhbG9nIiwic0ZyYWdtZW50TmFtZSIsIm1ldGFNb2RlbCIsIml0ZW1zTW9kZWwiLCJUZW1wbGF0ZU1vZGVsIiwiZ2V0RGF0YSIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib0NyZWF0ZWRGcmFnbWVudCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJiaW5kaW5nQ29udGV4dHMiLCJkYXRhRmllbGRNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aCIsIm1vZGVscyIsIm9EaWFsb2dDb250ZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsInRpdGxlIiwiY29udGVudCIsImFmdGVyT3BlbiIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwiaGVscGVycyIsImdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dCIsInByZXNzIiwib0V2ZW50IiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib01vZGVsIiwiYVByb3BlcnR5UmVhZGFibGVJbmZvIiwiYWxsU2lkZUVmZmVjdHMiLCJtYXNzRWRpdFByb21pc2VzIiwiZmFpbGVkRmllbGRzRGF0YSIsInNlbGVjdGVkUm93c0xlbmd0aCIsImlkeCIsImNhdGNoIiwib0Vycm9yIiwiZXJyb3IiLCJyZWplY3QiLCJpc0ZpZWxkVXBkYXRlRmFpbGVkIiwiZGF0YVRvVXBkYXRlRmllbGRBbmRTaWRlRWZmZWN0cyIsImRlZmVycmVkUmVxdWVzdHMiLCJzaWRlRWZmZWN0c0RhdGFGb3JBbGxLZXlzIiwia2V5c1dpdGhTaWRlRWZmZWN0cyIsImN1cnJlbnRLZXkiLCJkZWZlcnJlZFNpZGVFZmZlY3RzRGF0YSIsInJlcSIsImZuR2V0RGVmZXJyZWRUYXJnZXRzIiwiZm5HZXREZWZlcnJlZFRhcmdldHNBbmRBY3Rpb25zIiwiZSIsImVuZEJ1dHRvbiIsImhhc0VkaXRhYmxlRmllbGRzQmluZGluZyIsImdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyIsImZpZWxkcyIsInRvdGFsRXhwIiwicmVkdWNlIiwiZXhwcmVzc2lvbiIsImZpZWxkIiwib3IiLCJwYXRoSW5Nb2RlbCIsIm5vdCIsImRlZmF1bHRWYWx1ZXMiLCJlZGl0YWJsZUV4cCIsImlmRWxzZSIsImNvbXBpbGVFeHByZXNzaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSxcblx0TWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5LFxuXHRNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGlmRWxzZSwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVNpZGVFZmZlY3RzVHlwZSwgU2lkZUVmZmVjdHNFbnRpdHlUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoLFxuXHRoYXNDdXJyZW5jeSxcblx0aGFzVW5pdCxcblx0aGFzVmFsdWVIZWxwLFxuXHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRleHRCaW5kaW5nLCBzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL0ludGVybmFsRmllbGQuYmxvY2tcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgQW55VHlwZSB9IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcbmltcG9ydCBBbnkgZnJvbSBcIi4uL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHsgY29udmVydE1ldGFNb2RlbENvbnRleHQsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaXNSZWFkT25seUV4cHJlc3Npb24gfSBmcm9tIFwiLi4vdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7IGdldEVkaXRNb2RlLCBnZXRSZXF1aXJlZEV4cHJlc3Npb24sIGlzTXVsdGlWYWx1ZUZpZWxkIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcblxuLyogVGhpcyBjbGFzcyBjb250YWlucyBoZWxwZXJzIHRvIGJlIHVzZWQgZm9yIG1hc3MgZWRpdCBmdW5jdGlvbmFsaXR5ICovXG50eXBlIFRleHRBcnJhbmdlbWVudEluZm8gPSB7XG5cdHRleHRBcnJhbmdlbWVudDogc3RyaW5nO1xuXHR2YWx1ZVBhdGg6IHN0cmluZztcblx0ZGVzY3JpcHRpb25QYXRoPzogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHRmdWxsVGV4dDogc3RyaW5nO1xufTtcblxudHlwZSBCaW5kaW5nSW5mbyA9IHtcblx0cGF0aD86IHN0cmluZztcblx0bW9kZWw/OiBzdHJpbmcgfCBvYmplY3Q7XG5cdHBhcmFtZXRlcnM/OiBBcnJheTxCaW5kaW5nSW5mbz47XG59O1xuXG5leHBvcnQgdHlwZSBEYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzVHlwZSA9IHtcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXHRvRmllbGRQcm9taXNlOiBQcm9taXNlPGFueT47XG5cdHNpZGVFZmZlY3RzTWFwOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfCBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xuXHR0ZXh0UGF0aHM6IGFueTtcblx0Z3JvdXBJZDogc3RyaW5nO1xuXHRrZXk6IHN0cmluZztcblx0b0VudGl0eVNldENvbnRleHQ6IENvbnRleHQ7XG5cdG9NZXRhTW9kZWw6IGFueTtcblx0b1NlbGVjdGVkQ29udGV4dDogYW55O1xuXHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZTogYW55O1xufTtcblxuY29uc3QgTWFzc0VkaXRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdmFsdWUgYXQgZmluYWwgb3IgZGVlcGVzdCBsZXZlbCBwYXRoIHdpdGggYSBibGFuayBhcnJheS5cblx0ICogUmV0dXJuIGFuIGVtcHR5IGFycmF5IHBvaW50aW5nIHRvIHRoZSBmaW5hbCBvciBkZWVwZXN0IGxldmVsIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBhVmFsdWVzIEFycmF5IGluc3RhbmNlIHdoZXJlIHRoZSBkZWZhdWx0IGRhdGEgbmVlZHMgdG8gYmUgYWRkZWRcblx0ICogQHJldHVybnMgVGhlIGZpbmFsIHBhdGhcblx0ICovXG5cdGluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aDogZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIGFWYWx1ZXM6IGFueSAvKiwgdHJhbnNDdHg6IENvbnRleHQgKi8pIHtcblx0XHRsZXQgYUZpbmFsUGF0aDogYW55O1xuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgYVBhdGhzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBzRnVsbFBhdGggPSBcIlwiO1xuXHRcdGFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdGlmICghYVZhbHVlc1tzUHJvcGVydHlQYXRoXSAmJiBpbmRleCA9PT0gMCkge1xuXHRcdFx0XHRhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0XHRcdGFGaW5hbFBhdGggPSBhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdO1xuXHRcdFx0XHRzRnVsbFBhdGggPSBzRnVsbFBhdGggKyBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fSBlbHNlIGlmICghYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRzRnVsbFBhdGggPSBgJHtzRnVsbFBhdGh9LyR7c1Byb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRpZiAoc0Z1bGxQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHRcdGFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF0gPSB7fTtcblx0XHRcdFx0XHRhRmluYWxQYXRoID0gYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRmluYWxQYXRoW3NQcm9wZXJ0eVBhdGhdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUZpbmFsUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB1bmlxdWUgdmFsdWVzIGZvciBnaXZlbiBhcnJheSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVmFsdWUgUHJvcGVydHkgdmFsdWVcblx0ICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuXHQgKiBAcGFyYW0gc2VsZiBJbnN0YW5jZSBvZiB0aGUgYXJyYXlcblx0ICogQHJldHVybnMgVGhlIHVuaXF1ZSB2YWx1ZVxuXHQgKi9cblx0Z2V0VW5pcXVlVmFsdWVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIHNlbGY6IGFueVtdKSB7XG5cdFx0cmV0dXJuIHNWYWx1ZSAhPSB1bmRlZmluZWQgJiYgc1ZhbHVlICE9IG51bGwgPyBzZWxmLmluZGV4T2Yoc1ZhbHVlKSA9PT0gaW5kZXggOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnR5IHZhbHVlIGZvciBhIG11bHRpLWxldmVsIHBhdGggKGZvciBleGFtcGxlOiBfTWF0ZXJpYWxzL01hdGVyaWFsX0RldGFpbHMgZ2V0cyB0aGUgdmFsdWUgb2YgTWF0ZXJpYWxfRGV0YWlscyB1bmRlciBfTWF0ZXJpYWxzIE9iamVjdCkuXG5cdCAqIFJldHVybnMgdGhlIHByb3BlcnR5VmFsdWUsIHdoaWNoIGNhbiBiZSBvZiBhbnkgdHlwZSAoc3RyaW5nLCBudW1iZXIsIGV0Yy4uKS5cblx0ICpcblx0ICogQHBhcmFtIHNEYXRhUHJvcGVydHlQYXRoIFByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIG9WYWx1ZXMgT2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlc1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgdmFsdWVcblx0ICovXG5cdGdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGg6IGZ1bmN0aW9uIChzRGF0YVByb3BlcnR5UGF0aDogc3RyaW5nLCBvVmFsdWVzOiBhbnkpIHtcblx0XHRsZXQgcmVzdWx0OiBhbnk7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHlQYXRoICYmIHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5UGF0aHMgPSBzRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRhUHJvcGVydHlQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdHJlc3VsdCA9IG9WYWx1ZXMgJiYgb1ZhbHVlc1tzUGF0aF0gPyBvVmFsdWVzW3NQYXRoXSA6IHJlc3VsdCAmJiByZXN1bHRbc1BhdGhdO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGtleSBwYXRoIGZvciB0aGUga2V5IG9mIGEgY29tYm8gYm94IHRoYXQgbXVzdCBiZSBzZWxlY3RlZCBpbml0aWFsbHkgd2hlbiB0aGUgZGlhbG9nIG9wZW5zOlxuXHQgKiA9PiBJZiBwcm9wZXJ0eVZhbHVlIGZvciBhbGwgc2VsZWN0ZWQgY29udGV4dHMgaXMgZGlmZmVyZW50LCB0aGVuIDwgS2VlcCBFeGlzdGluZyBWYWx1ZXMgPiBpcyBwcmVzZWxlY3RlZC5cblx0ICogPT4gSWYgcHJvcGVydHlWYWx1ZSBmb3IgYWxsIHNlbGVjdGVkIGNvbnRleHRzIGlzIHRoZSBzYW1lLCB0aGVuIHRoZSBwcm9wZXJ0eVZhbHVlIGlzIHByZXNlbGVjdGVkLlxuXHQgKiA9PiBJZiBwcm9wZXJ0eVZhbHVlIGZvciBhbGwgc2VsZWN0ZWQgY29udGV4dHMgaXMgZW1wdHksIHRoZW4gPCBMZWF2ZSBCbGFuayA+IGlzIHByZXNlbGVjdGVkLlxuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIHNEYXRhUHJvcGVydHlQYXRoIERhdGEgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUga2V5IHBhdGhcblx0ICovXG5cdGdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3g6IGZ1bmN0aW9uIChhQ29udGV4dHM6IGFueVtdLCBzRGF0YVByb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IHJlc3VsdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzRGF0YVByb3BlcnR5UGF0aCAmJiBhQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGFDb250ZXh0cyxcblx0XHRcdFx0YVByb3BlcnR5VmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0b1NlbGVjdGVkQ29udGV4dC5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhT2JqZWN0ID0gb0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdGNvbnN0IHNNdWx0aUxldmVsUGF0aENvbmRpdGlvbiA9XG5cdFx0XHRcdFx0c0RhdGFQcm9wZXJ0eVBhdGguaW5kZXhPZihcIi9cIikgPiAtMSAmJiBvRGF0YU9iamVjdC5oYXNPd25Qcm9wZXJ0eShzRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIilbMF0pO1xuXHRcdFx0XHRpZiAob0NvbnRleHQgJiYgKG9EYXRhT2JqZWN0Lmhhc093blByb3BlcnR5KHNEYXRhUHJvcGVydHlQYXRoKSB8fCBzTXVsdGlMZXZlbFBhdGhDb25kaXRpb24pKSB7XG5cdFx0XHRcdFx0YVByb3BlcnR5VmFsdWVzLnB1c2gob0NvbnRleHQuZ2V0T2JqZWN0KHNEYXRhUHJvcGVydHlQYXRoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYVVuaXF1ZVByb3BlcnR5VmFsdWVzID0gYVByb3BlcnR5VmFsdWVzLmZpbHRlcihNYXNzRWRpdEhlbHBlci5nZXRVbmlxdWVWYWx1ZXMpO1xuXHRcdFx0aWYgKGFVbmlxdWVQcm9wZXJ0eVZhbHVlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGBEZWZhdWx0LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdH0gZWxzZSBpZiAoYVVuaXF1ZVByb3BlcnR5VmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXN1bHQgPSBgRW1wdHkvJHtzRGF0YVByb3BlcnR5UGF0aH1gO1xuXHRcdFx0fSBlbHNlIGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGAke3NEYXRhUHJvcGVydHlQYXRofS8ke2FVbmlxdWVQcm9wZXJ0eVZhbHVlc1swXX1gO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaGlkZGVuIGFubm90YXRpb24gdmFsdWUgW2JvdGggc3RhdGljIGFuZCBwYXRoIGJhc2VkXSBmb3IgdGFibGUncyBzZWxlY3RlZCBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gaGlkZGVuVmFsdWUgSGlkZGVuIGFubm90YXRpb24gdmFsdWUgLyBwYXRoIGZvciBmaWVsZFxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHJldHVybnMgVGhlIGhpZGRlbiBhbm5vdGF0aW9uIHZhbHVlXG5cdCAqL1xuXHRnZXRIaWRkZW5WYWx1ZUZvckNvbnRleHRzOiBmdW5jdGlvbiAoaGlkZGVuVmFsdWU6IGFueSwgYUNvbnRleHRzOiBhbnlbXSkge1xuXHRcdGlmIChoaWRkZW5WYWx1ZSAmJiBoaWRkZW5WYWx1ZS4kUGF0aCkge1xuXHRcdFx0cmV0dXJuICFhQ29udGV4dHMuc29tZShmdW5jdGlvbiAob1NlbGVjdGVkQ29udGV4dDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChoaWRkZW5WYWx1ZS4kUGF0aCkgPT09IGZhbHNlO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBoaWRkZW5WYWx1ZTtcblx0fSxcblxuXHRnZXRJbnB1dFR5cGU6IGZ1bmN0aW9uIChwcm9wZXJ0eUluZm86IGFueSwgZGF0YUZpZWxkQ29udmVydGVkOiBhbnksIG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogc3RyaW5nIHtcblx0XHRjb25zdCBlZGl0U3R5bGVQcm9wZXJ0aWVzID0ge30gYXMgRmllbGRQcm9wZXJ0aWVzO1xuXHRcdGxldCBpbnB1dFR5cGUhOiBzdHJpbmc7XG5cdFx0aWYgKHByb3BlcnR5SW5mbykge1xuXHRcdFx0c2V0RWRpdFN0eWxlUHJvcGVydGllcyhlZGl0U3R5bGVQcm9wZXJ0aWVzLCBkYXRhRmllbGRDb252ZXJ0ZWQsIG9EYXRhTW9kZWxQYXRoLCB0cnVlKTtcblx0XHRcdGlucHV0VHlwZSA9IGVkaXRTdHlsZVByb3BlcnRpZXM/LmVkaXRTdHlsZSB8fCBcIlwiO1xuXHRcdH1cblx0XHRjb25zdCBpc1ZhbGlkRm9yTWFzc0VkaXQgPVxuXHRcdFx0aW5wdXRUeXBlICYmXG5cdFx0XHRbXCJEYXRlUGlja2VyXCIsIFwiVGltZVBpY2tlclwiLCBcIkRhdGVUaW1lUGlja2VyXCIsIFwiUmF0aW5nSW5kaWNhdG9yXCJdLmluZGV4T2YoaW5wdXRUeXBlKSA9PT0gLTEgJiZcblx0XHRcdCFpc011bHRpVmFsdWVGaWVsZChvRGF0YU1vZGVsUGF0aCkgJiZcblx0XHRcdCFoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcGVydHlJbmZvKTtcblxuXHRcdHJldHVybiAoaXNWYWxpZEZvck1hc3NFZGl0IHx8IFwiXCIpICYmIGlucHV0VHlwZTtcblx0fSxcblxuXHRnZXRJc0ZpZWxkR3JwOiBmdW5jdGlvbiAoZGF0YUZpZWxkQ29udmVydGVkOiBhbnkpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkICYmXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQW5ub3RhdGlvblwiICYmXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQuVGFyZ2V0ICYmXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQuVGFyZ2V0LnZhbHVlICYmXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQuVGFyZ2V0LnZhbHVlLmluZGV4T2YoXCJGaWVsZEdyb3VwXCIpID4gLTFcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCBwYXRoIGZvciB0aGUgbWFzcyBlZGl0IGZpZWxkLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdGV4dEJpbmRpbmcgVGV4dCBCaW5kaW5nIEluZm9cblx0ICogQHBhcmFtIGRpc3BsYXlNb2RlIERpc3BsYXkgbW9kZVxuXHQgKiBAcmV0dXJucyBUZXh0IFByb3BlcnR5IFBhdGggaWYgaXQgZXhpc3RzXG5cdCAqL1xuXHRnZXRUZXh0UGF0aDogZnVuY3Rpb24gKHByb3BlcnR5OiBzdHJpbmcsIHRleHRCaW5kaW5nOiBhbnksIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCBkZXNjcmlwdGlvblBhdGg7XG5cdFx0aWYgKHRleHRCaW5kaW5nICYmICh0ZXh0QmluZGluZy5wYXRoIHx8ICh0ZXh0QmluZGluZy5wYXJhbWV0ZXJzICYmIHRleHRCaW5kaW5nLnBhcmFtZXRlcnMubGVuZ3RoKSkgJiYgcHJvcGVydHkpIHtcblx0XHRcdGlmICh0ZXh0QmluZGluZy5wYXRoICYmIGRpc3BsYXlNb2RlID09PSBcIkRlc2NyaXB0aW9uXCIpIHtcblx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoID0gdGV4dEJpbmRpbmcucGF0aDtcblx0XHRcdH0gZWxzZSBpZiAodGV4dEJpbmRpbmcucGFyYW1ldGVycykge1xuXHRcdFx0XHR0ZXh0QmluZGluZy5wYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHByb3BzOiBCaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdGlmIChwcm9wcy5wYXRoICYmIHByb3BzLnBhdGggIT09IHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGggPSBwcm9wcy5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBkZXNjcmlwdGlvblBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGEgSlNPTiBNb2RlbCBmb3IgcHJvcGVydGllcyBvZiBkaWFsb2cgZmllbGRzIFtsYWJlbCwgdmlzaWJsaXR5LCBkYXRhcHJvcGVydHksIGV0Yy5dLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIFRhYmxlXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gYURhdGFBcnJheSBBcnJheSBjb250YWluaW5nIGRhdGEgcmVsYXRlZCB0byB0aGUgZGlhbG9nIHVzZWQgYnkgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgbW9kZWxcblx0ICovXG5cdHByZXBhcmVEYXRhRm9yRGlhbG9nOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBhbnlbXSwgYURhdGFBcnJheTogYW55W10pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1RhYmxlICYmIChvVGFibGUuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBhbnkpLFxuXHRcdFx0c0N1cnJlbnRFbnRpdHlTZXROYW1lID0gb1RhYmxlLmRhdGEoXCJtZXRhUGF0aFwiKSxcblx0XHRcdGFUYWJsZUZpZWxkcyA9IE1hc3NFZGl0SGVscGVyLmdldFRhYmxlRmllbGRzKG9UYWJsZSksXG5cdFx0XHRvRW50aXR5VHlwZUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS9AYCksXG5cdFx0XHRvRW50aXR5U2V0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzQ3VycmVudEVudGl0eVNldE5hbWUpLFxuXHRcdFx0b0RhdGFNb2RlbE9iamVjdFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0VudGl0eVR5cGVDb250ZXh0KTtcblxuXHRcdGNvbnN0IG9EYXRhRmllbGRNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRsZXQgb1Jlc3VsdDtcblx0XHRsZXQgc0xhYmVsVGV4dDtcblx0XHRsZXQgYlZhbHVlSGVscEVuYWJsZWQ7XG5cdFx0bGV0IHNVbml0UHJvcGVydHlQYXRoO1xuXHRcdGxldCBiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQ7XG5cdFx0bGV0IG9UZXh0QmluZGluZztcblxuXHRcdGFUYWJsZUZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogYW55KSB7XG5cdFx0XHRjb25zdCBzRGF0YVByb3BlcnR5UGF0aCA9IG9Db2x1bW5JbmZvLmRhdGFQcm9wZXJ0eTtcblx0XHRcdGlmIChzRGF0YVByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRsZXQgb1Byb3BlcnR5SW5mbyA9IHNEYXRhUHJvcGVydHlQYXRoICYmIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1AYCk7XG5cdFx0XHRcdHNMYWJlbFRleHQgPVxuXHRcdFx0XHRcdG9Db2x1bW5JbmZvLmxhYmVsIHx8IChvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm9bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdKSB8fCBzRGF0YVByb3BlcnR5UGF0aDtcblxuXHRcdFx0XHRpZiAob0RhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRcdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmlsdGVyKGZ1bmN0aW9uIChcblx0XHRcdFx0XHRcdG9Qcm9wZXJ0eTogYW55XG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5Lm5hbWUgPT09IHNEYXRhUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdFswXSB8fCB7fTtcblx0XHRcdFx0b1RleHRCaW5kaW5nID0gZ2V0VGV4dEJpbmRpbmcob0RhdGFNb2RlbE9iamVjdFBhdGgsIHt9LCB0cnVlKSB8fCB7fTtcblx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChvQ29sdW1uSW5mby5hbm5vdGF0aW9uUGF0aCksXG5cdFx0XHRcdFx0b0RhdGFGaWVsZENvbnZlcnRlZCA9IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9GaWVsZENvbnRleHQpLFxuXHRcdFx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofUBgKSxcblx0XHRcdFx0XHRvSW50ZXJmYWNlID0gb1Byb3BlcnR5Q29udGV4dCAmJiBvUHJvcGVydHlDb250ZXh0LmdldEludGVyZmFjZSgpO1xuXG5cdFx0XHRcdGxldCBvRGF0YU1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRmllbGRDb250ZXh0LCBvRW50aXR5U2V0Q29udGV4dCk7XG5cdFx0XHRcdGlmIChvRGF0YUZpZWxkQ29udmVydGVkPy5WYWx1ZT8ucGF0aD8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgob0RhdGFNb2RlbFBhdGgsIHNEYXRhUHJvcGVydHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiSGlkZGVuRmllbGQgPVxuXHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLmdldEhpZGRlblZhbHVlRm9yQ29udGV4dHMoXG5cdFx0XHRcdFx0XHRvRmllbGRDb250ZXh0ICYmIG9GaWVsZENvbnRleHQuZ2V0T2JqZWN0KClbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzXG5cdFx0XHRcdFx0KSB8fCBmYWxzZTtcblx0XHRcdFx0Y29uc3QgaXNJbWFnZSA9IG9Qcm9wZXJ0eUluZm8gJiYgb1Byb3BlcnR5SW5mb1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdO1xuXG5cdFx0XHRcdG9JbnRlcmZhY2UuY29udGV4dCA9IHtcblx0XHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9JbnRlcmZhY2UuZ2V0TW9kZWwoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldFBhdGg6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9Qcm9wZXJ0eUluZm8gPSBpc1Byb3BlcnR5KG9EYXRhRmllbGRDb252ZXJ0ZWQpXG5cdFx0XHRcdFx0PyBvRGF0YUZpZWxkQ29udmVydGVkXG5cdFx0XHRcdFx0OiBvRGF0YUZpZWxkQ29udmVydGVkPy5WYWx1ZT8uJHRhcmdldCA/PyBvRGF0YUZpZWxkQ29udmVydGVkPy5UYXJnZXQ/LiR0YXJnZXQ7XG5cdFx0XHRcdC8vIERhdGFmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIEZpZWxkQ29udHJvbCBjYWxjdWxhdGlvbiwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWRcblxuXHRcdFx0XHRjb25zdCBjaGFydFByb3BlcnR5ID0gb1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvLnRlcm0gJiYgb1Byb3BlcnR5SW5mby50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI7XG5cdFx0XHRcdGNvbnN0IGlzQWN0aW9uID0gISFvRGF0YUZpZWxkQ29udmVydGVkLkFjdGlvbjtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEdycCA9IE1hc3NFZGl0SGVscGVyLmdldElzRmllbGRHcnAob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdFx0XHRcdGlmIChpc0ltYWdlIHx8IGJIaWRkZW5GaWVsZCB8fCBjaGFydFByb3BlcnR5IHx8IGlzQWN0aW9uIHx8IGlzRmllbGRHcnApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBWYWx1ZUhlbHAgcHJvcGVydGllc1xuXHRcdFx0XHRzVW5pdFByb3BlcnR5UGF0aCA9XG5cdFx0XHRcdFx0KChoYXNDdXJyZW5jeShvUHJvcGVydHlJbmZvKSB8fCBoYXNVbml0KG9Qcm9wZXJ0eUluZm8pKSAmJiBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChvUHJvcGVydHlJbmZvKSkgfHwgXCJcIjtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5SW5mbyA9IHNVbml0UHJvcGVydHlQYXRoICYmIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5SW5mbyk7XG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkID0gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgPSB1bml0UHJvcGVydHlJbmZvICYmIGhhc1ZhbHVlSGVscCh1bml0UHJvcGVydHlJbmZvKTtcblxuXHRcdFx0XHRjb25zdCBoYXNDb250ZXh0RGVwZW5kZW50VkggPVxuXHRcdFx0XHRcdChiVmFsdWVIZWxwRW5hYmxlZCB8fCBiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQpICYmXG5cdFx0XHRcdFx0KG9Qcm9wZXJ0eUluZm8/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyB8fFxuXHRcdFx0XHRcdFx0KHVuaXRQcm9wZXJ0eUluZm8gJiYgdW5pdFByb3BlcnR5SW5mbz8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzKSk7XG5cdFx0XHRcdGlmIChoYXNDb250ZXh0RGVwZW5kZW50VkgpIHtcblx0XHRcdFx0XHQvLyBjb250ZXh0IGRlcGVuZGVudCBWSCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNYXNzIEVkaXQuXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRWRpdE1vZGUgYW5kIElucHV0VHlwZVxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCA9IG9Qcm9wZXJ0eUluZm8gJiYgb1Byb3BlcnR5SW5mby5WYWx1ZSA/IG9Qcm9wZXJ0eUluZm8uVmFsdWUgOiBvUHJvcGVydHlJbmZvO1xuXHRcdFx0XHRjb25zdCBleHBCaW5kaW5nID0gZ2V0RWRpdE1vZGUocHJvcGVydHlGb3JGaWVsZENvbnRyb2wsIG9EYXRhTW9kZWxQYXRoLCBmYWxzZSwgZmFsc2UsIG9EYXRhRmllbGRDb252ZXJ0ZWQsIGNvbnN0YW50KHRydWUpKTtcblx0XHRcdFx0Y29uc3QgZWRpdE1vZGVWYWx1ZXMgPSBPYmplY3Qua2V5cyhFZGl0TW9kZSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlSXNTdGF0aWMgPSAhIWV4cEJpbmRpbmcgJiYgZWRpdE1vZGVWYWx1ZXMuaW5jbHVkZXMoZXhwQmluZGluZyBhcyBFZGl0TW9kZSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRhYmxlID0gISFleHBCaW5kaW5nICYmICgoZWRpdE1vZGVJc1N0YXRpYyAmJiBleHBCaW5kaW5nID09PSBFZGl0TW9kZS5FZGl0YWJsZSkgfHwgIWVkaXRNb2RlSXNTdGF0aWMpO1xuXHRcdFx0XHRjb25zdCBuYXZQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAgPSBzRGF0YVByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgJiYgYlZhbHVlSGVscEVuYWJsZWQ7XG5cdFx0XHRcdGlmICghZWRpdGFibGUgfHwgbmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW5wdXRUeXBlID0gTWFzc0VkaXRIZWxwZXIuZ2V0SW5wdXRUeXBlKG9Qcm9wZXJ0eUluZm8sIG9EYXRhRmllbGRDb252ZXJ0ZWQsIG9EYXRhTW9kZWxQYXRoKTtcblxuXHRcdFx0XHRpZiAoaW5wdXRUeXBlKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKG9Qcm9wZXJ0eUluZm8sIHJlbGF0aXZlUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0Y29uc3QgaXNWYWx1ZUhlbHBFbmFibGVkID0gYlZhbHVlSGVscEVuYWJsZWQgPyBiVmFsdWVIZWxwRW5hYmxlZCA6IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgPVxuXHRcdFx0XHRcdFx0YlZhbHVlSGVscEVuYWJsZWRGb3JVbml0ICYmICFzVW5pdFByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgPyBiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgOiBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBzVW5pdFByb3BlcnR5UGF0aCAmJiAhc0RhdGFQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gc1VuaXRQcm9wZXJ0eVBhdGggOiBmYWxzZTtcblxuXHRcdFx0XHRcdG9SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRsYWJlbDogc0xhYmVsVGV4dCxcblx0XHRcdFx0XHRcdGRhdGFQcm9wZXJ0eTogc0RhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRpc1ZhbHVlSGVscEVuYWJsZWQ6IGJWYWx1ZUhlbHBFbmFibGVkID8gYlZhbHVlSGVscEVuYWJsZWQgOiBmYWxzZSxcblx0XHRcdFx0XHRcdHVuaXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdGlzRmllbGRSZXF1aXJlZDogZ2V0UmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eUluZm8sIG9EYXRhRmllbGRDb252ZXJ0ZWQsIHRydWUsIGZhbHNlLCB7fSwgb0RhdGFNb2RlbFBhdGgpLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFNlbGVjdGlvblBhdGg6IHNEYXRhUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHRcdD8gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChhQ29udGV4dHMsIHNEYXRhUHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFNlbGVjdGlvblVuaXRQYXRoOiBzVW5pdFByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQ/IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBzVW5pdFByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc0N1cnJlbnRFbnRpdHlTZXROYW1lLFxuXHRcdFx0XHRcdFx0ZGlzcGxheTogZGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IE1hc3NFZGl0SGVscGVyLmdldFRleHRQYXRoKHNEYXRhUHJvcGVydHlQYXRoLCBvVGV4dEJpbmRpbmcsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRcdG51bGxhYmxlOiBvUHJvcGVydHlJbmZvLm51bGxhYmxlICE9PSB1bmRlZmluZWQgPyBvUHJvcGVydHlJbmZvLm51bGxhYmxlIDogdHJ1ZSxcblx0XHRcdFx0XHRcdGlzUHJvcGVydHlSZWFkT25seTogaXNSZWFkT25seSAhPT0gdW5kZWZpbmVkID8gaXNSZWFkT25seSA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aW5wdXRUeXBlOiBpbnB1dFR5cGUsXG5cdFx0XHRcdFx0XHRlZGl0TW9kZTogZWRpdGFibGUgPyBleHBCaW5kaW5nIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlJbmZvOiB7XG5cdFx0XHRcdFx0XHRcdGhhc1ZIOiBpc1ZhbHVlSGVscEVuYWJsZWQsXG5cdFx0XHRcdFx0XHRcdHJ1bnRpbWVQYXRoOiBcImZpZWxkc0luZm8+L3ZhbHVlcy9cIixcblx0XHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiBzRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IG9Qcm9wZXJ0eUluZm8uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGhGb3JWYWx1ZUhlbHA6IGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1gXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0dW5pdEluZm86IHVuaXRQcm9wZXJ0eSAmJiB7XG5cdFx0XHRcdFx0XHRcdGhhc1ZIOiBpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0LFxuXHRcdFx0XHRcdFx0XHRydW50aW1lUGF0aDogXCJmaWVsZHNJbmZvPi91bml0RGF0YS9cIixcblx0XHRcdFx0XHRcdFx0cmVsYXRpdmVQYXRoOiB1bml0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aEZvclZhbHVlSGVscDogYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3VuaXRQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRhRGF0YUFycmF5LnB1c2gob1Jlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRvRGF0YUZpZWxkTW9kZWwuc2V0RGF0YShhRGF0YUFycmF5KTtcblx0XHRyZXR1cm4gb0RhdGFGaWVsZE1vZGVsO1xuXHR9LFxuXG5cdGdldFRhYmxlRmllbGRzOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBhQ29sdW1ucyA9IChvVGFibGUgJiYgb1RhYmxlLmdldENvbHVtbnMoKSkgfHwgW107XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSBvVGFibGUgJiYgb1RhYmxlLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdFx0cmV0dXJuIGFDb2x1bW5zLm1hcChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRjb25zdCBzRGF0YVByb3BlcnR5ID0gb0NvbHVtbiAmJiBvQ29sdW1uLmdldERhdGFQcm9wZXJ0eSgpLFxuXHRcdFx0XHRhUmVhbHRlZENvbHVtbkluZm8gPVxuXHRcdFx0XHRcdGNvbHVtbnNEYXRhICYmXG5cdFx0XHRcdFx0Y29sdW1uc0RhdGEuZmlsdGVyKGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbkluZm8ubmFtZSA9PT0gc0RhdGFQcm9wZXJ0eSAmJiBvQ29sdW1uSW5mby50eXBlID09PSBcIkFubm90YXRpb25cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGFQcm9wZXJ0eTogc0RhdGFQcm9wZXJ0eSxcblx0XHRcdFx0bGFiZWw6IG9Db2x1bW4uZ2V0SGVhZGVyKCksXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBhUmVhbHRlZENvbHVtbkluZm8gJiYgYVJlYWx0ZWRDb2x1bW5JbmZvWzBdICYmIGFSZWFsdGVkQ29sdW1uSW5mb1swXS5hbm5vdGF0aW9uUGF0aFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSxcblxuXHRnZXREZWZhdWx0VGV4dHNGb3JEaWFsb2c6IGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSwgaVNlbGVjdGVkQ29udGV4dHM6IGFueSwgb1RhYmxlOiBhbnkpIHtcblx0XHQvLyBUaGUgY29uZmlybSBidXR0b24gdGV4dCBpcyBcIlNhdmVcIiBmb3IgdGFibGUgaW4gRGlzcGxheSBtb2RlIGFuZCBcIkFwcGx5XCIgZm9yIHRhYmxlIGluIGVkaXQgbW9kZS4gVGhpcyBjYW4gYmUgbGF0ZXIgZXhwb3NlZCBpZiBuZWVkZWQuXG5cdFx0Y29uc3QgYkRpc3BsYXlNb2RlID0gb1RhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCI7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0a2VlcEV4aXN0aW5nUHJlZml4OiBcIjwgS2VlcFwiLFxuXHRcdFx0bGVhdmVCbGFua1ZhbHVlOiBcIjwgTGVhdmUgQmxhbmsgPlwiLFxuXHRcdFx0Y2xlYXJGaWVsZFZhbHVlOiBcIjwgQ2xlYXIgVmFsdWVzID5cIixcblx0XHRcdG1hc3NFZGl0VGl0bGU6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX1RJVExFXCIsIGlTZWxlY3RlZENvbnRleHRzLnRvU3RyaW5nKCkpLFxuXHRcdFx0YXBwbHlCdXR0b25UZXh0OiBiRGlzcGxheU1vZGVcblx0XHRcdFx0PyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NBVkVfQlVUVE9OX1RFWFRcIilcblx0XHRcdFx0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0FQUExZX0JVVFRPTl9URVhUXCIpLFxuXHRcdFx0dXNlVmFsdWVIZWxwVmFsdWU6IFwiPCBVc2UgVmFsdWUgSGVscCA+XCIsXG5cdFx0XHRjYW5jZWxCdXR0b25UZXh0OiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0NBTkNFTFwiKSxcblx0XHRcdG5vRmllbGRzOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX05PX0VESVRBQkxFX0ZJRUxEU1wiKSxcblx0XHRcdG9rQnV0dG9uVGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIilcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc3VmZml4IHRvIHRoZSAna2VlcCBleGlzdGluZycgcHJvcGVydHkgb2YgdGhlIGNvbWJvQm94LlxuXHQgKlxuXHQgKiBAcGFyYW0gc0lucHV0VHlwZSBJbnB1dFR5cGUgb2YgdGhlIGZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmdcblx0ICovXG5cdC8vIGdldFN1ZmZpeEZvcktlZXBFeGlzaXRpbmc6IGZ1bmN0aW9uIChzSW5wdXRUeXBlOiBzdHJpbmcpIHtcblx0Ly8gXHRsZXQgc1Jlc3VsdCA9IFwiVmFsdWVzXCI7XG5cblx0Ly8gXHRzd2l0Y2ggKHNJbnB1dFR5cGUpIHtcblx0Ly8gXHRcdC8vVE9ETyAtIEFkZCBmb3Igb3RoZXIgY29udHJvbCB0eXBlcyBhcyB3ZWxsIChSYWRpbyBCdXR0b24sIEVtYWlsLCBJbnB1dCwgTURDIEZpZWxkcywgSW1hZ2UgZXRjLilcblx0Ly8gXHRcdGNhc2UgXCJEYXRlUGlja2VyXCI6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIkRhdGVzXCI7XG5cdC8vIFx0XHRcdGJyZWFrO1xuXHQvLyBcdFx0Y2FzZSBcIkNoZWNrQm94XCI6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIlNldHRpbmdzXCI7XG5cdC8vIFx0XHRcdGJyZWFrO1xuXHQvLyBcdFx0ZGVmYXVsdDpcblx0Ly8gXHRcdFx0c1Jlc3VsdCA9IFwiVmFsdWVzXCI7XG5cdC8vIFx0fVxuXHQvLyBcdHJldHVybiBzUmVzdWx0O1xuXHQvLyB9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBtb2RlbCBbS2VlcCBFeGlzdGluZyBWYWx1ZXMsIExlYXZlIEJsYW5rXS5cblx0ICpcblx0ICogQHBhcmFtIGFWYWx1ZXMgQXJyYXkgaW5zdGFuY2Ugd2hlcmUgdGhlIGRlZmF1bHQgZGF0YSBuZWVkcyB0byBiZSBhZGRlZFxuXHQgKiBAcGFyYW0gb0RlZmF1bHRWYWx1ZXMgRGVmYXVsdCB2YWx1ZXMgZnJvbSBBcHBsaWNhdGlvbiBNYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5SW5mbyBQcm9wZXJ0eSBpbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gYlVPTUZpZWxkXG5cdCAqL1xuXHRzZXREZWZhdWx0VmFsdWVzVG9EaWFsb2c6IGZ1bmN0aW9uIChhVmFsdWVzOiBhbnksIG9EZWZhdWx0VmFsdWVzOiBhbnksIG9Qcm9wZXJ0eUluZm86IGFueSwgYlVPTUZpZWxkPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBiVU9NRmllbGQgPyBvUHJvcGVydHlJbmZvLnVuaXRQcm9wZXJ0eSA6IG9Qcm9wZXJ0eUluZm8uZGF0YVByb3BlcnR5LFxuXHRcdFx0c0lucHV0VHlwZSA9IG9Qcm9wZXJ0eUluZm8uaW5wdXRUeXBlLFxuXHRcdFx0YlByb3BlcnR5UmVxdWlyZWQgPSBvUHJvcGVydHlJbmZvLmlzRmllbGRSZXF1aXJlZDtcblx0XHQvLyBjb25zdCBzU3VmZml4Rm9yS2VlcEV4aXN0aW5nID0gTWFzc0VkaXRIZWxwZXIuZ2V0U3VmZml4Rm9yS2VlcEV4aXNpdGluZyhzSW5wdXRUeXBlKTtcblx0XHRjb25zdCBzU3VmZml4Rm9yS2VlcEV4aXN0aW5nID0gXCJWYWx1ZXNcIjtcblx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zID0gYVZhbHVlcy5kZWZhdWx0T3B0aW9ucyB8fCBbXTtcblx0XHRjb25zdCBzZWxlY3RPcHRpb25zRXhpc3QgPSBhVmFsdWVzLnNlbGVjdE9wdGlvbnMgJiYgYVZhbHVlcy5zZWxlY3RPcHRpb25zLmxlbmd0aCA+IDA7XG5cdFx0Y29uc3Qga2VlcEVudHJ5ID0ge1xuXHRcdFx0dGV4dDogYCR7b0RlZmF1bHRWYWx1ZXMua2VlcEV4aXN0aW5nUHJlZml4fSAke3NTdWZmaXhGb3JLZWVwRXhpc3Rpbmd9ID5gLFxuXHRcdFx0a2V5OiBgRGVmYXVsdC8ke3NQcm9wZXJ0eVBhdGh9YFxuXHRcdH07XG5cblx0XHRpZiAoc0lucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRjb25zdCBmYWxzZUVudHJ5ID0geyB0ZXh0OiBcIk5vXCIsIGtleTogYCR7c1Byb3BlcnR5UGF0aH0vZmFsc2VgLCB0ZXh0SW5mbzogeyB2YWx1ZTogZmFsc2UgfSB9O1xuXHRcdFx0Y29uc3QgdHJ1dGh5RW50cnkgPSB7IHRleHQ6IFwiWWVzXCIsIGtleTogYCR7c1Byb3BlcnR5UGF0aH0vdHJ1ZWAsIHRleHRJbmZvOiB7IHZhbHVlOiB0cnVlIH0gfTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdChmYWxzZUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChmYWxzZUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdCh0cnV0aHlFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQodHJ1dGh5RW50cnkpO1xuXHRcdFx0YVZhbHVlcy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eUluZm8/LnByb3BlcnR5SW5mbz8uaGFzVkggfHwgKG9Qcm9wZXJ0eUluZm8/LnVuaXRJbmZvPy5oYXNWSCAmJiBiVU9NRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IHZoZEVudHJ5ID0geyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy51c2VWYWx1ZUhlbHBWYWx1ZSwga2V5OiBgVXNlVmFsdWVIZWxwVmFsdWUvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KHZoZEVudHJ5KTtcblx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KHZoZEVudHJ5KTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3RPcHRpb25zRXhpc3QpIHtcblx0XHRcdFx0aWYgKGJQcm9wZXJ0eVJlcXVpcmVkICE9PSBcInRydWVcIiAmJiAhYlVPTUZpZWxkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2xlYXJFbnRyeSA9IHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMuY2xlYXJGaWVsZFZhbHVlLCBrZXk6IGBDbGVhckZpZWxkVmFsdWUvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoY2xlYXJFbnRyeSk7XG5cdFx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGNsZWFyRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFWYWx1ZXMudW5zaGlmdChrZWVwRW50cnkpO1xuXHRcdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGVtcHR5RW50cnkgPSB7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSwga2V5OiBgRGVmYXVsdC8ke3NQcm9wZXJ0eVBhdGh9YCB9O1xuXHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoZW1wdHlFbnRyeSk7XG5cdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChlbXB0eUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IGFycmFuZ2VtZW50IGluZm8gZm9yIGEgY29udGV4dCBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IFBhdGhcblx0ICogQHBhcmFtIGRlc2NyaXB0aW9uUGF0aCBQYXRoIHRvIHRleHQgYXNzb2NpYXRpb24gb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZSBEaXNwbGF5IG1vZGUgb2YgdGhlIHByb3BlcnR5IGFuZCB0ZXh0IGFzc29jaWF0aW9uXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHQgQ29udGV4dCB0byBmaW5kIHRoZSBmdWxsIHRleHRcblx0ICogQHJldHVybnMgVGhlIHRleHQgYXJyYW5nZW1lbnRcblx0ICovXG5cdGdldFRleHRBcnJhbmdlbWVudEluZm86IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGRlc2NyaXB0aW9uUGF0aDogc3RyaW5nLFxuXHRcdGRpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdFx0c2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0XG5cdCk6IFRleHRBcnJhbmdlbWVudEluZm8ge1xuXHRcdGxldCB2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpLFxuXHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSxcblx0XHRcdGZ1bGxUZXh0O1xuXHRcdGlmIChkZXNjcmlwdGlvblBhdGggJiYgcHJvcGVydHkpIHtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZGVzY3JpcHRpb25QYXRoKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gZGVzY3JpcHRpb25WYWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gdmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSB8fCBcIlwiO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uVmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGRlc2NyaXB0aW9uUGF0aCkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IGRlc2NyaXB0aW9uVmFsdWUgPyBgJHt2YWx1ZX0gKCR7ZGVzY3JpcHRpb25WYWx1ZX0pYCA6IHZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChkZXNjcmlwdGlvblBhdGgpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSBkZXNjcmlwdGlvblZhbHVlID8gYCR7ZGVzY3JpcHRpb25WYWx1ZX0gKCR7dmFsdWV9KWAgOiB2YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuaW5mbyhgRGlzcGxheSBQcm9wZXJ0eSBub3QgYXBwbGljYWJsZTogJHtwcm9wZXJ0eX1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGV4dEFycmFuZ2VtZW50OiBkaXNwbGF5TW9kZSxcblx0XHRcdHZhbHVlUGF0aDogcHJvcGVydHksXG5cdFx0XHRkZXNjcmlwdGlvblBhdGg6IGRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblZhbHVlLFxuXHRcdFx0ZnVsbFRleHQ6IGZ1bGxUZXh0XG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSB2aXNpYmlsaXR5IHZhbHV1ZSBmb3IgdGhlIE1hbmFnZWRPYmplY3QgQW55LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW55IFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRpc0VkaXRhYmxlOiBmdW5jdGlvbiAoYW55OiBBbnlUeXBlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGFueS5nZXRCaW5kaW5nKFwiYW55XCIpO1xuXHRcdGNvbnN0IHZhbHVlID0gKGJpbmRpbmcgYXMgYW55KS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0cmV0dXJuIHZhbHVlID09PSBFZGl0TW9kZS5FZGl0YWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgbWFzcyBlZGl0IGZpZWxkIG9uIGNoYW5nZSBvZiB0aGUgTWFuYWdlZE9iamVjdCBBbnkgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqL1xuXHRvbkNvbnRleHRFZGl0YWJsZUNoYW5nZTogZnVuY3Rpb24gKG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCwgZGF0YVByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBvYmplY3RzRm9yVmlzaWJpbGl0eSA9IG9EaWFsb2dEYXRhTW9kZWwuZ2V0UHJvcGVydHkoYC92YWx1ZXMvJHtkYXRhUHJvcGVydHl9L29iamVjdHNGb3JWaXNpYmlsaXR5YCkgfHwgW107XG5cdFx0Y29uc3QgZWRpdGFibGUgPSBvYmplY3RzRm9yVmlzaWJpbGl0eS5zb21lKE1hc3NFZGl0SGVscGVyLmlzRWRpdGFibGUpO1xuXG5cdFx0aWYgKGVkaXRhYmxlKSB7XG5cdFx0XHRvRGlhbG9nRGF0YU1vZGVsLnNldFByb3BlcnR5KGAvdmFsdWVzLyR7ZGF0YVByb3BlcnR5fS92aXNpYmxlYCwgZWRpdGFibGUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIE1hbmFnZWQgT2JqZWN0IEFueSBmb3IgdmlzaWJpbGl0eSBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICpcblx0ICogQHBhcmFtIG1PVG9Vc2UgVGhlIE1hbmFnZWRPYmplY3QgQW55IHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHZhbHVlIG9mIHRoZSBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0RpYWxvZ0RhdGFNb2RlbCBNb2RlbCB0byBiZSB1c2VkIHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBkYXRhUHJvcGVydHkgRmllbGQgbmFtZS5cblx0ICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0dXBkYXRlT25Db250ZXh0Q2hhbmdlOiBmdW5jdGlvbiAobU9Ub1VzZTogQW55VHlwZSwgb0RpYWxvZ0RhdGFNb2RlbDogSlNPTk1vZGVsLCBkYXRhUHJvcGVydHk6IHN0cmluZywgdmFsdWVzOiBhbnkpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gbU9Ub1VzZS5nZXRCaW5kaW5nKFwiYW55XCIpO1xuXG5cdFx0dmFsdWVzLm9iamVjdHNGb3JWaXNpYmlsaXR5ID0gdmFsdWVzLm9iamVjdHNGb3JWaXNpYmlsaXR5IHx8IFtdO1xuXHRcdHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eS5wdXNoKG1PVG9Vc2UpO1xuXG5cdFx0YmluZGluZz8uYXR0YWNoQ2hhbmdlKE1hc3NFZGl0SGVscGVyLm9uQ29udGV4dEVkaXRhYmxlQ2hhbmdlLmJpbmQobnVsbCwgb0RpYWxvZ0RhdGFNb2RlbCwgZGF0YVByb3BlcnR5KSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBib3VuZCBvYmplY3QgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmlsaXR5IG9mIGNvbnRleHRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBCaW5kaW5nIFN0cmluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdGhlIGJpbmRpbmcgdmFsdWUuXG5cdCAqIEByZXR1cm5zIFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICovXG5cdGdldEJvdW5kT2JqZWN0OiBmdW5jdGlvbiAoZXhwQmluZGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGNvbnRleHQ6IENvbnRleHQpOiBBbnlUeXBlIHtcblx0XHRjb25zdCBtT1RvVXNlID0gbmV3IEFueSh7IGFueTogZXhwQmluZGluZyB9KTtcblx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRtT1RvVXNlLnNldE1vZGVsKG1vZGVsKTtcblx0XHRtT1RvVXNlLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXG5cdFx0cmV0dXJuIG1PVG9Vc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIEJpbmRpbmcgU3RyaW5nIG9iamVjdC5cblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0aGUgYmluZGluZyB2YWx1ZS5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRnZXRGaWVsZFZpc2libGl0eTogZnVuY3Rpb24gKFxuXHRcdGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRkYXRhUHJvcGVydHk6IHN0cmluZyxcblx0XHR2YWx1ZXM6IGFueSxcblx0XHRjb250ZXh0OiBDb250ZXh0XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1PVG9Vc2UgPSBNYXNzRWRpdEhlbHBlci5nZXRCb3VuZE9iamVjdChleHBCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRjb25zdCBpc0NvbnRleHRFZGl0YWJsZSA9IE1hc3NFZGl0SGVscGVyLmlzRWRpdGFibGUobU9Ub1VzZSk7XG5cblx0XHRpZiAoIWlzQ29udGV4dEVkaXRhYmxlKSB7XG5cdFx0XHRNYXNzRWRpdEhlbHBlci51cGRhdGVPbkNvbnRleHRDaGFuZ2UobU9Ub1VzZSwgb0RpYWxvZ0RhdGFNb2RlbCwgZGF0YVByb3BlcnR5LCB2YWx1ZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb250ZXh0RWRpdGFibGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGEgcnVudGltZSBtb2RlbDpcblx0ICogPT4gVGhlIG1vZGVsIGNvbnNpc3RzIG9mIHZhbHVlcyBzaG93biBpbiB0aGUgY29tYm9Cb3ggb2YgdGhlIGRpYWxvZyAoTGVhdmUgQmxhbmssIEtlZXAgRXhpc3RpbmcgVmFsdWVzLCBvciBhbnkgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCBjb250ZXh0LCBldGMuKVxuXHQgKiA9PiBUaGUgbW9kZWwgd2lsbCBjYXB0dXJlIHJ1bnRpbWUgY2hhbmdlcyBpbiB0aGUgcmVzdWx0cyBwcm9wZXJ0eSAodGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGNvbWJvQm94KS5cblx0ICpcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBhRGF0YUFycmF5IEFycmF5IGNvbnRhaW5pbmcgZGF0YSByZWxhdGVkIHRvIHRoZSBkaWFsb2cgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEBwYXJhbSBvRGVmYXVsdFZhbHVlcyBEZWZhdWx0IHZhbHVlcyBmcm9tIGkxOG5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRleHQgVHJhbnNpZW50IGNvbnRleHQgZm9yIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBydW50aW1lIG1vZGVsXG5cdCAqL1xuXHRzZXRSdW50aW1lTW9kZWxPbkRpYWxvZzogZnVuY3Rpb24gKGFDb250ZXh0czogYW55W10sIGFEYXRhQXJyYXk6IGFueVtdLCBvRGVmYXVsdFZhbHVlczogYW55LCBkaWFsb2dDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3QgYVZhbHVlczogYW55W10gPSBbXTtcblx0XHRjb25zdCBhVW5pdERhdGE6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVJlc3VsdHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgdGV4dFBhdGhzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IGFSZWFkT25seUZpZWxkSW5mbzogYW55W10gPSBbXTtcblxuXHRcdGNvbnN0IG9EYXRhID0ge1xuXHRcdFx0dmFsdWVzOiBhVmFsdWVzLFxuXHRcdFx0dW5pdERhdGE6IGFVbml0RGF0YSxcblx0XHRcdHJlc3VsdHM6IGFSZXN1bHRzLFxuXHRcdFx0cmVhZGFibGVQcm9wZXJ0eURhdGE6IGFSZWFkT25seUZpZWxkSW5mbyxcblx0XHRcdHNlbGVjdGVkS2V5OiB1bmRlZmluZWQsXG5cdFx0XHR0ZXh0UGF0aHM6IHRleHRQYXRocyxcblx0XHRcdG5vRmllbGRzOiBvRGVmYXVsdFZhbHVlcy5ub0ZpZWxkc1xuXHRcdH07XG5cdFx0Y29uc3Qgb0RpYWxvZ0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwob0RhdGEpO1xuXHRcdGFEYXRhQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAob0luRGF0YTogYW55KSB7XG5cdFx0XHRsZXQgb1RleHRJbmZvO1xuXHRcdFx0bGV0IHNQcm9wZXJ0eUtleTtcblx0XHRcdGxldCBzVW5pdFByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IG9EaXN0aW5jdFZhbHVlTWFwOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IG9EaXN0aW5jdFVuaXRNYXA6IGFueSA9IHt9O1xuXHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIG9JbkRhdGEuZGF0YVByb3BlcnR5LmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdFx0Y29uc3QgYUZpbmFsUGF0aCA9IE1hc3NFZGl0SGVscGVyLmluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aChvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgYVZhbHVlcyAvKiwgZGlhbG9nQ29udGV4dCAqLyk7XG5cdFx0XHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzID0gb0luRGF0YS5kYXRhUHJvcGVydHkuc3BsaXQoXCIvXCIpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhWYWx1ZSA9IGNvbnRleHQuZ2V0T2JqZWN0KG9JbkRhdGEuZGF0YVByb3BlcnR5KTtcblx0XHRcdFx0XHRzUHJvcGVydHlLZXkgPSBgJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX0vJHtzTXVsdGlMZXZlbFBhdGhWYWx1ZX1gO1xuXHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSAmJiBhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXSkge1xuXHRcdFx0XHRcdFx0b1RleHRJbmZvID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyhcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRpc3BsYXksXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dGV4dDogKG9UZXh0SW5mbyAmJiBvVGV4dEluZm8uZnVsbFRleHQpIHx8IHNNdWx0aUxldmVsUGF0aFZhbHVlLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHNQcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0dGV4dEluZm86IG9UZXh0SW5mb1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldID0gc011bHRpTGV2ZWxQYXRoVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RWYWx1ZU1hcCkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFx0ZGlhbG9nQ29udGV4dC5zZXRQcm9wZXJ0eShvRGF0YS5kYXRhUHJvcGVydHksIHNQcm9wZXJ0eUtleSAmJiBvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldKTtcblx0XHRcdFx0Ly8gfVxuXG5cdFx0XHRcdGFGaW5hbFBhdGhbYVByb3BlcnR5UGF0aHNbYVByb3BlcnR5UGF0aHMubGVuZ3RoIC0gMV1dLnRleHRJbmZvID0ge1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogb0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0dmFsdWVQYXRoOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRkaXNwbGF5TW9kZTogb0luRGF0YS5kaXNwbGF5XG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldIHx8IFtdO1xuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gfHwgW107XG5cdFx0XHRcdGlmIChvSW5EYXRhLnVuaXRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gPSBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldIHx8IFtdO1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdID0gYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gfHwgW107XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdGNvbnN0IG9EYXRhT2JqZWN0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRzUHJvcGVydHlLZXkgPSBgJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX0vJHtvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV19YDtcblx0XHRcdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkgJiYgb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldICYmICFvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdFx0XHRpZiAob0luRGF0YS5pbnB1dFR5cGUgIT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50cnkgPSB7XG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogKG9UZXh0SW5mbyAmJiBvVGV4dEluZm8uZnVsbFRleHQpIHx8IG9EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XSxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IHNQcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0SW5mbzogb1RleHRJbmZvXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnB1c2goZW50cnkpO1xuXHRcdFx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0ucHVzaChlbnRyeSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldID0gb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkgJiYgb0RhdGFPYmplY3Rbb0luRGF0YS51bml0UHJvcGVydHldKSB7XG5cdFx0XHRcdFx0XHRzVW5pdFByb3BlcnR5TmFtZSA9IGAke29JbkRhdGEudW5pdFByb3BlcnR5fS8ke29EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XX1gO1xuXHRcdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0luRGF0YS5pbnB1dFR5cGUgIT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RleHRJbmZvID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyhcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEudW5pdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRpc3BsYXksXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB1bml0RW50cnkgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiAob1RleHRJbmZvICYmIG9UZXh0SW5mby5mdWxsVGV4dCkgfHwgb0RhdGFPYmplY3Rbb0luRGF0YS51bml0UHJvcGVydHldLFxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5OiBzVW5pdFByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdHRleHRJbmZvOiBvVGV4dEluZm9cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ucHVzaCh1bml0RW50cnkpO1xuXHRcdFx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdLnB1c2godW5pdEVudHJ5KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSA9IG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0udGV4dEluZm8gPSB7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHR2YWx1ZVBhdGg6IG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBvSW5EYXRhLmRpc3BsYXlcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9EaXN0aW5jdFZhbHVlTWFwKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZXh0LnNldFByb3BlcnR5KG9JbkRhdGEuZGF0YVByb3BlcnR5LCBzUHJvcGVydHlLZXkgJiYgb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9EaXN0aW5jdFVuaXRNYXApLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRleHQuc2V0UHJvcGVydHkob0luRGF0YS51bml0UHJvcGVydHksIHNVbml0UHJvcGVydHlOYW1lICYmIG9EaXN0aW5jdFVuaXRNYXBbc1VuaXRQcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGV4dFBhdGhzW29JbkRhdGEuZGF0YVByb3BlcnR5XSA9IG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoID8gW29JbkRhdGEuZGVzY3JpcHRpb25QYXRoXSA6IFtdO1xuXHRcdH0pO1xuXHRcdGFEYXRhQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAob0luRGF0YTogYW55KSB7XG5cdFx0XHRsZXQgdmFsdWVzOiBhbnkgPSB7fTtcblx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdGNvbnN0IHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSA9IE1hc3NFZGl0SGVscGVyLmdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGgob0luRGF0YS5kYXRhUHJvcGVydHksIGFWYWx1ZXMpO1xuXHRcdFx0XHRpZiAoIXNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSkge1xuXHRcdFx0XHRcdHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZS5wdXNoKHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLCBrZXk6IGBFbXB0eS8ke29JbkRhdGEuZGF0YVByb3BlcnR5fWAgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhbHVlcyA9IHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0pIHtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLCBvRGVmYXVsdFZhbHVlcywgb0luRGF0YSk7XG5cdFx0XHRcdHZhbHVlcyA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSAmJiBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmxlbmd0aCkge1xuXHRcdFx0XHRNYXNzRWRpdEhlbHBlci5zZXREZWZhdWx0VmFsdWVzVG9EaWFsb2coYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEsIHRydWUpO1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnRleHRJbmZvID0ge307XG5cdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uc2VsZWN0ZWRLZXkgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KFxuXHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmlucHV0VHlwZSA9IG9JbkRhdGEuaW5wdXRUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldICYmICFhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5sZW5ndGgpIHx8XG5cdFx0XHRcdChvSW5EYXRhLnVuaXRQcm9wZXJ0eSAmJiBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldICYmICFhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmxlbmd0aClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBiQ2xlYXJGaWVsZE9yQmxhbmtWYWx1ZUV4aXN0cyA9XG5cdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gJiZcblx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5zb21lKGZ1bmN0aW9uIChvYmo6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai50ZXh0ID09PSBcIjwgQ2xlYXIgVmFsdWVzID5cIiB8fCBvYmoudGV4dCA9PT0gXCI8IExlYXZlIEJsYW5rID5cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmICFiQ2xlYXJGaWVsZE9yQmxhbmtWYWx1ZUV4aXN0cykge1xuXHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnB1c2goeyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYEVtcHR5LyR7b0luRGF0YS5kYXRhUHJvcGVydHl9YCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMgPVxuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gJiZcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnNvbWUoZnVuY3Rpb24gKG9iajogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLnRleHQgPT09IFwiPCBDbGVhciBWYWx1ZXMgPlwiIHx8IG9iai50ZXh0ID09PSBcIjwgTGVhdmUgQmxhbmsgPlwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRpZiAoIWJDbGVhckZpZWxkT3JCbGFua1VuaXRWYWx1ZUV4aXN0cykge1xuXHRcdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGBFbXB0eS8ke29JbkRhdGEudW5pdFByb3BlcnR5fWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnRleHRJbmZvID0ge307XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5zZWxlY3RlZEtleSA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5ICYmIHR5cGVvZiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0YVJlYWRPbmx5RmllbGRJbmZvLnB1c2goeyBwcm9wZXJ0eTogb0luRGF0YS5kYXRhUHJvcGVydHksIHZhbHVlOiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSwgdHlwZTogXCJEZWZhdWx0XCIgfSk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSAmJlxuXHRcdFx0XHRvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kcyAmJlxuXHRcdFx0XHRvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXSAmJlxuXHRcdFx0XHRvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXS5vcGVyYW5kMSAmJlxuXHRcdFx0XHRvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXS5vcGVyYW5kMlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoaXMgbmVlZHMgdG8gYmUgcmVmYWN0b3JlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFJlYWRPbmx5RXhwcmVzc2lvbiBjaGFuZ2Vcblx0XHRcdFx0YVJlYWRPbmx5RmllbGRJbmZvLnB1c2goe1xuXHRcdFx0XHRcdHByb3BlcnR5OiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQxLnBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDIudmFsdWUsXG5cdFx0XHRcdFx0dHlwZTogXCJQYXRoXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldHRpbmcgdmlzYmlsaXR5IG9mIHRoZSBtYXNzIGVkaXQgZmllbGQuXG5cdFx0XHRpZiAob0luRGF0YS5lZGl0TW9kZSkge1xuXHRcdFx0XHR2YWx1ZXMudmlzaWJsZSA9XG5cdFx0XHRcdFx0b0luRGF0YS5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRWRpdGFibGUgfHxcblx0XHRcdFx0XHRhQ29udGV4dHMuc29tZShcblx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLmdldEZpZWxkVmlzaWJsaXR5LmJpbmQoXG5cdFx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmVkaXRNb2RlLFxuXHRcdFx0XHRcdFx0XHRvRGlhbG9nRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlcy52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHZhbHVlcy5zZWxlY3RlZEtleSA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBvSW5EYXRhLmRhdGFQcm9wZXJ0eSk7XG5cdFx0XHR2YWx1ZXMuaW5wdXRUeXBlID0gb0luRGF0YS5pbnB1dFR5cGU7XG5cdFx0XHR2YWx1ZXMudW5pdFByb3BlcnR5ID0gb0luRGF0YS51bml0UHJvcGVydHk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb0RpYWxvZ0RhdGFNb2RlbDtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdHJhbnNpZW50IGNvbnRleHQgZm9yIGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIFRhYmxlLlxuXHQgKiBAcGFyYW0gZGlhbG9nIE1hc3MgRWRpdCBEaWFsb2cuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGdldERpYWxvZ0NvbnRleHQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGRpYWxvZz86IERpYWxvZyk6IENvbnRleHQge1xuXHRcdGxldCB0cmFuc0N0eDogQ29udGV4dCA9IChkaWFsb2cgJiYgZGlhbG9nLmdldEJpbmRpbmdDb250ZXh0KCkpIGFzIENvbnRleHQ7XG5cblx0XHRpZiAoIXRyYW5zQ3R4KSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBsaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdFx0fSkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRcdCh0cmFuc2llbnRMaXN0QmluZGluZyBhcyBhbnkpLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0LyogKi9cblx0XHRcdH07XG5cdFx0XHR0cmFuc0N0eCA9IHRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRyYW5zQ3R4O1xuXHR9LFxuXG5cdG9uRGlhbG9nT3BlbjogZnVuY3Rpb24gKGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBmaWVsZHNJbmZvTW9kZWwgPSBzb3VyY2UuZ2V0TW9kZWwoXCJmaWVsZHNJbmZvXCIpO1xuXHRcdGZpZWxkc0luZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9pc09wZW5cIiwgdHJ1ZSk7XG5cdH0sXG5cblx0Y2xvc2VEaWFsb2c6IGZ1bmN0aW9uIChvRGlhbG9nOiBhbnkpIHtcblx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdH0sXG5cblx0bWVzc2FnZUhhbmRsaW5nRm9yTWFzc0VkaXQ6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRvVGFibGU6IFRhYmxlLFxuXHRcdGFDb250ZXh0czogYW55LFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHRvSW5EaWFsb2c6IGFueSxcblx0XHRhUmVzdWx0czogYW55LFxuXHRcdGVycm9yQ29udGV4dHM6IGFueVxuXHQpIHtcblx0XHRjb25zdCBEcmFmdFN0YXR1cyA9IEZFTGlicmFyeS5EcmFmdFN0YXR1cztcblx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcImdldEJvdW5kTWVzc2FnZXNGb3JNYXNzRWRpdFwiLCB0cnVlKTtcblx0XHRvQ29udHJvbGxlci5tZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZXMoe1xuXHRcdFx0b25CZWZvcmVTaG93TWVzc2FnZTogZnVuY3Rpb24gKG1lc3NhZ2VzOiBhbnksIHNob3dNZXNzYWdlUGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRcdC8vbWVzc2FnZXMuY29uY2F0ZW5hdGUobWVzc2FnZUhhbmRsaW5nLmdldE1lc3NhZ2VzKHRydWUsIHRydWUpKTtcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLmZuR2V0TWVzc2FnZVN1YnRpdGxlID0gbWVzc2FnZUhhbmRsaW5nLnNldE1lc3NhZ2VTdWJ0aXRsZS5iaW5kKHt9LCBvVGFibGUsIGFDb250ZXh0cyk7XG5cdFx0XHRcdGNvbnN0IHVuYm91bmRFcnJvcnM6IGFueVtdID0gW107XG5cdFx0XHRcdG1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdGlmICghbWVzc2FnZS5nZXRUYXJnZXQoKSkge1xuXHRcdFx0XHRcdFx0dW5ib3VuZEVycm9ycy5wdXNoKG1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCA+IDAgJiYgZXJyb3JDb250ZXh0cy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0Y29uc3Qgc3VjY2Vzc1RvYXN0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpO1xuXHRcdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KHN1Y2Nlc3NUb2FzdCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZXJyb3JDb250ZXh0cy5sZW5ndGggPCAob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvckNvbnRleHRzLmxlbmd0aCA9PT0gKG9UYWJsZSBhcyBhbnkpLmdldFNlbGVjdGVkQ29udGV4dHMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob0NvbnRyb2xsZXIuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmIHVuYm91bmRFcnJvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlQm94ID0gZmFsc2U7XG5cdFx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzLnNob3dNZXNzYWdlRGlhbG9nID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNob3dNZXNzYWdlUGFyYW1ldGVycztcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAob0luRGlhbG9nLmlzT3BlbigpKSB7XG5cdFx0XHRNYXNzRWRpdEhlbHBlci5jbG9zZURpYWxvZyhvSW5EaWFsb2cpO1xuXHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgZmFsc2UpO1xuXHRcdH1cblx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJnZXRCb3VuZE1lc3NhZ2VzRm9yTWFzc0VkaXRcIiwgZmFsc2UpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGdlbmVyYXRlcyBzaWRlIGVmZmVjdHMgbWFwIGZyb20gc2lkZSBlZmZlY3RzIGlkcyh3aGljaCBpcyBhIGNvbWJpbmF0aW9uIG9mIGVudGl0eSB0eXBlIGFuZCBxdWFsaWZpZXIpLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0VudGl0eVNldENvbnRleHRcblx0ICogQHBhcmFtIGFwcENvbXBvbmVudFxuXHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0ICogQHBhcmFtIGFSZXN1bHRzXG5cdCAqIEByZXR1cm5zIFNpZGUgZWZmZWN0IG1hcCB3aXRoIGRhdGEuXG5cdCAqL1xuXHRnZXRTaWRlRWZmZWN0RGF0YUZvcktleTogZnVuY3Rpb24gKG9FbnRpdHlTZXRDb250ZXh0OiBhbnksIGFwcENvbXBvbmVudDogYW55LCBvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIGFSZXN1bHRzOiBhbnkpIHtcblx0XHRjb25zdCBzT3duZXJFbnRpdHlUeXBlID0gb0VudGl0eVNldENvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblx0XHRjb25zdCBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheTogYW55ID0ge307XG5cblx0XHRhUmVzdWx0cy5mb3JFYWNoKChyZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc1BhdGggPSByZXN1bHQua2V5VmFsdWU7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0U2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBJZHMgPSBzaWRlRWZmZWN0U2VydmljZS5jb21wdXRlRmllbGRHcm91cElkcyhzT3duZXJFbnRpdHlUeXBlLCByZXN1bHQucHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUgPz8gXCJcIikgPz8gW107XG5cdFx0XHRiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtzUGF0aF0gPSBvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwcyhmaWVsZEdyb3VwSWRzKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYmFzZVNpZGVFZmZlY3RzTWFwQXJyYXk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdpdmUgdGhlIGVudGl0eSB0eXBlIGZvciBhIGdpdmVuIHNwYXRoIGZvciBlLmcuUmVxdWVzdGVkUXVhbnRpdHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aFxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxcblx0ICogQHJldHVybnMgT2JqZWN0IGhhdmluZyBlbnRpdHksIHNwYXRoIGFuZCBuYXZpZ2F0aW9uIHBhdGguXG5cdCAqL1xuXHRmbkdldFBhdGhGb3JTb3VyY2VQcm9wZXJ0eTogZnVuY3Rpb24gKHNQYXRoOiBhbnksIHNFbnRpdHlUeXBlOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRcdC8vIGlmIHRoZSBwcm9wZXJ0eSBwYXRoIGhhcyBhIG5hdmlnYXRpb24sIGdldCB0aGUgdGFyZ2V0IGVudGl0eSB0eXBlIG9mIHRoZSBuYXZpZ2F0aW9uXG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID1cblx0XHRcdFx0c1BhdGguaW5kZXhPZihcIi9cIikgPiAwID8gXCIvXCIgKyBzRW50aXR5VHlwZSArIFwiL1wiICsgc1BhdGguc3Vic3RyKDAsIHNQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpICsgXCJAc2FwdWkubmFtZVwiIDogZmFsc2UsXG5cdFx0XHRwT3duZXJFbnRpdHkgPSAhc05hdmlnYXRpb25QYXRoID8gUHJvbWlzZS5yZXNvbHZlKHNFbnRpdHlUeXBlKSA6IG9NZXRhTW9kZWwucmVxdWVzdE9iamVjdChzTmF2aWdhdGlvblBhdGgpO1xuXHRcdHNQYXRoID0gc05hdmlnYXRpb25QYXRoID8gc1BhdGguc3Vic3RyKHNQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogc1BhdGg7XG5cdFx0cmV0dXJuIHsgc1BhdGgsIHBPd25lckVudGl0eSwgc05hdmlnYXRpb25QYXRoIH07XG5cdH0sXG5cblx0Zm5HZXRFbnRpdHlUeXBlT2ZPd25lcjogZnVuY3Rpb24gKG9NZXRhTW9kZWw6IGFueSwgYmFzZU5hdlBhdGg6IHN0cmluZywgb0VudGl0eVNldENvbnRleHQ6IGFueSwgdGFyZ2V0RW50aXR5OiBzdHJpbmcsIGFUYXJnZXRzOiBhbnkpIHtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IHsgJFR5cGU6IHBPd25lciwgJFBhcnRuZXI6IG93bmVyTmF2UGF0aCB9ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b0VudGl0eVNldENvbnRleHR9LyR7YmFzZU5hdlBhdGh9YCk7IC8vIG5hdiBwYXRoXG5cdFx0aWYgKG93bmVyTmF2UGF0aCkge1xuXHRcdFx0Y29uc3QgZW50aXR5T2JqT2ZPd25lclBhcnRuZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7cE93bmVyfS8ke293bmVyTmF2UGF0aH1gKTtcblx0XHRcdGlmIChlbnRpdHlPYmpPZk93bmVyUGFydG5lcikge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlT2ZPd25lclBhcnRuZXIgPSBlbnRpdHlPYmpPZk93bmVyUGFydG5lcltcIiRUeXBlXCJdO1xuXHRcdFx0XHQvLyBpZiB0aGUgZW50aXR5IHR5cGVzIGRlZmVyLCB0aGVuIGJhc2UgbmF2IHBhdGggaXMgbm90IGZyb20gb3duZXJcblx0XHRcdFx0aWYgKGVudGl0eVR5cGVPZk93bmVyUGFydG5lciAhPT0gb3duZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGFyZ2V0IFByb3AgaXMgbm90IGZyb20gb3duZXIsIHdlIGFkZCBpdCBhcyBpbW1lZGlhdGVcblx0XHRcdFx0XHRhVGFyZ2V0cy5wdXNoKHRhcmdldEVudGl0eSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gJFBhcnRuZXIgYXR0cmlidXRlLCBpdCBtYXkgbm90IGJlIGZyb20gb3duZXJcblx0XHRcdGFUYXJnZXRzLnB1c2godGFyZ2V0RW50aXR5KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFUYXJnZXRzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHaXZlIHRhcmdldHMgdGhhdCBhcmUgaW1tZWRpYXRlIG9yIGRlZmVycmVkIGJhc2VkIG9uIHRoZSBlbnRpdHkgdHlwZSBvZiB0aGF0IHRhcmdldC5cblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzRGF0YVxuXHQgKiBAcGFyYW0gb0VudGl0eVNldENvbnRleHRcblx0ICogQHBhcmFtIHNFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIFRhcmdldHMgdG8gcmVxdWVzdCBzaWRlIGVmZmVjdHMuXG5cdCAqL1xuXHRmbkdldFRhcmdldHNGb3JNYXNzRWRpdDogZnVuY3Rpb24gKHNpZGVFZmZlY3RzRGF0YTogT0RhdGFTaWRlRWZmZWN0c1R5cGUsIG9FbnRpdHlTZXRDb250ZXh0OiBhbnksIHNFbnRpdHlUeXBlOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRcdGNvbnN0IHsgdGFyZ2V0UHJvcGVydGllczogYVRhcmdldFByb3BlcnRpZXMsIHRhcmdldEVudGl0aWVzOiBhVGFyZ2V0RW50aXRpZXMgfSA9IHNpZGVFZmZlY3RzRGF0YTtcblx0XHRjb25zdCBhUHJvbWlzZXM6IGFueSA9IFtdO1xuXHRcdGxldCBhVGFyZ2V0czogYW55ID0gW107XG5cdFx0Y29uc3Qgb3duZXJFbnRpdHlUeXBlID0gb0VudGl0eVNldENvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblxuXHRcdGlmIChzRW50aXR5VHlwZSA9PT0gb3duZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHQvLyBpZiBTYWxlc09yZHIgSXRlbVxuXHRcdFx0YVRhcmdldEVudGl0aWVzPy5mb3JFYWNoKCh0YXJnZXRFbnRpdHk6IGFueSkgPT4ge1xuXHRcdFx0XHR0YXJnZXRFbnRpdHkgPSB0YXJnZXRFbnRpdHlbXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0bGV0IGJhc2VOYXZQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdGlmICh0YXJnZXRFbnRpdHkuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0YmFzZU5hdlBhdGggPSB0YXJnZXRFbnRpdHkuc3BsaXQoXCIvXCIpWzBdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJhc2VOYXZQYXRoID0gdGFyZ2V0RW50aXR5O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFUYXJnZXRzID0gTWFzc0VkaXRIZWxwZXIuZm5HZXRFbnRpdHlUeXBlT2ZPd25lcihvTWV0YU1vZGVsLCBiYXNlTmF2UGF0aCwgb0VudGl0eVNldENvbnRleHQsIHRhcmdldEVudGl0eSwgYVRhcmdldHMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGFUYXJnZXRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0YVRhcmdldFByb3BlcnRpZXMuZm9yRWFjaCgodGFyZ2V0UHJvcDogYW55KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHsgcE93bmVyRW50aXR5IH0gPSBNYXNzRWRpdEhlbHBlci5mbkdldFBhdGhGb3JTb3VyY2VQcm9wZXJ0eSh0YXJnZXRQcm9wLCBzRW50aXR5VHlwZSwgb01ldGFNb2RlbCk7XG5cdFx0XHRcdGFQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdHBPd25lckVudGl0eS50aGVuKChyZXN1bHRFbnRpdHk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gaWYgZW50aXR5IGlzIFNhbGVzT3JkZXJJdGVtLCBUYXJnZXQgUHJvcGVydHkgaXMgZnJvbSBJdGVtcyB0YWJsZVxuXHRcdFx0XHRcdFx0aWYgKHJlc3VsdEVudGl0eSA9PT0gb3duZXJFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdGFUYXJnZXRzLnB1c2godGFyZ2V0UHJvcCk7IC8vIGdldCBpbW1lZGlhdGUgdGFyZ2V0c1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0YXJnZXRQcm9wLmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBiYXNlTmF2UGF0aCA9IHRhcmdldFByb3Auc3BsaXQoXCIvXCIpWzBdO1xuXHRcdFx0XHRcdFx0XHRhVGFyZ2V0cyA9IE1hc3NFZGl0SGVscGVyLmZuR2V0RW50aXR5VHlwZU9mT3duZXIoXG5cdFx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRiYXNlTmF2UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRQcm9wLFxuXHRcdFx0XHRcdFx0XHRcdGFUYXJnZXRzXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFUYXJnZXRzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQcm9taXNlcy5wdXNoKFByb21pc2UucmVzb2x2ZShhVGFyZ2V0cykpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBpbiB0aGUgZ2l2ZW4gc2lkZSBFZmZlY3RzIE9iaiwgaWYgX0l0ZW0gaXMgc2V0IGFzIFRhcmdldCBFbnRpdHkgZm9yIGFueSBzaWRlIEVmZmVjdHMgb25cblx0ICogb3RoZXIgZW50aXR5IHNldC5cblx0ICpcblx0ICogQHBhcmFtIHNpZGVFZmZlY3RzTWFwXG5cdCAqIEBwYXJhbSBvRW50aXR5U2V0Q29udGV4dFxuXHQgKiBAcmV0dXJucyBMZW5ndGggb2Ygc2lkZUVmZmVjdHNBcnJheSB3aGVyZSBjdXJyZW50IEVudGl0eSBpcyBzZXQgYXMgVGFyZ2V0IEVudGl0eVxuXHQgKi9cblx0Y2hlY2tJZkVudGl0eUV4aXN0c0FzVGFyZ2V0RW50aXR5OiAoXG5cdFx0c2lkZUVmZmVjdHNNYXA6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB8IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnksXG5cdFx0b0VudGl0eVNldENvbnRleHQ6IENvbnRleHRcblx0KSA9PiB7XG5cdFx0Y29uc3Qgb3duZXJFbnRpdHlUeXBlID0gb0VudGl0eVNldENvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblx0XHRjb25zdCBzaWRlRWZmZWN0c09uT3RoZXJFbnRpdHk6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSBPYmplY3QudmFsdWVzKHNpZGVFZmZlY3RzTWFwKS5maWx0ZXIoXG5cdFx0XHQob2JqOiBNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gb2JqLm5hbWUuaW5kZXhPZihvd25lckVudGl0eVR5cGUpID09IC0xO1xuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gb0VudGl0eVNldENvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKS5wb3AoKTtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQgPSBzaWRlRWZmZWN0c09uT3RoZXJFbnRpdHkuZmlsdGVyKChvYmo6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKSA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRFbnRpdGllc0FycmF5OiBTaWRlRWZmZWN0c0VudGl0eVR5cGVbXSB8IHVuZGVmaW5lZCA9IG9iai5zaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcztcblx0XHRcdHJldHVybiB0YXJnZXRFbnRpdGllc0FycmF5Py5maWx0ZXIoKGlubmVyT2JqOiBTaWRlRWZmZWN0c0VudGl0eVR5cGUpID0+IGlubmVyT2JqW1wiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIl0gPT09IGVudGl0eVNldE5hbWUpXG5cdFx0XHRcdC5sZW5ndGhcblx0XHRcdFx0PyBvYmpcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gc2lkZUVmZmVjdHNXaXRoQ3VycmVudEVudGl0eUFzVGFyZ2V0Lmxlbmd0aDtcblx0fSxcblxuXHQvKipcblx0ICogVXBvbiB1cGRhdGluZyB0aGUgZmllbGQsIGFycmF5IG9mIGltbWVkaWF0ZSBhbmQgZGVmZXJyZWQgc2lkZSBlZmZlY3RzIGZvciB0aGF0IGZpZWxkIGFyZSBjcmVhdGVkLlxuXHQgKiBJZiB0aGVyZSBhcmUgYW55IGZhaWxlZCBzaWRlIGVmZmVjdHMgZm9yIHRoYXQgY29udGV4dCwgdGhleSB3aWxsIGFsc28gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbWFwLlxuXHQgKiBJZiB0aGUgZmllbGQgaGFzIHRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIGFkZCBpdCB0byByZXF1ZXN0IHNpZGUgZWZmZWN0cy5cblx0ICpcblx0ICogQHBhcmFtIG1QYXJhbXNcblx0ICogQHBhcmFtIG1QYXJhbXMub0NvbnRyb2xsZXIgQ29udHJvbGxlclxuXHQgKiBAcGFyYW0gbVBhcmFtcy5vRmllbGRQcm9taXNlIFByb21pc2UgdG8gdXBkYXRlIGZpZWxkXG5cdCAqIEBwYXJhbSBtUGFyYW1zLnNpZGVFZmZlY3RNYXAgU2lkZUVmZmVjdHNNYXAgZm9yIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gbVBhcmFtcy50ZXh0UGF0aHMgVGV4dFBhdGhzIG9mIHRoZSBmaWVsZCBpZiBhbnlcblx0ICogQHBhcmFtIG1QYXJhbXMuZ3JvdXBJZCBHcm91cCBJZCB0byB1c2VkIHRvIGdyb3VwIHJlcXVlc3RzXG5cdCAqIEBwYXJhbSBtUGFyYW1zLmtleSBLZXlWYWx1ZSBvZiB0aGUgZmllbGRcblx0ICogQHBhcmFtIG1QYXJhbXMub0VudGl0eVNldENvbnRleHQgRW50aXR5U2V0Y29udGV4dFxuXHQgKiBAcGFyYW0gbVBhcmFtcy5vTWV0YU1vZGVsIE1ldGFtb2RlbCBkYXRhXG5cdCAqIEBwYXJhbSBtUGFyYW1zLnNlbGVjdGVkQ29udGV4dCBTZWxlY3RlZCByb3cgY29udGV4dFxuXHQgKiBAcGFyYW0gbVBhcmFtcy5kZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSBEZWZlcnJlZCB0YXJnZXRzIGRhdGFcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYWxsIGltbWVkaWF0ZWx5IHJlcXVlc3RlZCBzaWRlIGVmZmVjdHMuXG5cdCAqL1xuXHRoYW5kbGVNYXNzRWRpdEZpZWxkVXBkYXRlQW5kUmVxdWVzdFNpZGVFZmZlY3RzOiBhc3luYyBmdW5jdGlvbiAobVBhcmFtczogRGF0YVRvVXBkYXRlRmllbGRBbmRTaWRlRWZmZWN0c1R5cGUpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdG9GaWVsZFByb21pc2UsXG5cdFx0XHRzaWRlRWZmZWN0c01hcCxcblx0XHRcdHRleHRQYXRocyxcblx0XHRcdGdyb3VwSWQsXG5cdFx0XHRrZXksXG5cdFx0XHRvRW50aXR5U2V0Q29udGV4dCxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVcblx0XHR9ID0gbVBhcmFtcztcblx0XHRjb25zdCBpbW1lZGlhdGVTaWRlRWZmZWN0c1Byb21pc2VzID0gW29GaWVsZFByb21pc2VdO1xuXHRcdGNvbnN0IG93bmVyRW50aXR5VHlwZSA9IG9FbnRpdHlTZXRDb250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvQ29udHJvbGxlci5nZXRWaWV3KCkpO1xuXHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0Y29uc3QgaXNTaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQgPSBNYXNzRWRpdEhlbHBlci5jaGVja0lmRW50aXR5RXhpc3RzQXNUYXJnZXRFbnRpdHkoc2lkZUVmZmVjdHNNYXAsIG9FbnRpdHlTZXRDb250ZXh0KTtcblxuXHRcdGlmIChzaWRlRWZmZWN0c01hcCkge1xuXHRcdFx0Y29uc3QgYWxsRW50aXR5VHlwZXNXaXRoUXVhbGlmaWVyID0gT2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXApO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNEYXRhRm9yRmllbGQ6IGFueSA9IE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNNYXApO1xuXG5cdFx0XHRjb25zdCBtVmlzaXRlZFNpZGVFZmZlY3RzOiBhbnkgPSB7fTtcblx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lW2tleV0gPSB7fTtcblx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBkYXRhXSBvZiBzaWRlRWZmZWN0c0RhdGFGb3JGaWVsZC5lbnRyaWVzKCkpIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5VHlwZVdpdGhRdWFsaWZpZXIgPSBhbGxFbnRpdHlUeXBlc1dpdGhRdWFsaWZpZXJbaW5kZXhdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZSA9IGVudGl0eVR5cGVXaXRoUXVhbGlmaWVyLnNwbGl0KFwiI1wiKVswXTtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHQ6IGFueSA9IG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob1NlbGVjdGVkQ29udGV4dCwgc0VudGl0eVR5cGUpO1xuXHRcdFx0XHRkYXRhLmNvbnRleHQgPSBvQ29udGV4dDtcblxuXHRcdFx0XHRjb25zdCBhbGxGYWlsZWRTaWRlRWZmZWN0cyA9IG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5nZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMoKTtcblx0XHRcdFx0Y29uc3QgYUZhaWxlZFNpZGVFZmZlY3RzID0gYWxsRmFpbGVkU2lkZUVmZmVjdHNbb0NvbnRleHQuZ2V0UGF0aCgpXTtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLnVucmVnaXN0ZXJGYWlsZWRTaWRlRWZmZWN0c0ZvckFDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0bGV0IHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQgPSBbZGF0YS5zaWRlRWZmZWN0c107XG5cdFx0XHRcdHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQgPVxuXHRcdFx0XHRcdGFGYWlsZWRTaWRlRWZmZWN0cyAmJiBhRmFpbGVkU2lkZUVmZmVjdHMubGVuZ3RoXG5cdFx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQuY29uY2F0KGFGYWlsZWRTaWRlRWZmZWN0cylcblx0XHRcdFx0XHRcdDogc2lkZUVmZmVjdHNGb3JDdXJyZW50Q29udGV4dDtcblx0XHRcdFx0bVZpc2l0ZWRTaWRlRWZmZWN0c1tvQ29udGV4dF0gPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBhU2lkZUVmZmVjdCBvZiBzaWRlRWZmZWN0c0ZvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdFx0aWYgKCFtVmlzaXRlZFNpZGVFZmZlY3RzW29Db250ZXh0XS5oYXNPd25Qcm9wZXJ0eShhU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRtVmlzaXRlZFNpZGVFZmZlY3RzW29Db250ZXh0XVthU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWVdID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGxldCBhSW1tZWRpYXRlVGFyZ2V0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRcdFx0YWxsVGFyZ2V0czogYW55W10gPSBbXSxcblx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbk5hbWU6IFN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0Y29uc3QgZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucyA9IGFzeW5jIGZ1bmN0aW9uIChtU2lkZUVmZmVjdDogT0RhdGFTaWRlRWZmZWN0c1R5cGUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyB0YXJnZXRQcm9wZXJ0aWVzOiBhVGFyZ2V0UHJvcGVydGllcywgdGFyZ2V0RW50aXRpZXM6IGFUYXJnZXRFbnRpdGllcyB9ID0gbVNpZGVFZmZlY3Q7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RFbnRpdHlUeXBlID0gbVNpZGVFZmZlY3QuZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiQFwiKVswXTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0c0FycmF5Rm9yQWxsUHJvcGVydGllcyA9IGF3YWl0IE1hc3NFZGl0SGVscGVyLmZuR2V0VGFyZ2V0c0Zvck1hc3NFZGl0KFxuXHRcdFx0XHRcdFx0XHRcdG1TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdG9NZXRhTW9kZWxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0YUltbWVkaWF0ZVRhcmdldHMgPSB0YXJnZXRzQXJyYXlGb3JBbGxQcm9wZXJ0aWVzWzBdO1xuXHRcdFx0XHRcdFx0XHRhbGxUYXJnZXRzID0gKGFUYXJnZXRQcm9wZXJ0aWVzIHx8IFtdKS5jb25jYXQoKGFUYXJnZXRFbnRpdGllcyBhcyBhbnlbXSkgfHwgW10pO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG1TaWRlRWZmZWN0LnRyaWdnZXJBY3Rpb247XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEZWZlcnJlZFRhcmdldHMgPSBhbGxUYXJnZXRzLmZpbHRlcigodGFyZ2V0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIWFJbW1lZGlhdGVUYXJnZXRzLmluY2x1ZGVzKHRhcmdldCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lW2tleV1bbVNpZGVFZmZlY3QuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHtcblx0XHRcdFx0XHRcdFx0XHRhVGFyZ2V0czogYURlZmVycmVkVGFyZ2V0cyxcblx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dDogb0NvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0bVNpZGVFZmZlY3Rcblx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBpZiBlbnRpdHkgaXMgb3RoZXIgdGhhbiBpdGVtcyB0YWJsZSB0aGVuIGFjdGlvbiBpcyBkZWZlcmVkXG5cdFx0XHRcdFx0XHRcdGlmIChhY3Rpb25OYW1lICYmIHNpZGVFZmZlY3RFbnRpdHlUeXBlID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBzdGF0aWMgYWN0aW9uIGlzIG9uIGNvbGxlY3Rpb24sIHNvIHdlIGRlZmVyIGl0LCBlbHNlIGFkZCB0byBpbW1lZGlhdGUgcmVxdWVzdHMgYXJyYXlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1N0YXRpY0FjdGlvbiA9IFRhYmxlSGVscGVyLl9pc1N0YXRpY0FjdGlvbihvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7YWN0aW9uTmFtZX1gKSwgYWN0aW9uTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFpc1N0YXRpY0FjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHJpZ2dlckFjdGlvbk5hbWUgPSBhY3Rpb25OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZVtrZXldW21TaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJUcmlnZ2VyQWN0aW9uXCJdID0gYWN0aW9uTmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVba2V5XVttU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWVdW1wiVHJpZ2dlckFjdGlvblwiXSA9IGFjdGlvbk5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZiAoaXNTaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRhSW1tZWRpYXRlVGFyZ2V0cyA9IFtdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0YVRhcmdldHM6IGFJbW1lZGlhdGVUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRcdFRyaWdnZXJBY3Rpb246IHRyaWdnZXJBY3Rpb25OYW1lXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKGFTaWRlRWZmZWN0LCBvQ29udGV4dCwgZ3JvdXBJZCwgZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucylcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0ZXh0UGF0aHM/LltrZXldICYmIHRleHRQYXRoc1trZXldLmxlbmd0aCkge1xuXHRcdFx0aW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHRleHRQYXRoc1trZXldLCBvU2VsZWN0ZWRDb250ZXh0LCBncm91cElkKSk7XG5cdFx0fVxuXHRcdHJldHVybiAoUHJvbWlzZSBhcyBhbnkpLmFsbFNldHRsZWQoaW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiBUYWJsZVxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIG9Db250cm9sbGVyIENvbnRyb2xsZXIgZm9yIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGNyZWF0ZURpYWxvZzogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogYW55W10sIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvbWFzc0VkaXQvTWFzc0VkaXREaWFsb2dcIixcblx0XHRcdGFEYXRhQXJyYXk6IGFueVtdID0gW10sXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdFx0b0RlZmF1bHRWYWx1ZXMgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0VGV4dHNGb3JEaWFsb2cob1Jlc291cmNlQnVuZGxlLCBhQ29udGV4dHMubGVuZ3RoLCBvVGFibGUpLFxuXHRcdFx0b0RhdGFGaWVsZE1vZGVsID0gTWFzc0VkaXRIZWxwZXIucHJlcGFyZURhdGFGb3JEaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGFEYXRhQXJyYXkpLFxuXHRcdFx0ZGlhbG9nQ29udGV4dCA9IE1hc3NFZGl0SGVscGVyLmdldERpYWxvZ0NvbnRleHQob1RhYmxlKSxcblx0XHRcdG9EaWFsb2dEYXRhTW9kZWwgPSBNYXNzRWRpdEhlbHBlci5zZXRSdW50aW1lTW9kZWxPbkRpYWxvZyhhQ29udGV4dHMsIGFEYXRhQXJyYXksIG9EZWZhdWx0VmFsdWVzLCBkaWFsb2dDb250ZXh0KSxcblx0XHRcdG1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCksXG5cdFx0XHRtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCxcblx0XHRcdGl0ZW1zTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbChvRGF0YUZpZWxkTW9kZWwuZ2V0RGF0YSgpLCBtZXRhTW9kZWwpO1xuXG5cdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cblx0XHRjb25zdCBvQ3JlYXRlZEZyYWdtZW50ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoXG5cdFx0XHRcdG9GcmFnbWVudCxcblx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdGRhdGFGaWVsZE1vZGVsOiBpdGVtc01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSxcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YU1vZGVsLmdldE1ldGFQYXRoKGRpYWxvZ0NvbnRleHQuZ2V0UGF0aCgpKSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkTW9kZWw6IGl0ZW1zTW9kZWwsXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG1ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBtZXRhTW9kZWxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdClcblx0XHQpO1xuXHRcdGNvbnN0IG9EaWFsb2dDb250ZW50ID0gYXdhaXQgRnJhZ21lbnQubG9hZCh7IGRlZmluaXRpb246IG9DcmVhdGVkRnJhZ21lbnQgfSk7XG5cdFx0Y29uc3Qgb0RpYWxvZyA9IG5ldyBEaWFsb2coe1xuXHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0dGl0bGU6IG9EZWZhdWx0VmFsdWVzLm1hc3NFZGl0VGl0bGUsXG5cdFx0XHRjb250ZW50OiBbb0RpYWxvZ0NvbnRlbnQgYXMgYW55XSxcblx0XHRcdGFmdGVyT3BlbjogTWFzc0VkaXRIZWxwZXIub25EaWFsb2dPcGVuLFxuXHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dChvRGVmYXVsdFZhbHVlcywgb0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIikpLFxuXHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0cHJlc3M6IGFzeW5jIGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sbGVyLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0Y29uc3Qgb0luRGlhbG9nID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9JbkRpYWxvZy5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0XHRcdFx0Y29uc3QgYVJlc3VsdHMgPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVzdWx0c1wiKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGFibGUgJiYgKG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0XHRcdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpLFxuXHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQoc0N1cnJlbnRFbnRpdHlTZXROYW1lKTtcblx0XHRcdFx0XHRjb25zdCBlcnJvckNvbnRleHRzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IHRleHRQYXRocyA9IG9Nb2RlbC5nZXRQcm9wZXJ0eShcIi90ZXh0UGF0aHNcIik7XG5cdFx0XHRcdFx0Y29uc3QgYVByb3BlcnR5UmVhZGFibGVJbmZvID0gb01vZGVsLmdldFByb3BlcnR5KFwiL3JlYWRhYmxlUHJvcGVydHlEYXRhXCIpO1xuXHRcdFx0XHRcdGxldCBncm91cElkOiBzdHJpbmc7XG5cdFx0XHRcdFx0bGV0IGFsbFNpZGVFZmZlY3RzOiBhbnlbXTtcblx0XHRcdFx0XHRjb25zdCBtYXNzRWRpdFByb21pc2VzOiBhbnkgPSBbXTtcblx0XHRcdFx0XHRjb25zdCBmYWlsZWRGaWVsZHNEYXRhOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBzZWxlY3RlZFJvd3NMZW5ndGggPSBhQ29udGV4dHMubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheSA9IE1hc3NFZGl0SGVscGVyLmdldFNpZGVFZmZlY3REYXRhRm9yS2V5KFxuXHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRcdGFSZXN1bHRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHQvL2NvbnN0IGNoYW5nZVByb21pc2U6IGFueVtdID0gW107XG5cdFx0XHRcdFx0Ly9sZXQgYlJlYWRPbmx5RmllbGQgPSBmYWxzZTtcblx0XHRcdFx0XHQvL2NvbnN0IGVycm9yQ29udGV4dHM6IG9iamVjdFtdID0gW107XG5cblx0XHRcdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGVkQ29udGV4dDogYW55LCBpZHg6IG51bWJlcikge1xuXHRcdFx0XHRcdFx0YWxsU2lkZUVmZmVjdHMgPSBbXTtcblx0XHRcdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goYXN5bmMgZnVuY3Rpb24gKG9SZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIWZhaWxlZEZpZWxkc0RhdGEuaGFzT3duUHJvcGVydHkob1Jlc3VsdC5rZXlWYWx1ZSkpIHtcblx0XHRcdFx0XHRcdFx0XHRmYWlsZWRGaWVsZHNEYXRhW29SZXN1bHQua2V5VmFsdWVdID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvL1RPRE8gLSBBZGQgc2F2ZSBpbXBsZW1lbnRhdGlvbiBmb3IgVmFsdWUgSGVscC5cblx0XHRcdFx0XHRcdFx0aWYgKGJhc2VTaWRlRWZmZWN0c01hcEFycmF5W29SZXN1bHQua2V5VmFsdWVdKSB7XG5cdFx0XHRcdFx0XHRcdFx0YWxsU2lkZUVmZmVjdHNbb1Jlc3VsdC5rZXlWYWx1ZV0gPSBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtvUmVzdWx0LmtleVZhbHVlXTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhUHJvcGVydHlSZWFkYWJsZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRhUHJvcGVydHlSZWFkYWJsZUluZm8uc29tZShmdW5jdGlvbiAob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jlc3VsdC5rZXlWYWx1ZSA9PT0gb1Byb3BlcnR5SW5mby5wcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnZhbHVlID09PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8udHlwZSA9PT0gXCJQYXRoXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qob1Byb3BlcnR5SW5mby5wcm9wZXJ0eVBhdGgpID09PSBvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRncm91cElkID0gYCRhdXRvLiR7aWR4fWA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9GaWVsZFByb21pc2UgPSBvU2VsZWN0ZWRDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0LnNldFByb3BlcnR5KG9SZXN1bHQua2V5VmFsdWUsIG9SZXN1bHQudmFsdWUsIGdyb3VwSWQpXG5cdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDb250ZXh0cy5wdXNoKG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB1cGRhdGluZyBlbnRyaWVzLlwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmFpbGVkRmllbGRzRGF0YVtvUmVzdWx0LmtleVZhbHVlXSA9IGZhaWxlZEZpZWxkc0RhdGFbb1Jlc3VsdC5rZXlWYWx1ZV0gKyAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHsgaXNGaWVsZFVwZGF0ZUZhaWxlZDogdHJ1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBkYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzOiBEYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzVHlwZSA9IHtcblx0XHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRcdFx0XHRvRmllbGRQcm9taXNlLFxuXHRcdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzTWFwOiBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheVtvUmVzdWx0LmtleVZhbHVlXSxcblx0XHRcdFx0XHRcdFx0XHR0ZXh0UGF0aHMsXG5cdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0XHRrZXk6IG9SZXN1bHQua2V5VmFsdWUsXG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdG1hc3NFZGl0UHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5oYW5kbGVNYXNzRWRpdEZpZWxkVXBkYXRlQW5kUmVxdWVzdFNpZGVFZmZlY3RzKGRhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHMpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGF3YWl0IChQcm9taXNlIGFzIGFueSlcblx0XHRcdFx0XHRcdC5hbGxTZXR0bGVkKG1hc3NFZGl0UHJvbWlzZXMpXG5cdFx0XHRcdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGdyb3VwSWQgPSBgJGF1dG8ubWFzc0VkaXREZWZlcnJlZGA7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRlZmVycmVkUmVxdWVzdHMgPSBbXTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNEYXRhRm9yQWxsS2V5czogYW55ID0gT2JqZWN0LnZhbHVlcyhkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGtleXNXaXRoU2lkZUVmZmVjdHM6IGFueVtdID0gT2JqZWN0LmtleXMoZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWUpO1xuXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzRGF0YUZvckFsbEtleXMuZm9yRWFjaCgoYVNpZGVFZmZlY3Q6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRLZXkgPSBrZXlzV2l0aFNpZGVFZmZlY3RzW2luZGV4XTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmFpbGVkRmllbGRzRGF0YVtjdXJyZW50S2V5XSAhPT0gc2VsZWN0ZWRSb3dzTGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBkZWZlcnJlZFNpZGVFZmZlY3RzRGF0YSA9IE9iamVjdC52YWx1ZXMoYVNpZGVFZmZlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRTaWRlRWZmZWN0c0RhdGEuZm9yRWFjaCgocmVxOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgeyBhVGFyZ2V0cywgb0NvbnRleHQsIFRyaWdnZXJBY3Rpb24sIG1TaWRlRWZmZWN0IH0gPSByZXE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZuR2V0RGVmZXJyZWRUYXJnZXRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhVGFyZ2V0cztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm5HZXREZWZlcnJlZFRhcmdldHNBbmRBY3Rpb25zID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhVGFyZ2V0czogZm5HZXREZWZlcnJlZFRhcmdldHMoKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFRyaWdnZXJBY3Rpb246IFRyaWdnZXJBY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkUmVxdWVzdHMucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBpZiBzb21lIGRlZmVycmVkIGlzIHJlamVjdGVkLCBpdCB3aWxsIGJlIGFkZCB0byBmYWlsZWQgcXVldWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bVNpZGVFZmZlY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmbkdldERlZmVycmVkVGFyZ2V0c0FuZEFjdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIubWVzc2FnZUhhbmRsaW5nRm9yTWFzc0VkaXQob1RhYmxlLCBhQ29udGV4dHMsIG9Db250cm9sbGVyLCBvSW5EaWFsb2csIGFSZXN1bHRzLCBlcnJvckNvbnRleHRzKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5jbG9zZURpYWxvZyhvRGlhbG9nKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogb0RlZmF1bHRWYWx1ZXMuY2FuY2VsQnV0dG9uVGV4dCxcblx0XHRcdFx0dmlzaWJsZTogTWFzc0VkaXRIZWxwZXIuaGVscGVycy5oYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmcob0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIiksIHRydWUpIGFzIGFueSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG9JbkRpYWxvZyA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5jbG9zZURpYWxvZyhvSW5EaWFsb2cpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0pO1xuXHRcdG9EaWFsb2cuc2V0TW9kZWwob0RpYWxvZ0RhdGFNb2RlbCwgXCJmaWVsZHNJbmZvXCIpO1xuXHRcdG9EaWFsb2cuc2V0TW9kZWwobW9kZWwpO1xuXHRcdG9EaWFsb2cuc2V0QmluZGluZ0NvbnRleHQoZGlhbG9nQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9EaWFsb2c7XG5cdH0sXG5cblx0aGVscGVyczoge1xuXHRcdGdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkczogKGZpZWxkczogYW55LCBlZGl0YWJsZTogYm9vbGVhbikgPT4ge1xuXHRcdFx0Y29uc3QgdG90YWxFeHAgPSBmaWVsZHMucmVkdWNlKFxuXHRcdFx0XHQoZXhwcmVzc2lvbjogYW55LCBmaWVsZDogYW55KSA9PlxuXHRcdFx0XHRcdG9yKFxuXHRcdFx0XHRcdFx0ZXhwcmVzc2lvbixcblx0XHRcdFx0XHRcdHBhdGhJbk1vZGVsKFwiL3ZhbHVlcy9cIiArIGZpZWxkLmRhdGFQcm9wZXJ0eSArIFwiL3Zpc2libGVcIiwgXCJmaWVsZHNJbmZvXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdGNvbnN0YW50KGZhbHNlKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBlZGl0YWJsZSA/IHRvdGFsRXhwIDogbm90KHRvdGFsRXhwKTtcblx0XHR9LFxuXG5cdFx0Z2V0RXhwQmluZGluZ0ZvckFwcGx5QnV0dG9uVHh0OiAoZGVmYXVsdFZhbHVlczogYW55LCBmaWVsZHM6IGJvb2xlYW4pID0+IHtcblx0XHRcdGNvbnN0IGVkaXRhYmxlRXhwID0gTWFzc0VkaXRIZWxwZXIuaGVscGVycy5nZXRCaW5kaW5nRXhwRm9ySGFzRWRpdGFibGVGaWVsZHMoZmllbGRzLCB0cnVlKTtcblx0XHRcdGNvbnN0IHRvdGFsRXhwID0gaWZFbHNlKGVkaXRhYmxlRXhwLCBjb25zdGFudChkZWZhdWx0VmFsdWVzLmFwcGx5QnV0dG9uVGV4dCksIGNvbnN0YW50KGRlZmF1bHRWYWx1ZXMub2tCdXR0b25UZXh0KSk7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odG90YWxFeHApO1xuXHRcdH0sXG5cblx0XHRoYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmc6IChmaWVsZHM6IGFueSwgZWRpdGFibGU6IGJvb2xlYW4pID0+IHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIGVkaXRhYmxlKSk7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNYXNzRWRpdEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkVBLE1BQU1BLGNBQWMsR0FBRztJQUN0QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLDJCQUEyQixFQUFFLFVBQVVDLEtBQWEsRUFBRUMsT0FBWSxFQUEyQjtNQUM1RixJQUFJQyxVQUFlO01BQ25CLElBQUlDLEtBQUssR0FBRyxDQUFDO01BQ2IsTUFBTUMsTUFBTSxHQUFHSixLQUFLLENBQUNLLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFDL0IsSUFBSUMsU0FBUyxHQUFHLEVBQUU7TUFDbEJGLE1BQU0sQ0FBQ0csT0FBTyxDQUFDLFVBQVVDLGFBQXFCLEVBQUU7UUFDL0MsSUFBSSxDQUFDUCxPQUFPLENBQUNPLGFBQWEsQ0FBQyxJQUFJTCxLQUFLLEtBQUssQ0FBQyxFQUFFO1VBQzNDRixPQUFPLENBQUNPLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUMzQk4sVUFBVSxHQUFHRCxPQUFPLENBQUNPLGFBQWEsQ0FBQztVQUNuQ0YsU0FBUyxHQUFHQSxTQUFTLEdBQUdFLGFBQWE7VUFDckNMLEtBQUssRUFBRTtRQUNSLENBQUMsTUFBTSxJQUFJLENBQUNELFVBQVUsQ0FBQ00sYUFBYSxDQUFDLEVBQUU7VUFDdENGLFNBQVMsR0FBSSxHQUFFQSxTQUFVLElBQUdFLGFBQWMsRUFBQztVQUMzQyxJQUFJRixTQUFTLEtB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
1242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNYXNzRWRpdEhlbHBlciIsImluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aCIsInNQYXRoIiwiYVZhbHVlcyIsImFGaW5hbFBhdGgiLCJpbmRleCIsImFQYXRocyIsInNwbGl0Iiwic0Z1bGxQYXRoIiwiZm9yRWFjaCIsInNQcm9wZXJ0eVBhdGgiLCJnZXRVbmlxdWVWYWx1ZXMiLCJzVmFsdWUiLCJzZWxmIiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsImdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGgiLCJzRGF0YVByb3BlcnR5UGF0aCIsIm9WYWx1ZXMiLCJyZXN1bHQiLCJhUHJvcGVydHlQYXRocyIsImdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3giLCJhQ29udGV4dHMiLCJsZW5ndGgiLCJvU2VsZWN0ZWRDb250ZXh0IiwiYVByb3BlcnR5VmFsdWVzIiwib0NvbnRleHQiLCJvRGF0YU9iamVjdCIsImdldE9iamVjdCIsInNNdWx0aUxldmVsUGF0aENvbmRpdGlvbiIsImhhc093blByb3BlcnR5IiwicHVzaCIsImFVbmlxdWVQcm9wZXJ0eVZhbHVlcyIsImZpbHRlciIsImdldEhpZGRlblZhbHVlRm9yQ29udGV4dHMiLCJoaWRkZW5WYWx1ZSIsIiRQYXRoIiwic29tZSIsImdldElucHV0VHlwZSIsInByb3BlcnR5SW5mbyIsImRhdGFGaWVsZENvbnZlcnRlZCIsIm9EYXRhTW9kZWxQYXRoIiwiZWRpdFN0eWxlUHJvcGVydGllcyIsImlucHV0VHlwZSIsInNldEVkaXRTdHlsZVByb3BlcnRpZXMiLCJlZGl0U3R5bGUiLCJpc1ZhbGlkRm9yTWFzc0VkaXQiLCJpc011bHRpVmFsdWVGaWVsZCIsImhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyIsImdldElzRmllbGRHcnAiLCIkVHlwZSIsIlRhcmdldCIsInZhbHVlIiwiZ2V0VGV4dFBhdGgiLCJwcm9wZXJ0eSIsInRleHRCaW5kaW5nIiwiZGlzcGxheU1vZGUiLCJkZXNjcmlwdGlvblBhdGgiLCJwYXRoIiwicGFyYW1ldGVycyIsInByb3BzIiwicHJlcGFyZURhdGFGb3JEaWFsb2ciLCJvVGFibGUiLCJhRGF0YUFycmF5Iiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiZGF0YSIsImFUYWJsZUZpZWxkcyIsImdldFRhYmxlRmllbGRzIiwib0VudGl0eVR5cGVDb250ZXh0IiwiZ2V0Q29udGV4dCIsIm9FbnRpdHlTZXRDb250ZXh0Iiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJvRGF0YUZpZWxkTW9kZWwiLCJKU09OTW9kZWwiLCJvUmVzdWx0Iiwic0xhYmVsVGV4dCIsImJWYWx1ZUhlbHBFbmFibGVkIiwic1VuaXRQcm9wZXJ0eVBhdGgiLCJiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQiLCJvVGV4dEJpbmRpbmciLCJvQ29sdW1uSW5mbyIsImFubm90YXRpb25QYXRoIiwiZGF0YVByb3BlcnR5Iiwib1Byb3BlcnR5SW5mbyIsImxhYmVsIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJvUHJvcGVydHkiLCJuYW1lIiwiZ2V0VGV4dEJpbmRpbmciLCJvRmllbGRDb250ZXh0Iiwib0RhdGFGaWVsZENvbnZlcnRlZCIsImNvbnZlcnRNZXRhTW9kZWxDb250ZXh0Iiwib1Byb3BlcnR5Q29udGV4dCIsIm9JbnRlcmZhY2UiLCJnZXRJbnRlcmZhY2UiLCJWYWx1ZSIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiYkhpZGRlbkZpZWxkIiwiaXNJbWFnZSIsImNvbnRleHQiLCJnZXRQYXRoIiwiaXNQcm9wZXJ0eSIsIiR0YXJnZXQiLCJjaGFydFByb3BlcnR5IiwidGVybSIsImlzQWN0aW9uIiwiQWN0aW9uIiwiaXNGaWVsZEdycCIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwidW5pdFByb3BlcnR5SW5mbyIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJoYXNWYWx1ZUhlbHAiLCJoYXNDb250ZXh0RGVwZW5kZW50VkgiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyIsInByb3BlcnR5Rm9yRmllbGRDb250cm9sIiwiZXhwQmluZGluZyIsImdldEVkaXRNb2RlIiwiY29uc3RhbnQiLCJlZGl0TW9kZVZhbHVlcyIsIk9iamVjdCIsImtleXMiLCJFZGl0TW9kZSIsImVkaXRNb2RlSXNTdGF0aWMiLCJpbmNsdWRlcyIsImVkaXRhYmxlIiwiRWRpdGFibGUiLCJuYXZQcm9wZXJ0eVdpdGhWYWx1ZUhlbHAiLCJyZWxhdGl2ZVBhdGgiLCJnZXRSZWxhdGl2ZVBhdGhzIiwiaXNSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJpc1ZhbHVlSGVscEVuYWJsZWQiLCJpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0IiwidW5pdFByb3BlcnR5IiwiaXNGaWVsZFJlcXVpcmVkIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwiZGVmYXVsdFNlbGVjdGlvblBhdGgiLCJkZWZhdWx0U2VsZWN0aW9uVW5pdFBhdGgiLCJlbnRpdHlTZXQiLCJkaXNwbGF5IiwibnVsbGFibGUiLCJpc1Byb3BlcnR5UmVhZE9ubHkiLCJlZGl0TW9kZSIsImhhc1ZIIiwicnVudGltZVBhdGgiLCJwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInByb3BlcnR5UGF0aEZvclZhbHVlSGVscCIsInVuaXRJbmZvIiwic2V0RGF0YSIsImFDb2x1bW5zIiwiZ2V0Q29sdW1ucyIsImNvbHVtbnNEYXRhIiwiZ2V0UGFyZW50IiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiY29sdW1ucyIsIm1hcCIsIm9Db2x1bW4iLCJzRGF0YVByb3BlcnR5IiwiZ2V0RGF0YVByb3BlcnR5IiwiYVJlYWx0ZWRDb2x1bW5JbmZvIiwidHlwZSIsImdldEhlYWRlciIsImdldERlZmF1bHRUZXh0c0ZvckRpYWxvZyIsIm9SZXNvdXJjZUJ1bmRsZSIsImlTZWxlY3RlZENvbnRleHRzIiwiYkRpc3BsYXlNb2RlIiwia2VlcEV4aXN0aW5nUHJlZml4IiwibGVhdmVCbGFua1ZhbHVlIiwiY2xlYXJGaWVsZFZhbHVlIiwibWFzc0VkaXRUaXRsZSIsImdldFRleHQiLCJ0b1N0cmluZyIsImFwcGx5QnV0dG9uVGV4dCIsInVzZVZhbHVlSGVscFZhbHVlIiwiY2FuY2VsQnV0dG9uVGV4dCIsIm5vRmllbGRzIiwib2tCdXR0b25UZXh0Iiwic2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nIiwib0RlZmF1bHRWYWx1ZXMiLCJiVU9NRmllbGQiLCJzSW5wdXRUeXBlIiwiYlByb3BlcnR5UmVxdWlyZWQiLCJzU3VmZml4Rm9yS2VlcEV4aXN0aW5nIiwiZGVmYXVsdE9wdGlvbnMiLCJzZWxlY3RPcHRpb25zRXhpc3QiLCJzZWxlY3RPcHRpb25zIiwia2VlcEVudHJ5IiwidGV4dCIsImtleSIsImZhbHNlRW50cnkiLCJ0ZXh0SW5mbyIsInRydXRoeUVudHJ5IiwidW5zaGlmdCIsInZoZEVudHJ5IiwiY2xlYXJFbnRyeSIsImVtcHR5RW50cnkiLCJnZXRUZXh0QXJyYW5nZW1lbnRJbmZvIiwic2VsZWN0ZWRDb250ZXh0IiwiZGVzY3JpcHRpb25WYWx1ZSIsImZ1bGxUZXh0IiwiTG9nIiwiaW5mbyIsInRleHRBcnJhbmdlbWVudCIsInZhbHVlUGF0aCIsImRlc2NyaXB0aW9uIiwiaXNFZGl0YWJsZSIsImFueSIsImJpbmRpbmciLCJnZXRCaW5kaW5nIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsIm9uQ29udGV4dEVkaXRhYmxlQ2hhbmdlIiwib0RpYWxvZ0RhdGFNb2RlbCIsIm9iamVjdHNGb3JWaXNpYmlsaXR5IiwiZ2V0UHJvcGVydHkiLCJzZXRQcm9wZXJ0eSIsInVwZGF0ZU9uQ29udGV4dENoYW5nZSIsIm1PVG9Vc2UiLCJ2YWx1ZXMiLCJhdHRhY2hDaGFuZ2UiLCJiaW5kIiwiZ2V0Qm91bmRPYmplY3QiLCJBbnkiLCJtb2RlbCIsInNldE1vZGVsIiwic2V0QmluZGluZ0NvbnRleHQiLCJnZXRGaWVsZFZpc2libGl0eSIsImlzQ29udGV4dEVkaXRhYmxlIiwic2V0UnVudGltZU1vZGVsT25EaWFsb2ciLCJkaWFsb2dDb250ZXh0IiwiYVVuaXREYXRhIiwiYVJlc3VsdHMiLCJ0ZXh0UGF0aHMiLCJhUmVhZE9ubHlGaWVsZEluZm8iLCJvRGF0YSIsInVuaXREYXRhIiwicmVzdWx0cyIsInJlYWRhYmxlUHJvcGVydHlEYXRhIiwic2VsZWN0ZWRLZXkiLCJvSW5EYXRhIiwib1RleHRJbmZvIiwic1Byb3BlcnR5S2V5Iiwic1VuaXRQcm9wZXJ0eU5hbWUiLCJvRGlzdGluY3RWYWx1ZU1hcCIsIm9EaXN0aW5jdFVuaXRNYXAiLCJzTXVsdGlMZXZlbFBhdGhWYWx1ZSIsImVudHJ5IiwidW5pdEVudHJ5Iiwic011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlIiwiYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMiLCJvYmoiLCJiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMiLCJvcGVyYW5kcyIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwidmlzaWJsZSIsImdldERpYWxvZ0NvbnRleHQiLCJ0YWJsZSIsImRpYWxvZyIsInRyYW5zQ3R4IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJsaXN0QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0cmFuc2llbnRMaXN0QmluZGluZyIsImJpbmRMaXN0IiwiJCR1cGRhdGVHcm91cElkIiwicmVmcmVzaEludGVybmFsIiwiY3JlYXRlIiwib25EaWFsb2dPcGVuIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJmaWVsZHNJbmZvTW9kZWwiLCJjbG9zZURpYWxvZyIsIm9EaWFsb2ciLCJjbG9zZSIsImRlc3Ryb3kiLCJtZXNzYWdlSGFuZGxpbmdGb3JNYXNzRWRpdCIsIm9Db250cm9sbGVyIiwib0luRGlhbG9nIiwiZXJyb3JDb250ZXh0cyIsIkRyYWZ0U3RhdHVzIiwiRkVMaWJyYXJ5IiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImdldFZpZXciLCJtZXNzYWdlSGFuZGxlciIsInNob3dNZXNzYWdlcyIsIm9uQmVmb3JlU2hvd01lc3NhZ2UiLCJtZXNzYWdlcyIsInNob3dNZXNzYWdlUGFyYW1ldGVycyIsImZuR2V0TWVzc2FnZVN1YnRpdGxlIiwibWVzc2FnZUhhbmRsaW5nIiwic2V0TWVzc2FnZVN1YnRpdGxlIiwidW5ib3VuZEVycm9ycyIsIm1lc3NhZ2UiLCJnZXRUYXJnZXQiLCJlZGl0RmxvdyIsInNldERyYWZ0U3RhdHVzIiwiU2F2ZWQiLCJzdWNjZXNzVG9hc3QiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkNsZWFyIiwic2hvd01lc3NhZ2VCb3giLCJzaG93TWVzc2FnZURpYWxvZyIsImlzT3BlbiIsImdldFNpZGVFZmZlY3REYXRhRm9yS2V5IiwiYXBwQ29tcG9uZW50Iiwic093bmVyRW50aXR5VHlwZSIsImJhc2VTaWRlRWZmZWN0c01hcEFycmF5Iiwia2V5VmFsdWUiLCJzaWRlRWZmZWN0U2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImZpZWxkR3JvdXBJZHMiLCJjb21wdXRlRmllbGRHcm91cElkcyIsIl9zaWRlRWZmZWN0cyIsImdldFNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cHMiLCJmbkdldFBhdGhGb3JTb3VyY2VQcm9wZXJ0eSIsInNFbnRpdHlUeXBlIiwic05hdmlnYXRpb25QYXRoIiwic3Vic3RyIiwibGFzdEluZGV4T2YiLCJwT3duZXJFbnRpdHkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlcXVlc3RPYmplY3QiLCJmbkdldEVudGl0eVR5cGVPZk93bmVyIiwiYmFzZU5hdlBhdGgiLCJ0YXJnZXRFbnRpdHkiLCJhVGFyZ2V0cyIsIm93bmVyRW50aXR5VHlwZSIsInBPd25lciIsIiRQYXJ0bmVyIiwib3duZXJOYXZQYXRoIiwiZW50aXR5T2JqT2ZPd25lclBhcnRuZXIiLCJlbnRpdHlUeXBlT2ZPd25lclBhcnRuZXIiLCJmbkdldFRhcmdldHNGb3JNYXNzRWRpdCIsInNpZGVFZmZlY3RzRGF0YSIsInRhcmdldFByb3BlcnRpZXMiLCJhVGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwiYVRhcmdldEVudGl0aWVzIiwiYVByb21pc2VzIiwidGFyZ2V0UHJvcCIsInRoZW4iLCJyZXN1bHRFbnRpdHkiLCJhbGwiLCJjaGVja0lmRW50aXR5RXhpc3RzQXNUYXJnZXRFbnRpdHkiLCJzaWRlRWZmZWN0c01hcCIsInNpZGVFZmZlY3RzT25PdGhlckVudGl0eSIsImVudGl0eVNldE5hbWUiLCJwb3AiLCJzaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQiLCJ0YXJnZXRFbnRpdGllc0FycmF5Iiwic2lkZUVmZmVjdHMiLCJpbm5lck9iaiIsImhhbmRsZU1hc3NFZGl0RmllbGRVcGRhdGVBbmRSZXF1ZXN0U2lkZUVmZmVjdHMiLCJtUGFyYW1zIiwib0ZpZWxkUHJvbWlzZSIsImdyb3VwSWQiLCJkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSIsImltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvbWlzZXMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImlzU2lkZUVmZmVjdHNXaXRoQ3VycmVudEVudGl0eUFzVGFyZ2V0IiwiYWxsRW50aXR5VHlwZXNXaXRoUXVhbGlmaWVyIiwic2lkZUVmZmVjdHNEYXRhRm9yRmllbGQiLCJtVmlzaXRlZFNpZGVFZmZlY3RzIiwiZW50cmllcyIsImVudGl0eVR5cGVXaXRoUXVhbGlmaWVyIiwiZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzIiwiYWxsRmFpbGVkU2lkZUVmZmVjdHMiLCJnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHMiLCJhRmFpbGVkU2lkZUVmZmVjdHMiLCJ1bnJlZ2lzdGVyRmFpbGVkU2lkZUVmZmVjdHNGb3JBQ29udGV4dCIsInNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQiLCJjb25jYXQiLCJhU2lkZUVmZmVjdCIsImFJbW1lZGlhdGVUYXJnZXRzIiwiYWxsVGFyZ2V0cyIsInRyaWdnZXJBY3Rpb25OYW1lIiwiZm5HZXRJbW1lZGlhdGVUYXJnZXRzQW5kQWN0aW9ucyIsIm1TaWRlRWZmZWN0Iiwic2lkZUVmZmVjdEVudGl0eVR5cGUiLCJ0YXJnZXRzQXJyYXlGb3JBbGxQcm9wZXJ0aWVzIiwiYWN0aW9uTmFtZSIsInRyaWdnZXJBY3Rpb24iLCJhRGVmZXJyZWRUYXJnZXRzIiwidGFyZ2V0IiwiaXNTdGF0aWNBY3Rpb24iLCJUYWJsZUhlbHBlciIsIl9pc1N0YXRpY0FjdGlvbiIsIlRyaWdnZXJBY3Rpb24iLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJhbGxTZXR0bGVkIiwiY3JlYXRlRGlhbG9nIiwic0ZyYWdtZW50TmFtZSIsIm1ldGFNb2RlbCIsIml0ZW1zTW9kZWwiLCJUZW1wbGF0ZU1vZGVsIiwiZ2V0RGF0YSIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwib0NyZWF0ZWRGcmFnbWVudCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJiaW5kaW5nQ29udGV4dHMiLCJkYXRhRmllbGRNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGV4dFBhdGgiLCJnZXRNZXRhUGF0aCIsIm1vZGVscyIsIm9EaWFsb2dDb250ZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsIkRpYWxvZyIsInJlc2l6YWJsZSIsInRpdGxlIiwiY29udGVudCIsImFmdGVyT3BlbiIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwiaGVscGVycyIsImdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dCIsInByZXNzIiwib0V2ZW50IiwicmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib01vZGVsIiwiYVByb3BlcnR5UmVhZGFibGVJbmZvIiwiYWxsU2lkZUVmZmVjdHMiLCJtYXNzRWRpdFByb21pc2VzIiwiZmFpbGVkRmllbGRzRGF0YSIsInNlbGVjdGVkUm93c0xlbmd0aCIsImlkeCIsImNhdGNoIiwib0Vycm9yIiwiZXJyb3IiLCJyZWplY3QiLCJpc0ZpZWxkVXBkYXRlRmFpbGVkIiwiZGF0YVRvVXBkYXRlRmllbGRBbmRTaWRlRWZmZWN0cyIsImRlZmVycmVkUmVxdWVzdHMiLCJzaWRlRWZmZWN0c0RhdGFGb3JBbGxLZXlzIiwia2V5c1dpdGhTaWRlRWZmZWN0cyIsImN1cnJlbnRLZXkiLCJkZWZlcnJlZFNpZGVFZmZlY3RzRGF0YSIsInJlcSIsImZuR2V0RGVmZXJyZWRUYXJnZXRzIiwiZm5HZXREZWZlcnJlZFRhcmdldHNBbmRBY3Rpb25zIiwiZSIsImVuZEJ1dHRvbiIsImhhc0VkaXRhYmxlRmllbGRzQmluZGluZyIsImdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyIsImZpZWxkcyIsInRvdGFsRXhwIiwicmVkdWNlIiwiZXhwcmVzc2lvbiIsImZpZWxkIiwib3IiLCJwYXRoSW5Nb2RlbCIsIm5vdCIsImRlZmF1bHRWYWx1ZXMiLCJlZGl0YWJsZUV4cCIsImlmRWxzZSIsImNvbXBpbGVFeHByZXNzaW9uIiwicmV0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNYXNzRWRpdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSxcblx0TWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5LFxuXHRNYXNzRWRpdEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGlmRWxzZSwgbm90LCBvciwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBPRGF0YVNpZGVFZmZlY3RzVHlwZSwgU2lkZUVmZmVjdHNFbnRpdHlUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0UmVsYXRpdmVQYXRocyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoLFxuXHRoYXNDdXJyZW5jeSxcblx0aGFzVW5pdCxcblx0aGFzVmFsdWVIZWxwLFxuXHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCB7IGdldFRleHRCaW5kaW5nLCBzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL0ludGVybmFsRmllbGQuYmxvY2tcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgdHlwZSB7IEFueVR5cGUgfSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc011bHRpVmFsdWVGaWVsZCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGZvciBtYXNzIGVkaXQgZnVuY3Rpb25hbGl0eSAqL1xudHlwZSBUZXh0QXJyYW5nZW1lbnRJbmZvID0ge1xuXHR0ZXh0QXJyYW5nZW1lbnQ6IHN0cmluZztcblx0dmFsdWVQYXRoOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0ZnVsbFRleHQ6IHN0cmluZztcbn07XG5cbnR5cGUgQmluZGluZ0luZm8gPSB7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG1vZGVsPzogc3RyaW5nIHwgb2JqZWN0O1xuXHRwYXJhbWV0ZXJzPzogQXJyYXk8QmluZGluZ0luZm8+O1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YVRvVXBkYXRlRmllbGRBbmRTaWRlRWZmZWN0c1R5cGUgPSB7XG5cdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcjtcblx0b0ZpZWxkUHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXHRzaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblx0dGV4dFBhdGhzOiBhbnk7XG5cdGdyb3VwSWQ6IHN0cmluZztcblx0a2V5OiBzdHJpbmc7XG5cdG9FbnRpdHlTZXRDb250ZXh0OiBDb250ZXh0O1xuXHRvTWV0YU1vZGVsOiBhbnk7XG5cdG9TZWxlY3RlZENvbnRleHQ6IGFueTtcblx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWU6IGFueTtcbn07XG5cbmNvbnN0IE1hc3NFZGl0SGVscGVyID0ge1xuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIHZhbHVlIGF0IGZpbmFsIG9yIGRlZXBlc3QgbGV2ZWwgcGF0aCB3aXRoIGEgYmxhbmsgYXJyYXkuXG5cdCAqIFJldHVybiBhbiBlbXB0eSBhcnJheSBwb2ludGluZyB0byB0aGUgZmluYWwgb3IgZGVlcGVzdCBsZXZlbCBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1BhdGggUHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gYVZhbHVlcyBBcnJheSBpbnN0YW5jZSB3aGVyZSB0aGUgZGVmYXVsdCBkYXRhIG5lZWRzIHRvIGJlIGFkZGVkXG5cdCAqIEByZXR1cm5zIFRoZSBmaW5hbCBwYXRoXG5cdCAqL1xuXHRpbml0TGFzdExldmVsT2ZQcm9wZXJ0eVBhdGg6IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBhVmFsdWVzOiBhbnkgLyosIHRyYW5zQ3R4OiBDb250ZXh0ICovKSB7XG5cdFx0bGV0IGFGaW5hbFBhdGg6IGFueTtcblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGFQYXRocyA9IHNQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRsZXQgc0Z1bGxQYXRoID0gXCJcIjtcblx0XHRhUGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5UGF0aDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFWYWx1ZXNbc1Byb3BlcnR5UGF0aF0gJiYgaW5kZXggPT09IDApIHtcblx0XHRcdFx0YVZhbHVlc1tzUHJvcGVydHlQYXRoXSA9IHt9O1xuXHRcdFx0XHRhRmluYWxQYXRoID0gYVZhbHVlc1tzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0c0Z1bGxQYXRoID0gc0Z1bGxQYXRoICsgc1Byb3BlcnR5UGF0aDtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdH0gZWxzZSBpZiAoIWFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0c0Z1bGxQYXRoID0gYCR7c0Z1bGxQYXRofS8ke3NQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdFx0aWYgKHNGdWxsUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHRhRmluYWxQYXRoW3NQcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0XHRcdFx0YUZpbmFsUGF0aCA9IGFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFGaW5hbFBhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdW5pcXVlIHZhbHVlcyBmb3IgZ2l2ZW4gYXJyYXkgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1ZhbHVlIFByb3BlcnR5IHZhbHVlXG5cdCAqIEBwYXJhbSBpbmRleCBJbmRleCBvZiB0aGUgcHJvcGVydHkgdmFsdWVcblx0ICogQHBhcmFtIHNlbGYgSW5zdGFuY2Ugb2YgdGhlIGFycmF5XG5cdCAqIEByZXR1cm5zIFRoZSB1bmlxdWUgdmFsdWVcblx0ICovXG5cdGdldFVuaXF1ZVZhbHVlczogZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBzZWxmOiBhbnlbXSkge1xuXHRcdHJldHVybiBzVmFsdWUgIT0gdW5kZWZpbmVkICYmIHNWYWx1ZSAhPSBudWxsID8gc2VsZi5pbmRleE9mKHNWYWx1ZSkgPT09IGluZGV4IDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBtdWx0aS1sZXZlbCBwYXRoIChmb3IgZXhhbXBsZTogX01hdGVyaWFscy9NYXRlcmlhbF9EZXRhaWxzIGdldHMgdGhlIHZhbHVlIG9mIE1hdGVyaWFsX0RldGFpbHMgdW5kZXIgX01hdGVyaWFscyBPYmplY3QpLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eVZhbHVlLCB3aGljaCBjYW4gYmUgb2YgYW55IHR5cGUgKHN0cmluZywgbnVtYmVyLCBldGMuLikuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBvVmFsdWVzIE9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHZhbHVlXG5cdCAqL1xuXHRnZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoOiBmdW5jdGlvbiAoc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZywgb1ZhbHVlczogYW55KSB7XG5cdFx0bGV0IHJlc3VsdDogYW55O1xuXHRcdGlmIChzRGF0YVByb3BlcnR5UGF0aCAmJiBzRGF0YVByb3BlcnR5UGF0aC5pbmRleE9mKFwiL1wiKSA+IDApIHtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzID0gc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0YVByb3BlcnR5UGF0aHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGg6IHN0cmluZykge1xuXHRcdFx0XHRyZXN1bHQgPSBvVmFsdWVzICYmIG9WYWx1ZXNbc1BhdGhdID8gb1ZhbHVlc1tzUGF0aF0gOiByZXN1bHQgJiYgcmVzdWx0W3NQYXRoXTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBrZXkgcGF0aCBmb3IgdGhlIGtleSBvZiBhIGNvbWJvIGJveCB0aGF0IG11c3QgYmUgc2VsZWN0ZWQgaW5pdGlhbGx5IHdoZW4gdGhlIGRpYWxvZyBvcGVuczpcblx0ICogPT4gSWYgcHJvcGVydHlWYWx1ZSBmb3IgYWxsIHNlbGVjdGVkIGNvbnRleHRzIGlzIGRpZmZlcmVudCwgdGhlbiA8IEtlZXAgRXhpc3RpbmcgVmFsdWVzID4gaXMgcHJlc2VsZWN0ZWQuXG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyB0aGUgc2FtZSwgdGhlbiB0aGUgcHJvcGVydHlWYWx1ZSBpcyBwcmVzZWxlY3RlZC5cblx0ICogPT4gSWYgcHJvcGVydHlWYWx1ZSBmb3IgYWxsIHNlbGVjdGVkIGNvbnRleHRzIGlzIGVtcHR5LCB0aGVuIDwgTGVhdmUgQmxhbmsgPiBpcyBwcmVzZWxlY3RlZC5cblx0ICpcblx0ICpcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBEYXRhIHByb3BlcnR5IHBhdGhcblx0ICogQHJldHVybnMgVGhlIGtleSBwYXRoXG5cdCAqL1xuXHRnZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94OiBmdW5jdGlvbiAoYUNvbnRleHRzOiBhbnlbXSwgc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZykge1xuXHRcdGxldCByZXN1bHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGggJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhQ29udGV4dHMsXG5cdFx0XHRcdGFQcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdG9TZWxlY3RlZENvbnRleHQuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhDb25kaXRpb24gPVxuXHRcdFx0XHRcdHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgJiYgb0RhdGFPYmplY3QuaGFzT3duUHJvcGVydHkoc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpWzBdKTtcblx0XHRcdFx0aWYgKG9Db250ZXh0ICYmIChvRGF0YU9iamVjdC5oYXNPd25Qcm9wZXJ0eShzRGF0YVByb3BlcnR5UGF0aCkgfHwgc011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVZhbHVlcy5wdXNoKG9Db250ZXh0LmdldE9iamVjdChzRGF0YVByb3BlcnR5UGF0aCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFVbmlxdWVQcm9wZXJ0eVZhbHVlcyA9IGFQcm9wZXJ0eVZhbHVlcy5maWx0ZXIoTWFzc0VkaXRIZWxwZXIuZ2V0VW5pcXVlVmFsdWVzKTtcblx0XHRcdGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXN1bHQgPSBgRGVmYXVsdC8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHR9IGVsc2UgaWYgKGFVbmlxdWVQcm9wZXJ0eVZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0cmVzdWx0ID0gYEVtcHR5LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YDtcblx0XHRcdH0gZWxzZSBpZiAoYVVuaXF1ZVByb3BlcnR5VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRyZXN1bHQgPSBgJHtzRGF0YVByb3BlcnR5UGF0aH0vJHthVW5pcXVlUHJvcGVydHlWYWx1ZXNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGhpZGRlbiBhbm5vdGF0aW9uIHZhbHVlIFtib3RoIHN0YXRpYyBhbmQgcGF0aCBiYXNlZF0gZm9yIHRhYmxlJ3Mgc2VsZWN0ZWQgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGhpZGRlblZhbHVlIEhpZGRlbiBhbm5vdGF0aW9uIHZhbHVlIC8gcGF0aCBmb3IgZmllbGRcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEByZXR1cm5zIFRoZSBoaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZVxuXHQgKi9cblx0Z2V0SGlkZGVuVmFsdWVGb3JDb250ZXh0czogZnVuY3Rpb24gKGhpZGRlblZhbHVlOiBhbnksIGFDb250ZXh0czogYW55W10pIHtcblx0XHRpZiAoaGlkZGVuVmFsdWUgJiYgaGlkZGVuVmFsdWUuJFBhdGgpIHtcblx0XHRcdHJldHVybiAhYUNvbnRleHRzLnNvbWUoZnVuY3Rpb24gKG9TZWxlY3RlZENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoaGlkZGVuVmFsdWUuJFBhdGgpID09PSBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gaGlkZGVuVmFsdWU7XG5cdH0sXG5cblx0Z2V0SW5wdXRUeXBlOiBmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBhbnksIGRhdGFGaWVsZENvbnZlcnRlZDogYW55LCBvRGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZWRpdFN0eWxlUHJvcGVydGllcyA9IHt9IGFzIEZpZWxkUHJvcGVydGllcztcblx0XHRsZXQgaW5wdXRUeXBlITogc3RyaW5nO1xuXHRcdGlmIChwcm9wZXJ0eUluZm8pIHtcblx0XHRcdHNldEVkaXRTdHlsZVByb3BlcnRpZXMoZWRpdFN0eWxlUHJvcGVydGllcywgZGF0YUZpZWxkQ29udmVydGVkLCBvRGF0YU1vZGVsUGF0aCwgdHJ1ZSk7XG5cdFx0XHRpbnB1dFR5cGUgPSBlZGl0U3R5bGVQcm9wZXJ0aWVzPy5lZGl0U3R5bGUgfHwgXCJcIjtcblx0XHR9XG5cdFx0Y29uc3QgaXNWYWxpZEZvck1hc3NFZGl0ID1cblx0XHRcdGlucHV0VHlwZSAmJlxuXHRcdFx0W1wiRGF0ZVBpY2tlclwiLCBcIlRpbWVQaWNrZXJcIiwgXCJEYXRlVGltZVBpY2tlclwiLCBcIlJhdGluZ0luZGljYXRvclwiXS5pbmRleE9mKGlucHV0VHlwZSkgPT09IC0xICYmXG5cdFx0XHQhaXNNdWx0aVZhbHVlRmllbGQob0RhdGFNb2RlbFBhdGgpICYmXG5cdFx0XHQhaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKHByb3BlcnR5SW5mbyk7XG5cblx0XHRyZXR1cm4gKGlzVmFsaWRGb3JNYXNzRWRpdCB8fCBcIlwiKSAmJiBpbnB1dFR5cGU7XG5cdH0sXG5cblx0Z2V0SXNGaWVsZEdycDogZnVuY3Rpb24gKGRhdGFGaWVsZENvbnZlcnRlZDogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZCAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIiAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldCAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldC52YWx1ZSAmJlxuXHRcdFx0ZGF0YUZpZWxkQ29udmVydGVkLlRhcmdldC52YWx1ZS5pbmRleE9mKFwiRmllbGRHcm91cFwiKSA+IC0xXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRleHQgcGF0aCBmb3IgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHBhdGhcblx0ICogQHBhcmFtIHRleHRCaW5kaW5nIFRleHQgQmluZGluZyBJbmZvXG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZSBEaXNwbGF5IG1vZGVcblx0ICogQHJldHVybnMgVGV4dCBQcm9wZXJ0eSBQYXRoIGlmIGl0IGV4aXN0c1xuXHQgKi9cblx0Z2V0VGV4dFBhdGg6IGZ1bmN0aW9uIChwcm9wZXJ0eTogc3RyaW5nLCB0ZXh0QmluZGluZzogYW55LCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZGVzY3JpcHRpb25QYXRoO1xuXHRcdGlmICh0ZXh0QmluZGluZyAmJiAodGV4dEJpbmRpbmcucGF0aCB8fCAodGV4dEJpbmRpbmcucGFyYW1ldGVycyAmJiB0ZXh0QmluZGluZy5wYXJhbWV0ZXJzLmxlbmd0aCkpICYmIHByb3BlcnR5KSB7XG5cdFx0XHRpZiAodGV4dEJpbmRpbmcucGF0aCAmJiBkaXNwbGF5TW9kZSA9PT0gXCJEZXNjcmlwdGlvblwiKSB7XG5cdFx0XHRcdGRlc2NyaXB0aW9uUGF0aCA9IHRleHRCaW5kaW5nLnBhdGg7XG5cdFx0XHR9IGVsc2UgaWYgKHRleHRCaW5kaW5nLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0dGV4dEJpbmRpbmcucGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wczogQmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRpZiAocHJvcHMucGF0aCAmJiBwcm9wcy5wYXRoICE9PSBwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoID0gcHJvcHMucGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZGVzY3JpcHRpb25QYXRoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIEpTT04gTW9kZWwgZm9yIHByb3BlcnRpZXMgb2YgZGlhbG9nIGZpZWxkcyBbbGFiZWwsIHZpc2libGl0eSwgZGF0YXByb3BlcnR5LCBldGMuXS5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiBUYWJsZVxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIGFEYXRhQXJyYXkgQXJyYXkgY29udGFpbmluZyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGRpYWxvZyB1c2VkIGJ5IGJvdGggdGhlIHN0YXRpYyBhbmQgdGhlIHJ1bnRpbWUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIG1vZGVsXG5cdCAqL1xuXHRwcmVwYXJlRGF0YUZvckRpYWxvZzogZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogYW55W10sIGFEYXRhQXJyYXk6IGFueVtdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UYWJsZSAmJiAob1RhYmxlLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpLFxuXHRcdFx0YVRhYmxlRmllbGRzID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGFibGVGaWVsZHMob1RhYmxlKSxcblx0XHRcdG9FbnRpdHlUeXBlQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9L0BgKSxcblx0XHRcdG9FbnRpdHlTZXRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KHNDdXJyZW50RW50aXR5U2V0TmFtZSksXG5cdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5VHlwZUNvbnRleHQpO1xuXG5cdFx0Y29uc3Qgb0RhdGFGaWVsZE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGxldCBvUmVzdWx0O1xuXHRcdGxldCBzTGFiZWxUZXh0O1xuXHRcdGxldCBiVmFsdWVIZWxwRW5hYmxlZDtcblx0XHRsZXQgc1VuaXRQcm9wZXJ0eVBhdGg7XG5cdFx0bGV0IGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdDtcblx0XHRsZXQgb1RleHRCaW5kaW5nO1xuXG5cdFx0YVRhYmxlRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRcdGlmICghb0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eVBhdGggPSBvQ29sdW1uSW5mby5kYXRhUHJvcGVydHk7XG5cdFx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBzRGF0YVByb3BlcnR5UGF0aCAmJiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9QGApO1xuXHRcdFx0XHRzTGFiZWxUZXh0ID1cblx0XHRcdFx0XHRvQ29sdW1uSW5mby5sYWJlbCB8fCAob1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXSkgfHwgc0RhdGFQcm9wZXJ0eVBhdGg7XG5cblx0XHRcdFx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0XHRcdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRvUHJvcGVydHk6IGFueVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS5uYW1lID09PSBzRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3RbMF0gfHwge307XG5cdFx0XHRcdG9UZXh0QmluZGluZyA9IGdldFRleHRCaW5kaW5nKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7fSwgdHJ1ZSkgfHwge307XG5cdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvRmllbGRDb250ZXh0KSxcblx0XHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRcdFx0b0ludGVyZmFjZSA9IG9Qcm9wZXJ0eUNvbnRleHQgJiYgKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0SW50ZXJmYWNlKCkgYXMgYW55KTtcblxuXHRcdFx0XHRsZXQgb0RhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ZpZWxkQ29udGV4dCwgb0VudGl0eVNldENvbnRleHQpO1xuXHRcdFx0XHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZD8uVmFsdWU/LnBhdGg/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9EYXRhTW9kZWxQYXRoLCBzRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkhpZGRlbkZpZWxkID1cblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5nZXRIaWRkZW5WYWx1ZUZvckNvbnRleHRzKFxuXHRcdFx0XHRcdFx0b0ZpZWxkQ29udGV4dCAmJiBvRmllbGRDb250ZXh0LmdldE9iamVjdCgpW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0XHRcdGFDb250ZXh0c1xuXHRcdFx0XHRcdCkgfHwgZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGlzSW1hZ2UgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm9bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXTtcblxuXHRcdFx0XHRvSW50ZXJmYWNlLmNvbnRleHQgPSB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvID0gaXNQcm9wZXJ0eShvRGF0YUZpZWxkQ29udmVydGVkKVxuXHRcdFx0XHRcdD8gb0RhdGFGaWVsZENvbnZlcnRlZFxuXHRcdFx0XHRcdDogb0RhdGFGaWVsZENvbnZlcnRlZD8uVmFsdWU/LiR0YXJnZXQgPz8gb0RhdGFGaWVsZENvbnZlcnRlZD8uVGFyZ2V0Py4kdGFyZ2V0O1xuXHRcdFx0XHQvLyBEYXRhZmllbGQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBGaWVsZENvbnRyb2wgY2FsY3VsYXRpb24sIG5lZWRzIHRvIGJlIGltcGxlbWVudGVkXG5cblx0XHRcdFx0Y29uc3QgY2hhcnRQcm9wZXJ0eSA9IG9Qcm9wZXJ0eUluZm8gJiYgb1Byb3BlcnR5SW5mby50ZXJtICYmIG9Qcm9wZXJ0eUluZm8udGVybSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiO1xuXHRcdFx0XHRjb25zdCBpc0FjdGlvbiA9ICEhb0RhdGFGaWVsZENvbnZlcnRlZC5BY3Rpb247XG5cdFx0XHRcdGNvbnN0IGlzRmllbGRHcnAgPSBNYXNzRWRpdEhlbHBlci5nZXRJc0ZpZWxkR3JwKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHRcdFx0XHRpZiAoaXNJbWFnZSB8fCBiSGlkZGVuRmllbGQgfHwgY2hhcnRQcm9wZXJ0eSB8fCBpc0FjdGlvbiB8fCBpc0ZpZWxkR3JwKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVmFsdWVIZWxwIHByb3BlcnRpZXNcblx0XHRcdFx0c1VuaXRQcm9wZXJ0eVBhdGggPVxuXHRcdFx0XHRcdCgoaGFzQ3VycmVuY3kob1Byb3BlcnR5SW5mbykgfHwgaGFzVW5pdChvUHJvcGVydHlJbmZvKSkgJiYgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgob1Byb3BlcnR5SW5mbykpIHx8IFwiXCI7XG5cdFx0XHRcdGNvbnN0IHVuaXRQcm9wZXJ0eUluZm8gPSBzVW5pdFByb3BlcnR5UGF0aCAmJiBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRiVmFsdWVIZWxwRW5hYmxlZCA9IGhhc1ZhbHVlSGVscChvUHJvcGVydHlJbmZvKTtcblx0XHRcdFx0YlZhbHVlSGVscEVuYWJsZWRGb3JVbml0ID0gdW5pdFByb3BlcnR5SW5mbyAmJiBoYXNWYWx1ZUhlbHAodW5pdFByb3BlcnR5SW5mbyk7XG5cblx0XHRcdFx0Y29uc3QgaGFzQ29udGV4dERlcGVuZGVudFZIID1cblx0XHRcdFx0XHQoYlZhbHVlSGVscEVuYWJsZWQgfHwgYlZhbHVlSGVscEVuYWJsZWRGb3JVbml0KSAmJlxuXHRcdFx0XHRcdChvUHJvcGVydHlJbmZvPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnMgfHxcblx0XHRcdFx0XHRcdCh1bml0UHJvcGVydHlJbmZvICYmIHVuaXRQcm9wZXJ0eUluZm8/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycykpO1xuXHRcdFx0XHRpZiAoaGFzQ29udGV4dERlcGVuZGVudFZIKSB7XG5cdFx0XHRcdFx0Ly8gY29udGV4dCBkZXBlbmRlbnQgVkggaXMgbm90IHN1cHBvcnRlZCBmb3IgTWFzcyBFZGl0LlxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEVkaXRNb2RlIGFuZCBJbnB1dFR5cGVcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlGb3JGaWVsZENvbnRyb2wgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm8uVmFsdWUgPyBvUHJvcGVydHlJbmZvLlZhbHVlIDogb1Byb3BlcnR5SW5mbztcblx0XHRcdFx0Y29uc3QgZXhwQmluZGluZyA9IGdldEVkaXRNb2RlKHByb3BlcnR5Rm9yRmllbGRDb250cm9sLCBvRGF0YU1vZGVsUGF0aCwgZmFsc2UsIGZhbHNlLCBvRGF0YUZpZWxkQ29udmVydGVkLCBjb25zdGFudCh0cnVlKSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlVmFsdWVzID0gT2JqZWN0LmtleXMoRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0TW9kZUlzU3RhdGljID0gISFleHBCaW5kaW5nICYmIGVkaXRNb2RlVmFsdWVzLmluY2x1ZGVzKGV4cEJpbmRpbmcgYXMgRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0YWJsZSA9ICEhZXhwQmluZGluZyAmJiAoKGVkaXRNb2RlSXNTdGF0aWMgJiYgZXhwQmluZGluZyA9PT0gRWRpdE1vZGUuRWRpdGFibGUpIHx8ICFlZGl0TW9kZUlzU3RhdGljKTtcblx0XHRcdFx0Y29uc3QgbmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwID0gc0RhdGFQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpICYmIGJWYWx1ZUhlbHBFbmFibGVkO1xuXHRcdFx0XHRpZiAoIWVkaXRhYmxlIHx8IG5hdlByb3BlcnR5V2l0aFZhbHVlSGVscCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGlucHV0VHlwZSA9IE1hc3NFZGl0SGVscGVyLmdldElucHV0VHlwZShvUHJvcGVydHlJbmZvLCBvRGF0YUZpZWxkQ29udmVydGVkLCBvRGF0YU1vZGVsUGF0aCk7XG5cblx0XHRcdFx0aWYgKGlucHV0VHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbFBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IGlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbihvUHJvcGVydHlJbmZvLCByZWxhdGl2ZVBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFsdWVIZWxwRW5hYmxlZCA9IGJWYWx1ZUhlbHBFbmFibGVkID8gYlZhbHVlSGVscEVuYWJsZWQgOiBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0ID1cblx0XHRcdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCAmJiAhc1VuaXRQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gYlZhbHVlSGVscEVuYWJsZWRGb3JVbml0IDogZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gc1VuaXRQcm9wZXJ0eVBhdGggJiYgIXNEYXRhUHJvcGVydHlQYXRoLmluY2x1ZGVzKFwiL1wiKSA/IHNVbml0UHJvcGVydHlQYXRoIDogZmFsc2U7XG5cblx0XHRcdFx0XHRvUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0bGFiZWw6IHNMYWJlbFRleHQsXG5cdFx0XHRcdFx0XHRkYXRhUHJvcGVydHk6IHNEYXRhUHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0aXNWYWx1ZUhlbHBFbmFibGVkOiBiVmFsdWVIZWxwRW5hYmxlZCA/IGJWYWx1ZUhlbHBFbmFibGVkIDogZmFsc2UsXG5cdFx0XHRcdFx0XHR1bml0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRpc0ZpZWxkUmVxdWlyZWQ6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlJbmZvLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBmYWxzZSwge30sIG9EYXRhTW9kZWxQYXRoKSxcblx0XHRcdFx0XHRcdGRlZmF1bHRTZWxlY3Rpb25QYXRoOiBzRGF0YVByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQ/IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBzRGF0YVByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdGRlZmF1bHRTZWxlY3Rpb25Vbml0UGF0aDogc1VuaXRQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdFx0PyBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KGFDb250ZXh0cywgc1VuaXRQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNDdXJyZW50RW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlLFxuXHRcdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBNYXNzRWRpdEhlbHBlci5nZXRUZXh0UGF0aChzRGF0YVByb3BlcnR5UGF0aCwgb1RleHRCaW5kaW5nLCBkaXNwbGF5TW9kZSksXG5cdFx0XHRcdFx0XHRudWxsYWJsZTogb1Byb3BlcnR5SW5mby5udWxsYWJsZSAhPT0gdW5kZWZpbmVkID8gb1Byb3BlcnR5SW5mby5udWxsYWJsZSA6IHRydWUsXG5cdFx0XHRcdFx0XHRpc1Byb3BlcnR5UmVhZE9ubHk6IGlzUmVhZE9ubHkgIT09IHVuZGVmaW5lZCA/IGlzUmVhZE9ubHkgOiBmYWxzZSxcblx0XHRcdFx0XHRcdGlucHV0VHlwZTogaW5wdXRUeXBlLFxuXHRcdFx0XHRcdFx0ZWRpdE1vZGU6IGVkaXRhYmxlID8gZXhwQmluZGluZyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mbzoge1xuXHRcdFx0XHRcdFx0XHRoYXNWSDogaXNWYWx1ZUhlbHBFbmFibGVkLFxuXHRcdFx0XHRcdFx0XHRydW50aW1lUGF0aDogXCJmaWVsZHNJbmZvPi92YWx1ZXMvXCIsXG5cdFx0XHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogc0RhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBvUHJvcGVydHlJbmZvLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoRm9yVmFsdWVIZWxwOiBgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHVuaXRJbmZvOiB1bml0UHJvcGVydHkgJiYge1xuXHRcdFx0XHRcdFx0XHRoYXNWSDogaXNWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCxcblx0XHRcdFx0XHRcdFx0cnVudGltZVBhdGg6IFwiZmllbGRzSW5mbz4vdW5pdERhdGEvXCIsXG5cdFx0XHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogdW5pdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGhGb3JWYWx1ZUhlbHA6IGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHt1bml0UHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YURhdGFBcnJheS5wdXNoKG9SZXN1bHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0RhdGFGaWVsZE1vZGVsLnNldERhdGEoYURhdGFBcnJheSk7XG5cdFx0cmV0dXJuIG9EYXRhRmllbGRNb2RlbDtcblx0fSxcblxuXHRnZXRUYWJsZUZpZWxkczogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0Y29uc3QgYUNvbHVtbnMgPSAob1RhYmxlICYmIG9UYWJsZS5nZXRDb2x1bW5zKCkpIHx8IFtdO1xuXHRcdGNvbnN0IGNvbHVtbnNEYXRhID0gb1RhYmxlICYmIG9UYWJsZS5nZXRQYXJlbnQoKS5nZXRUYWJsZURlZmluaXRpb24oKS5jb2x1bW5zO1xuXHRcdHJldHVybiBhQ29sdW1ucy5tYXAoZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdFx0Y29uc3Qgc0RhdGFQcm9wZXJ0eSA9IG9Db2x1bW4gJiYgb0NvbHVtbi5nZXREYXRhUHJvcGVydHkoKSxcblx0XHRcdFx0YVJlYWx0ZWRDb2x1bW5JbmZvID1cblx0XHRcdFx0XHRjb2x1bW5zRGF0YSAmJlxuXHRcdFx0XHRcdGNvbHVtbnNEYXRhLmZpbHRlcihmdW5jdGlvbiAob0NvbHVtbkluZm86IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db2x1bW5JbmZvLm5hbWUgPT09IHNEYXRhUHJvcGVydHkgJiYgb0NvbHVtbkluZm8udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhUHJvcGVydHk6IHNEYXRhUHJvcGVydHksXG5cdFx0XHRcdGxhYmVsOiBvQ29sdW1uLmdldEhlYWRlcigpLFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYVJlYWx0ZWRDb2x1bW5JbmZvICYmIGFSZWFsdGVkQ29sdW1uSW5mb1swXSAmJiBhUmVhbHRlZENvbHVtbkluZm9bMF0uYW5ub3RhdGlvblBhdGhcblx0XHRcdH07XG5cdFx0fSk7XG5cdH0sXG5cblx0Z2V0RGVmYXVsdFRleHRzRm9yRGlhbG9nOiBmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBhbnksIGlTZWxlY3RlZENvbnRleHRzOiBhbnksIG9UYWJsZTogYW55KSB7XG5cdFx0Ly8gVGhlIGNvbmZpcm0gYnV0dG9uIHRleHQgaXMgXCJTYXZlXCIgZm9yIHRhYmxlIGluIERpc3BsYXkgbW9kZSBhbmQgXCJBcHBseVwiIGZvciB0YWJsZSBpbiBlZGl0IG1vZGUuIFRoaXMgY2FuIGJlIGxhdGVyIGV4cG9zZWQgaWYgbmVlZGVkLlxuXHRcdGNvbnN0IGJEaXNwbGF5TW9kZSA9IG9UYWJsZS5kYXRhKFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIikgPT09IFwidHJ1ZVwiO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGtlZXBFeGlzdGluZ1ByZWZpeDogXCI8IEtlZXBcIixcblx0XHRcdGxlYXZlQmxhbmtWYWx1ZTogXCI8IExlYXZlIEJsYW5rID5cIixcblx0XHRcdGNsZWFyRmllbGRWYWx1ZTogXCI8IENsZWFyIFZhbHVlcyA+XCIsXG5cdFx0XHRtYXNzRWRpdFRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBpU2VsZWN0ZWRDb250ZXh0cy50b1N0cmluZygpKSxcblx0XHRcdGFwcGx5QnV0dG9uVGV4dDogYkRpc3BsYXlNb2RlXG5cdFx0XHRcdD8gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TQVZFX0JVVFRPTl9URVhUXCIpXG5cdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9BUFBMWV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdHVzZVZhbHVlSGVscFZhbHVlOiBcIjwgVXNlIFZhbHVlIEhlbHAgPlwiLFxuXHRcdFx0Y2FuY2VsQnV0dG9uVGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRub0ZpZWxkczogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNcIiksXG5cdFx0XHRva0J1dHRvblRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX09LXCIpXG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogQWRkcyBhIHN1ZmZpeCB0byB0aGUgJ2tlZXAgZXhpc3RpbmcnIHByb3BlcnR5IG9mIHRoZSBjb21ib0JveC5cblx0ICpcblx0ICogQHBhcmFtIHNJbnB1dFR5cGUgSW5wdXRUeXBlIG9mIHRoZSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nXG5cdCAqL1xuXHQvLyBnZXRTdWZmaXhGb3JLZWVwRXhpc2l0aW5nOiBmdW5jdGlvbiAoc0lucHV0VHlwZTogc3RyaW5nKSB7XG5cdC8vIFx0bGV0IHNSZXN1bHQgPSBcIlZhbHVlc1wiO1xuXG5cdC8vIFx0c3dpdGNoIChzSW5wdXRUeXBlKSB7XG5cdC8vIFx0XHQvL1RPRE8gLSBBZGQgZm9yIG90aGVyIGNvbnRyb2wgdHlwZXMgYXMgd2VsbCAoUmFkaW8gQnV0dG9uLCBFbWFpbCwgSW5wdXQsIE1EQyBGaWVsZHMsIEltYWdlIGV0Yy4pXG5cdC8vIFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHQvLyBcdFx0XHRzUmVzdWx0ID0gXCJEYXRlc1wiO1xuXHQvLyBcdFx0XHRicmVhaztcblx0Ly8gXHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHQvLyBcdFx0XHRzUmVzdWx0ID0gXCJTZXR0aW5nc1wiO1xuXHQvLyBcdFx0XHRicmVhaztcblx0Ly8gXHRcdGRlZmF1bHQ6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIlZhbHVlc1wiO1xuXHQvLyBcdH1cblx0Ly8gXHRyZXR1cm4gc1Jlc3VsdDtcblx0Ly8gfSxcblxuXHQvKipcblx0ICogQWRkcyBkZWZhdWx0IHZhbHVlcyB0byB0aGUgbW9kZWwgW0tlZXAgRXhpc3RpbmcgVmFsdWVzLCBMZWF2ZSBCbGFua10uXG5cdCAqXG5cdCAqIEBwYXJhbSBhVmFsdWVzIEFycmF5IGluc3RhbmNlIHdoZXJlIHRoZSBkZWZhdWx0IGRhdGEgbmVlZHMgdG8gYmUgYWRkZWRcblx0ICogQHBhcmFtIG9EZWZhdWx0VmFsdWVzIERlZmF1bHQgdmFsdWVzIGZyb20gQXBwbGljYXRpb24gTWFuaWZlc3Rcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUluZm8gUHJvcGVydHkgaW5mb3JtYXRpb25cblx0ICogQHBhcmFtIGJVT01GaWVsZFxuXHQgKi9cblx0c2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nOiBmdW5jdGlvbiAoYVZhbHVlczogYW55LCBvRGVmYXVsdFZhbHVlczogYW55LCBvUHJvcGVydHlJbmZvOiBhbnksIGJVT01GaWVsZD86IGJvb2xlYW4pIHtcblx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gYlVPTUZpZWxkID8gb1Byb3BlcnR5SW5mby51bml0UHJvcGVydHkgOiBvUHJvcGVydHlJbmZvLmRhdGFQcm9wZXJ0eSxcblx0XHRcdHNJbnB1dFR5cGUgPSBvUHJvcGVydHlJbmZvLmlucHV0VHlwZSxcblx0XHRcdGJQcm9wZXJ0eVJlcXVpcmVkID0gb1Byb3BlcnR5SW5mby5pc0ZpZWxkUmVxdWlyZWQ7XG5cdFx0Ly8gY29uc3Qgc1N1ZmZpeEZvcktlZXBFeGlzdGluZyA9IE1hc3NFZGl0SGVscGVyLmdldFN1ZmZpeEZvcktlZXBFeGlzaXRpbmcoc0lucHV0VHlwZSk7XG5cdFx0Y29uc3Qgc1N1ZmZpeEZvcktlZXBFeGlzdGluZyA9IFwiVmFsdWVzXCI7XG5cdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucyA9IGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMgfHwgW107XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uc0V4aXN0ID0gYVZhbHVlcy5zZWxlY3RPcHRpb25zICYmIGFWYWx1ZXMuc2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwO1xuXHRcdGNvbnN0IGtlZXBFbnRyeSA9IHtcblx0XHRcdHRleHQ6IGAke29EZWZhdWx0VmFsdWVzLmtlZXBFeGlzdGluZ1ByZWZpeH0gJHtzU3VmZml4Rm9yS2VlcEV4aXN0aW5nfSA+YCxcblx0XHRcdGtleTogYERlZmF1bHQvJHtzUHJvcGVydHlQYXRofWBcblx0XHR9O1xuXG5cdFx0aWYgKHNJbnB1dFR5cGUgPT09IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0Y29uc3QgZmFsc2VFbnRyeSA9IHsgdGV4dDogXCJOb1wiLCBrZXk6IGAke3NQcm9wZXJ0eVBhdGh9L2ZhbHNlYCwgdGV4dEluZm86IHsgdmFsdWU6IGZhbHNlIH0gfTtcblx0XHRcdGNvbnN0IHRydXRoeUVudHJ5ID0geyB0ZXh0OiBcIlllc1wiLCBrZXk6IGAke3NQcm9wZXJ0eVBhdGh9L3RydWVgLCB0ZXh0SW5mbzogeyB2YWx1ZTogdHJ1ZSB9IH07XG5cdFx0XHRhVmFsdWVzLnVuc2hpZnQoZmFsc2VFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoZmFsc2VFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLnVuc2hpZnQodHJ1dGh5RW50cnkpO1xuXHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KHRydXRoeUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdChrZWVwRW50cnkpO1xuXHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChvUHJvcGVydHlJbmZvPy5wcm9wZXJ0eUluZm8/Lmhhc1ZIIHx8IChvUHJvcGVydHlJbmZvPy51bml0SW5mbz8uaGFzVkggJiYgYlVPTUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCB2aGRFbnRyeSA9IHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMudXNlVmFsdWVIZWxwVmFsdWUsIGtleTogYFVzZVZhbHVlSGVscFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdGFWYWx1ZXMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VsZWN0T3B0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdGlmIChiUHJvcGVydHlSZXF1aXJlZCAhPT0gXCJ0cnVlXCIgJiYgIWJVT01GaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IGNsZWFyRW50cnkgPSB7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmNsZWFyRmllbGRWYWx1ZSwga2V5OiBgQ2xlYXJGaWVsZFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGNsZWFyRW50cnkpO1xuXHRcdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChjbGVhckVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlbXB0eUVudHJ5ID0geyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYERlZmF1bHQvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGVtcHR5RW50cnkpO1xuXHRcdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoZW1wdHlFbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCBhcnJhbmdlbWVudCBpbmZvIGZvciBhIGNvbnRleHQgcHJvcGVydHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBQYXRoXG5cdCAqIEBwYXJhbSBkZXNjcmlwdGlvblBhdGggUGF0aCB0byB0ZXh0IGFzc29jaWF0aW9uIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGUgRGlzcGxheSBtb2RlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGV4dCBhc3NvY2lhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IENvbnRleHQgdG8gZmluZCB0aGUgZnVsbCB0ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IGFycmFuZ2VtZW50XG5cdCAqL1xuXHRnZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHk6IHN0cmluZyxcblx0XHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZyxcblx0XHRkaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRcdHNlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHRcblx0KTogVGV4dEFycmFuZ2VtZW50SW5mbyB7XG5cdFx0bGV0IHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSksXG5cdFx0XHRkZXNjcmlwdGlvblZhbHVlLFxuXHRcdFx0ZnVsbFRleHQ7XG5cdFx0aWYgKGRlc2NyaXB0aW9uUGF0aCAmJiBwcm9wZXJ0eSkge1xuXHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRkZXNjcmlwdGlvblZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChkZXNjcmlwdGlvblBhdGgpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSBkZXNjcmlwdGlvblZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSB2YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZGVzY3JpcHRpb25QYXRoKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gZGVzY3JpcHRpb25WYWx1ZSA/IGAke3ZhbHVlfSAoJHtkZXNjcmlwdGlvblZhbHVlfSlgIDogdmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSB8fCBcIlwiO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uVmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGRlc2NyaXB0aW9uUGF0aCkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IGRlc2NyaXB0aW9uVmFsdWUgPyBgJHtkZXNjcmlwdGlvblZhbHVlfSAoJHt2YWx1ZX0pYCA6IHZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdExvZy5pbmZvKGBEaXNwbGF5IFByb3BlcnR5IG5vdCBhcHBsaWNhYmxlOiAke3Byb3BlcnR5fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR0ZXh0QXJyYW5nZW1lbnQ6IGRpc3BsYXlNb2RlLFxuXHRcdFx0dmFsdWVQYXRoOiBwcm9wZXJ0eSxcblx0XHRcdGRlc2NyaXB0aW9uUGF0aDogZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0ZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uVmFsdWUsXG5cdFx0XHRmdWxsVGV4dDogZnVsbFRleHRcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIHZpc2liaWxpdHkgdmFsdXVlIGZvciB0aGUgTWFuYWdlZE9iamVjdCBBbnkuXG5cdCAqXG5cdCAqIEBwYXJhbSBhbnkgVGhlIE1hbmFnZWRPYmplY3QgQW55IHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHZhbHVlIG9mIHRoZSBiaW5kaW5nLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hc3MgZWRpdCBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICovXG5cdGlzRWRpdGFibGU6IGZ1bmN0aW9uIChhbnk6IEFueVR5cGUpOiBib29sZWFuIHtcblx0XHRjb25zdCBiaW5kaW5nID0gYW55LmdldEJpbmRpbmcoXCJhbnlcIik7XG5cdFx0Y29uc3QgdmFsdWUgPSAoYmluZGluZyBhcyBhbnkpLmdldEV4dGVybmFsVmFsdWUoKTtcblx0XHRyZXR1cm4gdmFsdWUgPT09IEVkaXRNb2RlLkVkaXRhYmxlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGUgYW5kIHVwZGF0ZSB0aGUgdmlzaWJpbGl0eSBvZiBtYXNzIGVkaXQgZmllbGQgb24gY2hhbmdlIG9mIHRoZSBNYW5hZ2VkT2JqZWN0IEFueSBiaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0RpYWxvZ0RhdGFNb2RlbCBNb2RlbCB0byBiZSB1c2VkIHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBkYXRhUHJvcGVydHkgRmllbGQgbmFtZS5cblx0ICovXG5cdG9uQ29udGV4dEVkaXRhYmxlQ2hhbmdlOiBmdW5jdGlvbiAob0RpYWxvZ0RhdGFNb2RlbDogSlNPTk1vZGVsLCBkYXRhUHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG9iamVjdHNGb3JWaXNpYmlsaXR5ID0gb0RpYWxvZ0RhdGFNb2RlbC5nZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke2RhdGFQcm9wZXJ0eX0vb2JqZWN0c0ZvclZpc2liaWxpdHlgKSB8fCBbXTtcblx0XHRjb25zdCBlZGl0YWJsZSA9IG9iamVjdHNGb3JWaXNpYmlsaXR5LnNvbWUoTWFzc0VkaXRIZWxwZXIuaXNFZGl0YWJsZSk7XG5cblx0XHRpZiAoZWRpdGFibGUpIHtcblx0XHRcdG9EaWFsb2dEYXRhTW9kZWwuc2V0UHJvcGVydHkoYC92YWx1ZXMvJHtkYXRhUHJvcGVydHl9L3Zpc2libGVgLCBlZGl0YWJsZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcGRhdGUgTWFuYWdlZCBPYmplY3QgQW55IGZvciB2aXNpYmlsaXR5IG9mIHRoZSBtYXNzIGVkaXQgZmllbGRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gbU9Ub1VzZSBUaGUgTWFuYWdlZE9iamVjdCBBbnkgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZpc2libGUgdmFsdWUgb2YgdGhlIGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBvRGlhbG9nRGF0YU1vZGVsIE1vZGVsIHRvIGJlIHVzZWQgcnVudGltZS5cblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBGaWVsZCBuYW1lLlxuXHQgKiBAcGFyYW0gdmFsdWVzIFZhbHVlcyBvZiB0aGUgZmllbGQuXG5cdCAqL1xuXHR1cGRhdGVPbkNvbnRleHRDaGFuZ2U6IGZ1bmN0aW9uIChtT1RvVXNlOiBBbnlUeXBlLCBvRGlhbG9nRGF0YU1vZGVsOiBKU09OTW9kZWwsIGRhdGFQcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZXM6IGFueSkge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBtT1RvVXNlLmdldEJpbmRpbmcoXCJhbnlcIik7XG5cblx0XHR2YWx1ZXMub2JqZWN0c0ZvclZpc2liaWxpdHkgPSB2YWx1ZXMub2JqZWN0c0ZvclZpc2liaWxpdHkgfHwgW107XG5cdFx0dmFsdWVzLm9iamVjdHNGb3JWaXNpYmlsaXR5LnB1c2gobU9Ub1VzZSk7XG5cblx0XHRiaW5kaW5nPy5hdHRhY2hDaGFuZ2UoTWFzc0VkaXRIZWxwZXIub25Db250ZXh0RWRpdGFibGVDaGFuZ2UuYmluZChudWxsLCBvRGlhbG9nRGF0YU1vZGVsLCBkYXRhUHJvcGVydHkpKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGJvdW5kIG9iamVjdCB0byBjYWxjdWxhdGUgdGhlIHZpc2liaWxpdHkgb2YgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIEJpbmRpbmcgU3RyaW5nIG9iamVjdC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0aGUgYmluZGluZyB2YWx1ZS5cblx0ICogQHJldHVybnMgVGhlIE1hbmFnZWRPYmplY3QgQW55IHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHZhbHVlIG9mIHRoZSBiaW5kaW5nLlxuXHQgKi9cblx0Z2V0Qm91bmRPYmplY3Q6IGZ1bmN0aW9uIChleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBBbnlUeXBlIHtcblx0XHRjb25zdCBtT1RvVXNlID0gbmV3IEFueSh7IGFueTogZXhwQmluZGluZyB9KTtcblx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRtT1RvVXNlLnNldE1vZGVsKG1vZGVsKTtcblx0XHRtT1RvVXNlLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXG5cdFx0cmV0dXJuIG1PVG9Vc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIEJpbmRpbmcgU3RyaW5nIG9iamVjdC5cblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0aGUgYmluZGluZyB2YWx1ZS5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRnZXRGaWVsZFZpc2libGl0eTogZnVuY3Rpb24gKFxuXHRcdGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRkYXRhUHJvcGVydHk6IHN0cmluZyxcblx0XHR2YWx1ZXM6IGFueSxcblx0XHRjb250ZXh0OiBPRGF0YVY0Q29udGV4dFxuXHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBtT1RvVXNlID0gTWFzc0VkaXRIZWxwZXIuZ2V0Qm91bmRPYmplY3QoZXhwQmluZGluZywgY29udGV4dCk7XG5cdFx0Y29uc3QgaXNDb250ZXh0RWRpdGFibGUgPSBNYXNzRWRpdEhlbHBlci5pc0VkaXRhYmxlKG1PVG9Vc2UpO1xuXG5cdFx0aWYgKCFpc0NvbnRleHRFZGl0YWJsZSkge1xuXHRcdFx0TWFzc0VkaXRIZWxwZXIudXBkYXRlT25Db250ZXh0Q2hhbmdlKG1PVG9Vc2UsIG9EaWFsb2dEYXRhTW9kZWwsIGRhdGFQcm9wZXJ0eSwgdmFsdWVzKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29udGV4dEVkaXRhYmxlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyBhIHJ1bnRpbWUgbW9kZWw6XG5cdCAqID0+IFRoZSBtb2RlbCBjb25zaXN0cyBvZiB2YWx1ZXMgc2hvd24gaW4gdGhlIGNvbWJvQm94IG9mIHRoZSBkaWFsb2cgKExlYXZlIEJsYW5rLCBLZWVwIEV4aXN0aW5nIFZhbHVlcywgb3IgYW55IHByb3BlcnR5IHZhbHVlIGZvciB0aGUgc2VsZWN0ZWQgY29udGV4dCwgZXRjLilcblx0ICogPT4gVGhlIG1vZGVsIHdpbGwgY2FwdHVyZSBydW50aW1lIGNoYW5nZXMgaW4gdGhlIHJlc3VsdHMgcHJvcGVydHkgKHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBjb21ib0JveCkuXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gYURhdGFBcnJheSBBcnJheSBjb250YWluaW5nIGRhdGEgcmVsYXRlZCB0byB0aGUgZGlhbG9nIHVzZWQgYnkgYm90aCB0aGUgc3RhdGljIGFuZCB0aGUgcnVudGltZSBtb2RlbFxuXHQgKiBAcGFyYW0gb0RlZmF1bHRWYWx1ZXMgRGVmYXVsdCB2YWx1ZXMgZnJvbSBpMThuXG5cdCAqIEBwYXJhbSBkaWFsb2dDb250ZXh0IFRyYW5zaWVudCBjb250ZXh0IGZvciBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBUaGUgcnVudGltZSBtb2RlbFxuXHQgKi9cblx0c2V0UnVudGltZU1vZGVsT25EaWFsb2c6IGZ1bmN0aW9uIChhQ29udGV4dHM6IGFueVtdLCBhRGF0YUFycmF5OiBhbnlbXSwgb0RlZmF1bHRWYWx1ZXM6IGFueSwgZGlhbG9nQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRjb25zdCBhVmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IGFVbml0RGF0YTogYW55W10gPSBbXTtcblx0XHRjb25zdCBhUmVzdWx0czogYW55W10gPSBbXTtcblx0XHRjb25zdCB0ZXh0UGF0aHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVJlYWRPbmx5RmllbGRJbmZvOiBhbnlbXSA9IFtdO1xuXG5cdFx0Y29uc3Qgb0RhdGEgPSB7XG5cdFx0XHR2YWx1ZXM6IGFWYWx1ZXMsXG5cdFx0XHR1bml0RGF0YTogYVVuaXREYXRhLFxuXHRcdFx0cmVzdWx0czogYVJlc3VsdHMsXG5cdFx0XHRyZWFkYWJsZVByb3BlcnR5RGF0YTogYVJlYWRPbmx5RmllbGRJbmZvLFxuXHRcdFx0c2VsZWN0ZWRLZXk6IHVuZGVmaW5lZCxcblx0XHRcdHRleHRQYXRoczogdGV4dFBhdGhzLFxuXHRcdFx0bm9GaWVsZHM6IG9EZWZhdWx0VmFsdWVzLm5vRmllbGRzXG5cdFx0fTtcblx0XHRjb25zdCBvRGlhbG9nRGF0YU1vZGVsID0gbmV3IEpTT05Nb2RlbChvRGF0YSk7XG5cdFx0YURhdGFBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChvSW5EYXRhOiBhbnkpIHtcblx0XHRcdGxldCBvVGV4dEluZm87XG5cdFx0XHRsZXQgc1Byb3BlcnR5S2V5O1xuXHRcdFx0bGV0IHNVbml0UHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgb0Rpc3RpbmN0VmFsdWVNYXA6IGFueSA9IHt9O1xuXHRcdFx0Y29uc3Qgb0Rpc3RpbmN0VW5pdE1hcDogYW55ID0ge307XG5cdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkgJiYgb0luRGF0YS5kYXRhUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0XHRjb25zdCBhRmluYWxQYXRoID0gTWFzc0VkaXRIZWxwZXIuaW5pdExhc3RMZXZlbE9mUHJvcGVydHlQYXRoKG9JbkRhdGEuZGF0YVByb3BlcnR5LCBhVmFsdWVzIC8qLCBkaWFsb2dDb250ZXh0ICovKTtcblx0XHRcdFx0Y29uc3QgYVByb3BlcnR5UGF0aHMgPSBvSW5EYXRhLmRhdGFQcm9wZXJ0eS5zcGxpdChcIi9cIik7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdGNvbnN0IHNNdWx0aUxldmVsUGF0aFZhbHVlID0gY29udGV4dC5nZXRPYmplY3Qob0luRGF0YS5kYXRhUHJvcGVydHkpO1xuXHRcdFx0XHRcdHNQcm9wZXJ0eUtleSA9IGAke29JbkRhdGEuZGF0YVByb3BlcnR5fS8ke3NNdWx0aUxldmVsUGF0aFZhbHVlfWA7XG5cdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldICYmIGFGaW5hbFBhdGhbYVByb3BlcnR5UGF0aHNbYVByb3BlcnR5UGF0aHMubGVuZ3RoIC0gMV1dKSB7XG5cdFx0XHRcdFx0XHRvVGV4dEluZm8gPSBNYXNzRWRpdEhlbHBlci5nZXRUZXh0QXJyYW5nZW1lbnRJbmZvKFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGlzcGxheSxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGFGaW5hbFBhdGhbYVByb3BlcnR5UGF0aHNbYVByb3BlcnR5UGF0aHMubGVuZ3RoIC0gMV1dLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiAob1RleHRJbmZvICYmIG9UZXh0SW5mby5mdWxsVGV4dCkgfHwgc011bHRpTGV2ZWxQYXRoVmFsdWUsXG5cdFx0XHRcdFx0XHRcdGtleTogc1Byb3BlcnR5S2V5LFxuXHRcdFx0XHRcdFx0XHR0ZXh0SW5mbzogb1RleHRJbmZvXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0gPSBzTXVsdGlMZXZlbFBhdGhWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gaWYgKE9iamVjdC5rZXlzKG9EaXN0aW5jdFZhbHVlTWFwKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0Ly8gXHRkaWFsb2dDb250ZXh0LnNldFByb3BlcnR5KG9EYXRhLmRhdGFQcm9wZXJ0eSwgc1Byb3BlcnR5S2V5ICYmIG9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0pO1xuXHRcdFx0XHQvLyB9XG5cblx0XHRcdFx0YUZpbmFsUGF0aFthUHJvcGVydHlQYXRoc1thUHJvcGVydHlQYXRocy5sZW5ndGggLSAxXV0udGV4dEluZm8gPSB7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHR2YWx1ZVBhdGg6IG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBvSW5EYXRhLmRpc3BsYXlcblx0XHRcdFx0fTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gfHwgW107XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXSA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXSB8fCBbXTtcblx0XHRcdFx0aWYgKG9JbkRhdGEudW5pdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSA9IGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gfHwgW107XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gPSBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXSB8fCBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0RhdGFPYmplY3QgPSBjb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdHNQcm9wZXJ0eUtleSA9IGAke29JbkRhdGEuZGF0YVByb3BlcnR5fS8ke29EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XX1gO1xuXHRcdFx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiBvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gJiYgIW9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0pIHtcblx0XHRcdFx0XHRcdGlmIChvSW5EYXRhLmlucHV0VHlwZSAhPSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdFx0XHRcdFx0b1RleHRJbmZvID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyhcblx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRpc3BsYXksXG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbnRyeSA9IHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiAob1RleHRJbmZvICYmIG9UZXh0SW5mby5mdWxsVGV4dCkgfHwgb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldLFxuXHRcdFx0XHRcdFx0XHRcdGtleTogc1Byb3BlcnR5S2V5LFxuXHRcdFx0XHRcdFx0XHRcdHRleHRJbmZvOiBvVGV4dEluZm9cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0ucHVzaChlbnRyeSk7XG5cdFx0XHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXS5wdXNoKGVudHJ5KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0gPSBvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChvSW5EYXRhLnVuaXRQcm9wZXJ0eSAmJiBvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0pIHtcblx0XHRcdFx0XHRcdHNVbml0UHJvcGVydHlOYW1lID0gYCR7b0luRGF0YS51bml0UHJvcGVydHl9LyR7b0RhdGFPYmplY3Rbb0luRGF0YS51bml0UHJvcGVydHldfWA7XG5cdFx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdFVuaXRNYXBbc1VuaXRQcm9wZXJ0eU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvSW5EYXRhLmlucHV0VHlwZSAhPSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRvVGV4dEluZm8gPSBNYXNzRWRpdEhlbHBlci5nZXRUZXh0QXJyYW5nZW1lbnRJbmZvKFxuXHRcdFx0XHRcdFx0XHRcdFx0b0luRGF0YS51bml0UHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGlzcGxheSxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHVuaXRFbnRyeSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk6IHNVbml0UHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dEluZm86IG9UZXh0SW5mb1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5wdXNoKHVuaXRFbnRyeSk7XG5cdFx0XHRcdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0ucHVzaCh1bml0RW50cnkpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG9EaXN0aW5jdFVuaXRNYXBbc1VuaXRQcm9wZXJ0eU5hbWVdID0gb0RhdGFPYmplY3Rbb0luRGF0YS51bml0UHJvcGVydHldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS50ZXh0SW5mbyA9IHtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdHZhbHVlUGF0aDogb0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0ZGlzcGxheU1vZGU6IG9JbkRhdGEuZGlzcGxheVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0Rpc3RpbmN0VmFsdWVNYXApLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRleHQuc2V0UHJvcGVydHkob0luRGF0YS5kYXRhUHJvcGVydHksIHNQcm9wZXJ0eUtleSAmJiBvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob0Rpc3RpbmN0VW5pdE1hcCkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGV4dC5zZXRQcm9wZXJ0eShvSW5EYXRhLnVuaXRQcm9wZXJ0eSwgc1VuaXRQcm9wZXJ0eU5hbWUgJiYgb0Rpc3RpbmN0VW5pdE1hcFtzVW5pdFByb3BlcnR5TmFtZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0ZXh0UGF0aHNbb0luRGF0YS5kYXRhUHJvcGVydHldID0gb0luRGF0YS5kZXNjcmlwdGlvblBhdGggPyBbb0luRGF0YS5kZXNjcmlwdGlvblBhdGhdIDogW107XG5cdFx0fSk7XG5cdFx0YURhdGFBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChvSW5EYXRhOiBhbnkpIHtcblx0XHRcdGxldCB2YWx1ZXM6IGFueSA9IHt9O1xuXHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5LmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdFx0Y29uc3Qgc011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlID0gTWFzc0VkaXRIZWxwZXIuZ2V0VmFsdWVGb3JNdWx0aUxldmVsUGF0aChvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgYVZhbHVlcyk7XG5cdFx0XHRcdGlmICghc011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlKSB7XG5cdFx0XHRcdFx0c011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlLnB1c2goeyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYEVtcHR5LyR7b0luRGF0YS5kYXRhUHJvcGVydHl9YCB9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5zZXREZWZhdWx0VmFsdWVzVG9EaWFsb2coc011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlLCBvRGVmYXVsdFZhbHVlcywgb0luRGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFsdWVzID0gc011bHRpTGV2ZWxQcm9wUGF0aFZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmIChhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSkge1xuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldIHx8IFtdO1xuXHRcdFx0XHRNYXNzRWRpdEhlbHBlci5zZXREZWZhdWx0VmFsdWVzVG9EaWFsb2coYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0sIG9EZWZhdWx0VmFsdWVzLCBvSW5EYXRhKTtcblx0XHRcdFx0dmFsdWVzID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldICYmIGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ubGVuZ3RoKSB7XG5cdFx0XHRcdE1hc3NFZGl0SGVscGVyLnNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyhhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLCBvRGVmYXVsdFZhbHVlcywgb0luRGF0YSwgdHJ1ZSk7XG5cdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0udGV4dEluZm8gPSB7fTtcblx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5zZWxlY3RlZEtleSA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goXG5cdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdG9JbkRhdGEudW5pdFByb3BlcnR5XG5cdFx0XHRcdCk7XG5cdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uaW5wdXRUeXBlID0gb0luRGF0YS5pbnB1dFR5cGU7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQob0luRGF0YS5kYXRhUHJvcGVydHkgJiYgYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gJiYgIWFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLmxlbmd0aCkgfHxcblx0XHRcdFx0KG9JbkRhdGEudW5pdFByb3BlcnR5ICYmIGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gJiYgIWFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ubGVuZ3RoKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IGJDbGVhckZpZWxkT3JCbGFua1ZhbHVlRXhpc3RzID1cblx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSAmJlxuXHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnNvbWUoZnVuY3Rpb24gKG9iajogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLnRleHQgPT09IFwiPCBDbGVhciBWYWx1ZXMgPlwiIHx8IG9iai50ZXh0ID09PSBcIjwgTGVhdmUgQmxhbmsgPlwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkgJiYgIWJDbGVhckZpZWxkT3JCbGFua1ZhbHVlRXhpc3RzKSB7XG5cdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0ucHVzaCh7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSwga2V5OiBgRW1wdHkvJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX1gIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGJDbGVhckZpZWxkT3JCbGFua1VuaXRWYWx1ZUV4aXN0cyA9XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSAmJlxuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uc29tZShmdW5jdGlvbiAob2JqOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvYmoudGV4dCA9PT0gXCI8IENsZWFyIFZhbHVlcyA+XCIgfHwgb2JqLnRleHQgPT09IFwiPCBMZWF2ZSBCbGFuayA+XCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvSW5EYXRhLnVuaXRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdGlmICghYkNsZWFyRmllbGRPckJsYW5rVW5pdFZhbHVlRXhpc3RzKSB7XG5cdFx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsXG5cdFx0XHRcdFx0XHRcdGtleTogYEVtcHR5LyR7b0luRGF0YS51bml0UHJvcGVydHl9YFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0udGV4dEluZm8gPSB7fTtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnNlbGVjdGVkS2V5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChcblx0XHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRcdG9JbkRhdGEudW5pdFByb3BlcnR5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmlucHV0VHlwZSA9IG9JbkRhdGEuaW5wdXRUeXBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkgJiYgdHlwZW9mIG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5ID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0XHRhUmVhZE9ubHlGaWVsZEluZm8ucHVzaCh7IHByb3BlcnR5OiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgdmFsdWU6IG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5LCB0eXBlOiBcIkRlZmF1bHRcIiB9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5ICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQxICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQyXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSByZWZhY3RvcmVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUmVhZE9ubHlFeHByZXNzaW9uIGNoYW5nZVxuXHRcdFx0XHRhUmVhZE9ubHlGaWVsZEluZm8ucHVzaCh7XG5cdFx0XHRcdFx0cHJvcGVydHk6IG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aDogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDEucGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXS5vcGVyYW5kMi52YWx1ZSxcblx0XHRcdFx0XHR0eXBlOiBcIlBhdGhcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0dGluZyB2aXNiaWxpdHkgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0XHRcdGlmIChvSW5EYXRhLmVkaXRNb2RlKSB7XG5cdFx0XHRcdHZhbHVlcy52aXNpYmxlID1cblx0XHRcdFx0XHRvSW5EYXRhLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FZGl0YWJsZSB8fFxuXHRcdFx0XHRcdGFDb250ZXh0cy5zb21lKFxuXHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuZ2V0RmllbGRWaXNpYmxpdHkuYmluZChcblx0XHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIsXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZWRpdE1vZGUsXG5cdFx0XHRcdFx0XHRcdG9EaWFsb2dEYXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHR2YWx1ZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWVzLnZpc2libGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dmFsdWVzLnNlbGVjdGVkS2V5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChhQ29udGV4dHMsIG9JbkRhdGEuZGF0YVByb3BlcnR5KTtcblx0XHRcdHZhbHVlcy5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdHZhbHVlcy51bml0UHJvcGVydHkgPSBvSW5EYXRhLnVuaXRQcm9wZXJ0eTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBvRGlhbG9nRGF0YU1vZGVsO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0cmFuc2llbnQgY29udGV4dCBmb3IgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgVGFibGUuXG5cdCAqIEBwYXJhbSBkaWFsb2cgTWFzcyBFZGl0IERpYWxvZy5cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZGlhbG9nLlxuXHQgKi9cblx0Z2V0RGlhbG9nQ29udGV4dDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgZGlhbG9nPzogRGlhbG9nKTogT0RhdGFWNENvbnRleHQge1xuXHRcdGxldCB0cmFuc0N0eCA9IGRpYWxvZz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghdHJhbnNDdHgpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXHRcdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB0YWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRjb25zdCB0cmFuc2llbnRMaXN0QmluZGluZyA9IG1vZGVsLmJpbmRMaXN0KGxpc3RCaW5kaW5nLmdldFBhdGgoKSwgbGlzdEJpbmRpbmcuZ2V0Q29udGV4dCgpLCBbXSwgW10sIHtcblx0XHRcdFx0JCR1cGRhdGVHcm91cElkOiBcInN1Ym1pdExhdGVyXCJcblx0XHRcdH0pO1xuXHRcdFx0KHRyYW5zaWVudExpc3RCaW5kaW5nIGFzIGFueSkucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvKiAqL1xuXHRcdFx0fTtcblx0XHRcdHRyYW5zQ3R4ID0gdHJhbnNpZW50TGlzdEJpbmRpbmcuY3JlYXRlKHt9LCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJhbnNDdHg7XG5cdH0sXG5cblx0b25EaWFsb2dPcGVuOiBmdW5jdGlvbiAoZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGZpZWxkc0luZm9Nb2RlbCA9IHNvdXJjZS5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0ZmllbGRzSW5mb01vZGVsLnNldFByb3BlcnR5KFwiL2lzT3BlblwiLCB0cnVlKTtcblx0fSxcblxuXHRjbG9zZURpYWxvZzogZnVuY3Rpb24gKG9EaWFsb2c6IGFueSkge1xuXHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRvRGlhbG9nLmRlc3Ryb3koKTtcblx0fSxcblxuXHRtZXNzYWdlSGFuZGxpbmdGb3JNYXNzRWRpdDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9UYWJsZTogVGFibGUsXG5cdFx0YUNvbnRleHRzOiBhbnksXG5cdFx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRcdG9JbkRpYWxvZzogYW55LFxuXHRcdGFSZXN1bHRzOiBhbnksXG5cdFx0ZXJyb3JDb250ZXh0czogYW55XG5cdCkge1xuXHRcdGNvbnN0IERyYWZ0U3RhdHVzID0gRkVMaWJyYXJ5LkRyYWZ0U3RhdHVzO1xuXHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwiZ2V0Qm91bmRNZXNzYWdlc0Zvck1hc3NFZGl0XCIsIHRydWUpO1xuXHRcdG9Db250cm9sbGVyLm1lc3NhZ2VIYW5kbGVyLnNob3dNZXNzYWdlcyh7XG5cdFx0XHRvbkJlZm9yZVNob3dNZXNzYWdlOiBmdW5jdGlvbiAobWVzc2FnZXM6IGFueSwgc2hvd01lc3NhZ2VQYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdFx0Ly9tZXNzYWdlcy5jb25jYXRlbmF0ZShtZXNzYWdlSGFuZGxpbmcuZ2V0TWVzc2FnZXModHJ1ZSwgdHJ1ZSkpO1xuXHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuZm5HZXRNZXNzYWdlU3VidGl0bGUgPSBtZXNzYWdlSGFuZGxpbmcuc2V0TWVzc2FnZVN1YnRpdGxlLmJpbmQoe30sIG9UYWJsZSwgYUNvbnRleHRzKTtcblx0XHRcdFx0Y29uc3QgdW5ib3VuZEVycm9yczogYW55W10gPSBbXTtcblx0XHRcdFx0bWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0aWYgKCFtZXNzYWdlLmdldFRhcmdldCgpKSB7XG5cdFx0XHRcdFx0XHR1bmJvdW5kRXJyb3JzLnB1c2gobWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoID4gMCAmJiBlcnJvckNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRjb25zdCBzdWNjZXNzVG9hc3QgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIik7XG5cdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coc3VjY2Vzc1RvYXN0KTtcblx0XHRcdFx0fSBlbHNlIGlmIChlcnJvckNvbnRleHRzLmxlbmd0aCA8IChvVGFibGUgYXMgYW55KS5nZXRTZWxlY3RlZENvbnRleHRzKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVycm9yQ29udGV4dHMubGVuZ3RoID09PSAob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLmxlbmd0aCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmVkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChvQ29udHJvbGxlci5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiYgdW5ib3VuZEVycm9ycy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VCb3ggPSBmYWxzZTtcblx0XHRcdFx0XHRzaG93TWVzc2FnZVBhcmFtZXRlcnMuc2hvd01lc3NhZ2VEaWFsb2cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmIChvSW5EaWFsb2cuaXNPcGVuKCkpIHtcblx0XHRcdE1hc3NFZGl0SGVscGVyLmNsb3NlRGlhbG9nKG9JbkRpYWxvZyk7XG5cdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0KT8uc2V0UHJvcGVydHkoXCJza2lwUGF0Y2hIYW5kbGVyc1wiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcImdldEJvdW5kTWVzc2FnZXNGb3JNYXNzRWRpdFwiLCBmYWxzZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIHNpZGUgZWZmZWN0cyBtYXAgZnJvbSBzaWRlIGVmZmVjdHMgaWRzKHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgZW50aXR5IHR5cGUgYW5kIHF1YWxpZmllcikuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRW50aXR5U2V0Q29udGV4dFxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50XG5cdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHQgKiBAcGFyYW0gYVJlc3VsdHNcblx0ICogQHJldHVybnMgU2lkZSBlZmZlY3QgbWFwIHdpdGggZGF0YS5cblx0ICovXG5cdGdldFNpZGVFZmZlY3REYXRhRm9yS2V5OiBmdW5jdGlvbiAob0VudGl0eVNldENvbnRleHQ6IGFueSwgYXBwQ29tcG9uZW50OiBhbnksIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgYVJlc3VsdHM6IGFueSkge1xuXHRcdGNvbnN0IHNPd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IGJhc2VTaWRlRWZmZWN0c01hcEFycmF5OiBhbnkgPSB7fTtcblxuXHRcdGFSZXN1bHRzLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzUGF0aCA9IHJlc3VsdC5rZXlWYWx1ZTtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKHNPd25lckVudGl0eVR5cGUsIHJlc3VsdC5wcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZSA/PyBcIlwiKSA/PyBbXTtcblx0XHRcdGJhc2VTaWRlRWZmZWN0c01hcEFycmF5W3NQYXRoXSA9IG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKGZpZWxkR3JvdXBJZHMpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBiYXNlU2lkZUVmZmVjdHNNYXBBcnJheTtcblx0fSxcblxuXHQvKipcblx0ICogR2l2ZSB0aGUgZW50aXR5IHR5cGUgZm9yIGEgZ2l2ZW4gc3BhdGggZm9yIGUuZy5SZXF1ZXN0ZWRRdWFudGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHNQYXRoXG5cdCAqIEBwYXJhbSBzRW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBPYmplY3QgaGF2aW5nIGVudGl0eSwgc3BhdGggYW5kIG5hdmlnYXRpb24gcGF0aC5cblx0ICovXG5cdGZuR2V0UGF0aEZvclNvdXJjZVByb3BlcnR5OiBmdW5jdGlvbiAoc1BhdGg6IGFueSwgc0VudGl0eVR5cGU6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdFx0Ly8gaWYgdGhlIHByb3BlcnR5IHBhdGggaGFzIGEgbmF2aWdhdGlvbiwgZ2V0IHRoZSB0YXJnZXQgZW50aXR5IHR5cGUgb2YgdGhlIG5hdmlnYXRpb25cblx0XHRjb25zdCBzTmF2aWdhdGlvblBhdGggPVxuXHRcdFx0XHRzUGF0aC5pbmRleE9mKFwiL1wiKSA+IDAgPyBcIi9cIiArIHNFbnRpdHlUeXBlICsgXCIvXCIgKyBzUGF0aC5zdWJzdHIoMCwgc1BhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyBcIkBzYXB1aS5uYW1lXCIgOiBmYWxzZSxcblx0XHRcdHBPd25lckVudGl0eSA9ICFzTmF2aWdhdGlvblBhdGggPyBQcm9taXNlLnJlc29sdmUoc0VudGl0eVR5cGUpIDogb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNOYXZpZ2F0aW9uUGF0aCk7XG5cdFx0c1BhdGggPSBzTmF2aWdhdGlvblBhdGggPyBzUGF0aC5zdWJzdHIoc1BhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgOiBzUGF0aDtcblx0XHRyZXR1cm4geyBzUGF0aCwgcE93bmVyRW50aXR5LCBzTmF2aWdhdGlvblBhdGggfTtcblx0fSxcblxuXHRmbkdldEVudGl0eVR5cGVPZk93bmVyOiBmdW5jdGlvbiAob01ldGFNb2RlbDogYW55LCBiYXNlTmF2UGF0aDogc3RyaW5nLCBvRW50aXR5U2V0Q29udGV4dDogYW55LCB0YXJnZXRFbnRpdHk6IHN0cmluZywgYVRhcmdldHM6IGFueSkge1xuXHRcdGNvbnN0IG93bmVyRW50aXR5VHlwZSA9IG9FbnRpdHlTZXRDb250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdFx0Y29uc3QgeyAkVHlwZTogcE93bmVyLCAkUGFydG5lcjogb3duZXJOYXZQYXRoIH0gPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvRW50aXR5U2V0Q29udGV4dH0vJHtiYXNlTmF2UGF0aH1gKTsgLy8gbmF2IHBhdGhcblx0XHRpZiAob3duZXJOYXZQYXRoKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlPYmpPZk93bmVyUGFydG5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtwT3duZXJ9LyR7b3duZXJOYXZQYXRofWApO1xuXHRcdFx0aWYgKGVudGl0eU9iak9mT3duZXJQYXJ0bmVyKSB7XG5cdFx0XHRcdGNvbnN0IGVudGl0eVR5cGVPZk93bmVyUGFydG5lciA9IGVudGl0eU9iak9mT3duZXJQYXJ0bmVyW1wiJFR5cGVcIl07XG5cdFx0XHRcdC8vIGlmIHRoZSBlbnRpdHkgdHlwZXMgZGVmZXIsIHRoZW4gYmFzZSBuYXYgcGF0aCBpcyBub3QgZnJvbSBvd25lclxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZU9mT3duZXJQYXJ0bmVyICE9PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHQvLyBpZiB0YXJnZXQgUHJvcCBpcyBub3QgZnJvbSBvd25lciwgd2UgYWRkIGl0IGFzIGltbWVkaWF0ZVxuXHRcdFx0XHRcdGFUYXJnZXRzLnB1c2godGFyZ2V0RW50aXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyAkUGFydG5lciBhdHRyaWJ1dGUsIGl0IG1heSBub3QgYmUgZnJvbSBvd25lclxuXHRcdFx0YVRhcmdldHMucHVzaCh0YXJnZXRFbnRpdHkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhcmdldHM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdpdmUgdGFyZ2V0cyB0aGF0IGFyZSBpbW1lZGlhdGUgb3IgZGVmZXJyZWQgYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlIG9mIHRoYXQgdGFyZ2V0LlxuXHQgKlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNEYXRhXG5cdCAqIEBwYXJhbSBvRW50aXR5U2V0Q29udGV4dFxuXHQgKiBAcGFyYW0gc0VudGl0eVR5cGVcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxcblx0ICogQHJldHVybnMgVGFyZ2V0cyB0byByZXF1ZXN0IHNpZGUgZWZmZWN0cy5cblx0ICovXG5cdGZuR2V0VGFyZ2V0c0Zvck1hc3NFZGl0OiBmdW5jdGlvbiAoc2lkZUVmZmVjdHNEYXRhOiBPRGF0YVNpZGVFZmZlY3RzVHlwZSwgb0VudGl0eVNldENvbnRleHQ6IGFueSwgc0VudGl0eVR5cGU6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdFx0Y29uc3QgeyB0YXJnZXRQcm9wZXJ0aWVzOiBhVGFyZ2V0UHJvcGVydGllcywgdGFyZ2V0RW50aXRpZXM6IGFUYXJnZXRFbnRpdGllcyB9ID0gc2lkZUVmZmVjdHNEYXRhO1xuXHRcdGNvbnN0IGFQcm9taXNlczogYW55ID0gW107XG5cdFx0bGV0IGFUYXJnZXRzOiBhbnkgPSBbXTtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXG5cdFx0aWYgKHNFbnRpdHlUeXBlID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdC8vIGlmIFNhbGVzT3JkciBJdGVtXG5cdFx0XHRhVGFyZ2V0RW50aXRpZXM/LmZvckVhY2goKHRhcmdldEVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdHRhcmdldEVudGl0eSA9IHRhcmdldEVudGl0eVtcIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCJdO1xuXHRcdFx0XHRsZXQgYmFzZU5hdlBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKHRhcmdldEVudGl0eS5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRiYXNlTmF2UGF0aCA9IHRhcmdldEVudGl0eS5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YmFzZU5hdlBhdGggPSB0YXJnZXRFbnRpdHk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YVRhcmdldHMgPSBNYXNzRWRpdEhlbHBlci5mbkdldEVudGl0eVR5cGVPZk93bmVyKG9NZXRhTW9kZWwsIGJhc2VOYXZQYXRoLCBvRW50aXR5U2V0Q29udGV4dCwgdGFyZ2V0RW50aXR5LCBhVGFyZ2V0cyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoYVRhcmdldFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRhVGFyZ2V0UHJvcGVydGllcy5mb3JFYWNoKCh0YXJnZXRQcm9wOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3QgeyBwT3duZXJFbnRpdHkgfSA9IE1hc3NFZGl0SGVscGVyLmZuR2V0UGF0aEZvclNvdXJjZVByb3BlcnR5KHRhcmdldFByb3AsIHNFbnRpdHlUeXBlLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0YVByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0cE93bmVyRW50aXR5LnRoZW4oKHJlc3VsdEVudGl0eTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBpZiBlbnRpdHkgaXMgU2FsZXNPcmRlckl0ZW0sIFRhcmdldCBQcm9wZXJ0eSBpcyBmcm9tIEl0ZW1zIHRhYmxlXG5cdFx0XHRcdFx0XHRpZiAocmVzdWx0RW50aXR5ID09PSBvd25lckVudGl0eVR5cGUpIHtcblx0XHRcdFx0XHRcdFx0YVRhcmdldHMucHVzaCh0YXJnZXRQcm9wKTsgLy8gZ2V0IGltbWVkaWF0ZSB0YXJnZXRzXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhcmdldFByb3AuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJhc2VOYXZQYXRoID0gdGFyZ2V0UHJvcC5zcGxpdChcIi9cIilbMF07XG5cdFx0XHRcdFx0XHRcdGFUYXJnZXRzID0gTWFzc0VkaXRIZWxwZXIuZm5HZXRFbnRpdHlUeXBlT2ZPd25lcihcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdGJhc2VOYXZQYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9FbnRpdHlTZXRDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdHRhcmdldFByb3AsXG5cdFx0XHRcdFx0XHRcdFx0YVRhcmdldHNcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoYVRhcmdldHMpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YVByb21pc2VzLnB1c2goUHJvbWlzZS5yZXNvbHZlKGFUYXJnZXRzKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGluIHRoZSBnaXZlbiBzaWRlIEVmZmVjdHMgT2JqLCBpZiBfSXRlbSBpcyBzZXQgYXMgVGFyZ2V0IEVudGl0eSBmb3IgYW55IHNpZGUgRWZmZWN0cyBvblxuXHQgKiBvdGhlciBlbnRpdHkgc2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gc2lkZUVmZmVjdHNNYXBcblx0ICogQHBhcmFtIG9FbnRpdHlTZXRDb250ZXh0XG5cdCAqIEByZXR1cm5zIExlbmd0aCBvZiBzaWRlRWZmZWN0c0FycmF5IHdoZXJlIGN1cnJlbnQgRW50aXR5IGlzIHNldCBhcyBUYXJnZXQgRW50aXR5XG5cdCAqL1xuXHRjaGVja0lmRW50aXR5RXhpc3RzQXNUYXJnZXRFbnRpdHk6IChcblx0XHRzaWRlRWZmZWN0c01hcDogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IHwgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSxcblx0XHRvRW50aXR5U2V0Q29udGV4dDogQ29udGV4dFxuXHQpID0+IHtcblx0XHRjb25zdCBvd25lckVudGl0eVR5cGUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQcm9wZXJ0eShcIiRUeXBlXCIpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzT25PdGhlckVudGl0eTogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSA9IE9iamVjdC52YWx1ZXMoc2lkZUVmZmVjdHNNYXApLmZpbHRlcihcblx0XHRcdChvYmo6IE1hc3NFZGl0RmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvYmoubmFtZS5pbmRleE9mKG93bmVyRW50aXR5VHlwZSkgPT0gLTE7XG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBvRW50aXR5U2V0Q29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIvXCIpLnBvcCgpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldCA9IHNpZGVFZmZlY3RzT25PdGhlckVudGl0eS5maWx0ZXIoKG9iajogTWFzc0VkaXRGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHRhcmdldEVudGl0aWVzQXJyYXk6IFNpZGVFZmZlY3RzRW50aXR5VHlwZVtdIHwgdW5kZWZpbmVkID0gb2JqLnNpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzO1xuXHRcdFx0cmV0dXJuIHRhcmdldEVudGl0aWVzQXJyYXk/LmZpbHRlcigoaW5uZXJPYmo6IFNpZGVFZmZlY3RzRW50aXR5VHlwZSkgPT4gaW5uZXJPYmpbXCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aFwiXSA9PT0gZW50aXR5U2V0TmFtZSlcblx0XHRcdFx0Lmxlbmd0aFxuXHRcdFx0XHQ/IG9ialxuXHRcdFx0XHQ6IGZhbHNlO1xuXHRcdH0pO1xuXHRcdHJldHVybiBzaWRlRWZmZWN0c1dpdGhDdXJyZW50RW50aXR5QXNUYXJnZXQubGVuZ3RoO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBVcG9uIHVwZGF0aW5nIHRoZSBmaWVsZCwgYXJyYXkgb2YgaW1tZWRpYXRlIGFuZCBkZWZlcnJlZCBzaWRlIGVmZmVjdHMgZm9yIHRoYXQgZmllbGQgYXJlIGNyZWF0ZWQuXG5cdCAqIElmIHRoZXJlIGFyZSBhbnkgZmFpbGVkIHNpZGUgZWZmZWN0cyBmb3IgdGhhdCBjb250ZXh0LCB0aGV5IHdpbGwgYWxzbyBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBtYXAuXG5cdCAqIElmIHRoZSBmaWVsZCBoYXMgdGV4dCBhc3NvY2lhdGVkIHdpdGggaXQsIHRoZW4gYWRkIGl0IHRvIHJlcXVlc3Qgc2lkZSBlZmZlY3RzLlxuXHQgKlxuXHQgKiBAcGFyYW0gbVBhcmFtc1xuXHQgKiBAcGFyYW0gbVBhcmFtcy5vQ29udHJvbGxlciBDb250cm9sbGVyXG5cdCAqIEBwYXJhbSBtUGFyYW1zLm9GaWVsZFByb21pc2UgUHJvbWlzZSB0byB1cGRhdGUgZmllbGRcblx0ICogQHBhcmFtIG1QYXJhbXMuc2lkZUVmZmVjdE1hcCBTaWRlRWZmZWN0c01hcCBmb3IgdGhlIGZpZWxkXG5cdCAqIEBwYXJhbSBtUGFyYW1zLnRleHRQYXRocyBUZXh0UGF0aHMgb2YgdGhlIGZpZWxkIGlmIGFueVxuXHQgKiBAcGFyYW0gbVBhcmFtcy5ncm91cElkIEdyb3VwIElkIHRvIHVzZWQgdG8gZ3JvdXAgcmVxdWVzdHNcblx0ICogQHBhcmFtIG1QYXJhbXMua2V5IEtleVZhbHVlIG9mIHRoZSBmaWVsZFxuXHQgKiBAcGFyYW0gbVBhcmFtcy5vRW50aXR5U2V0Q29udGV4dCBFbnRpdHlTZXRjb250ZXh0XG5cdCAqIEBwYXJhbSBtUGFyYW1zLm9NZXRhTW9kZWwgTWV0YW1vZGVsIGRhdGFcblx0ICogQHBhcmFtIG1QYXJhbXMuc2VsZWN0ZWRDb250ZXh0IFNlbGVjdGVkIHJvdyBjb250ZXh0XG5cdCAqIEBwYXJhbSBtUGFyYW1zLmRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lIERlZmVycmVkIHRhcmdldHMgZGF0YVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIGZvciBhbGwgaW1tZWRpYXRlbHkgcmVxdWVzdGVkIHNpZGUgZWZmZWN0cy5cblx0ICovXG5cdGhhbmRsZU1hc3NFZGl0RmllbGRVcGRhdGVBbmRSZXF1ZXN0U2lkZUVmZmVjdHM6IGFzeW5jIGZ1bmN0aW9uIChtUGFyYW1zOiBEYXRhVG9VcGRhdGVGaWVsZEFuZFNpZGVFZmZlY3RzVHlwZSkge1xuXHRcdGNvbnN0IHtcblx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0b0ZpZWxkUHJvbWlzZSxcblx0XHRcdHNpZGVFZmZlY3RzTWFwLFxuXHRcdFx0dGV4dFBhdGhzLFxuXHRcdFx0Z3JvdXBJZCxcblx0XHRcdGtleSxcblx0XHRcdG9FbnRpdHlTZXRDb250ZXh0LFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZVxuXHRcdH0gPSBtUGFyYW1zO1xuXHRcdGNvbnN0IGltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvbWlzZXMgPSBbb0ZpZWxkUHJvbWlzZV07XG5cdFx0Y29uc3Qgb3duZXJFbnRpdHlUeXBlID0gb0VudGl0eVNldENvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sbGVyLmdldFZpZXcoKSk7XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cblx0XHRjb25zdCBpc1NpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldCA9IE1hc3NFZGl0SGVscGVyLmNoZWNrSWZFbnRpdHlFeGlzdHNBc1RhcmdldEVudGl0eShzaWRlRWZmZWN0c01hcCwgb0VudGl0eVNldENvbnRleHQpO1xuXG5cdFx0aWYgKHNpZGVFZmZlY3RzTWFwKSB7XG5cdFx0XHRjb25zdCBhbGxFbnRpdHlUeXBlc1dpdGhRdWFsaWZpZXIgPSBPYmplY3Qua2V5cyhzaWRlRWZmZWN0c01hcCk7XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c0RhdGFGb3JGaWVsZDogYW55ID0gT2JqZWN0LnZhbHVlcyhzaWRlRWZmZWN0c01hcCk7XG5cblx0XHRcdGNvbnN0IG1WaXNpdGVkU2lkZUVmZmVjdHM6IGFueSA9IHt9O1xuXHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVba2V5XSA9IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIGRhdGFdIG9mIHNpZGVFZmZlY3RzRGF0YUZvckZpZWxkLmVudHJpZXMoKSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlUeXBlV2l0aFF1YWxpZmllciA9IGFsbEVudGl0eVR5cGVzV2l0aFF1YWxpZmllcltpbmRleF07XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gZW50aXR5VHlwZVdpdGhRdWFsaWZpZXIuc3BsaXQoXCIjXCIpWzBdO1xuXHRcdFx0XHRjb25zdCBvQ29udGV4dDogYW55ID0gb0NvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldENvbnRleHRGb3JTaWRlRWZmZWN0cyhvU2VsZWN0ZWRDb250ZXh0LCBzRW50aXR5VHlwZSk7XG5cdFx0XHRcdGRhdGEuY29udGV4dCA9IG9Db250ZXh0O1xuXG5cdFx0XHRcdGNvbnN0IGFsbEZhaWxlZFNpZGVFZmZlY3RzID0gb0NvbnRyb2xsZXIuX3NpZGVFZmZlY3RzLmdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpO1xuXHRcdFx0XHRjb25zdCBhRmFpbGVkU2lkZUVmZmVjdHMgPSBhbGxGYWlsZWRTaWRlRWZmZWN0c1tvQ29udGV4dC5nZXRQYXRoKCldO1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2lkZUVmZmVjdHMudW5yZWdpc3RlckZhaWxlZFNpZGVFZmZlY3RzRm9yQUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRsZXQgc2lkZUVmZmVjdHNGb3JDdXJyZW50Q29udGV4dCA9IFtkYXRhLnNpZGVFZmZlY3RzXTtcblx0XHRcdFx0c2lkZUVmZmVjdHNGb3JDdXJyZW50Q29udGV4dCA9XG5cdFx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzICYmIGFGYWlsZWRTaWRlRWZmZWN0cy5sZW5ndGhcblx0XHRcdFx0XHRcdD8gc2lkZUVmZmVjdHNGb3JDdXJyZW50Q29udGV4dC5jb25jYXQoYUZhaWxlZFNpZGVFZmZlY3RzKVxuXHRcdFx0XHRcdFx0OiBzaWRlRWZmZWN0c0ZvckN1cnJlbnRDb250ZXh0O1xuXHRcdFx0XHRtVmlzaXRlZFNpZGVFZmZlY3RzW29Db250ZXh0XSA9IHt9O1xuXHRcdFx0XHRmb3IgKGNvbnN0IGFTaWRlRWZmZWN0IG9mIHNpZGVFZmZlY3RzRm9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0XHRpZiAoIW1WaXNpdGVkU2lkZUVmZmVjdHNbb0NvbnRleHRdLmhhc093blByb3BlcnR5KGFTaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdG1WaXNpdGVkU2lkZUVmZmVjdHNbb0NvbnRleHRdW2FTaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0bGV0IGFJbW1lZGlhdGVUYXJnZXRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRhbGxUYXJnZXRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uTmFtZTogU3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBmbkdldEltbWVkaWF0ZVRhcmdldHNBbmRBY3Rpb25zID0gYXN5bmMgZnVuY3Rpb24gKG1TaWRlRWZmZWN0OiBPRGF0YVNpZGVFZmZlY3RzVHlwZSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB7IHRhcmdldFByb3BlcnRpZXM6IGFUYXJnZXRQcm9wZXJ0aWVzLCB0YXJnZXRFbnRpdGllczogYVRhcmdldEVudGl0aWVzIH0gPSBtU2lkZUVmZmVjdDtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2lkZUVmZmVjdEVudGl0eVR5cGUgPSBtU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRzQXJyYXlGb3JBbGxQcm9wZXJ0aWVzID0gYXdhaXQgTWFzc0VkaXRIZWxwZXIuZm5HZXRUYXJnZXRzRm9yTWFzc0VkaXQoXG5cdFx0XHRcdFx0XHRcdFx0bVNpZGVFZmZlY3QsXG5cdFx0XHRcdFx0XHRcdFx0b0VudGl0eVNldENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdEVudGl0eVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0b01ldGFNb2RlbFxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRhSW1tZWRpYXRlVGFyZ2V0cyA9IHRhcmdldHNBcnJheUZvckFsbFByb3BlcnRpZXNbMF07XG5cdFx0XHRcdFx0XHRcdGFsbFRhcmdldHMgPSAoYVRhcmdldFByb3BlcnRpZXMgfHwgW10pLmNvbmNhdCgoYVRhcmdldEVudGl0aWVzIGFzIGFueVtdKSB8fCBbXSk7XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gbVNpZGVFZmZlY3QudHJpZ2dlckFjdGlvbjtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYURlZmVycmVkVGFyZ2V0cyA9IGFsbFRhcmdldHMuZmlsdGVyKCh0YXJnZXQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAhYUltbWVkaWF0ZVRhcmdldHMuaW5jbHVkZXModGFyZ2V0KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVba2V5XVttU2lkZUVmZmVjdC5mdWxseVF1YWxpZmllZE5hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRcdGFUYXJnZXRzOiBhRGVmZXJyZWRUYXJnZXRzLFxuXHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0OiBvQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRtU2lkZUVmZmVjdFxuXHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIGlmIGVudGl0eSBpcyBvdGhlciB0aGFuIGl0ZW1zIHRhYmxlIHRoZW4gYWN0aW9uIGlzIGRlZmVyZWRcblx0XHRcdFx0XHRcdFx0aWYgKGFjdGlvbk5hbWUgJiYgc2lkZUVmZmVjdEVudGl0eVR5cGUgPT09IG93bmVyRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIHN0YXRpYyBhY3Rpb24gaXMgb24gY29sbGVjdGlvbiwgc28gd2UgZGVmZXIgaXQsIGVsc2UgYWRkIHRvIGltbWVkaWF0ZSByZXF1ZXN0cyBhcnJheVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzU3RhdGljQWN0aW9uID0gVGFibGVIZWxwZXIuX2lzU3RhdGljQWN0aW9uKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHthY3Rpb25OYW1lfWApLCBhY3Rpb25OYW1lKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWlzU3RhdGljQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyQWN0aW9uTmFtZSA9IGFjdGlvbk5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lW2tleV1bbVNpZGVFZmZlY3QuZnVsbHlRdWFsaWZpZWROYW1lXVtcIlRyaWdnZXJBY3Rpb25cIl0gPSBhY3Rpb25OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZVtrZXldW21TaWRlRWZmZWN0LmZ1bGx5UXVhbGlmaWVkTmFtZV1bXCJUcmlnZ2VyQWN0aW9uXCJdID0gYWN0aW9uTmFtZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChpc1NpZGVFZmZlY3RzV2l0aEN1cnJlbnRFbnRpdHlBc1RhcmdldCkge1xuXHRcdFx0XHRcdFx0XHRcdGFJbW1lZGlhdGVUYXJnZXRzID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRhVGFyZ2V0czogYUltbWVkaWF0ZVRhcmdldHMsXG5cdFx0XHRcdFx0XHRcdFx0VHJpZ2dlckFjdGlvbjogdHJpZ2dlckFjdGlvbk5hbWVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpbW1lZGlhdGVTaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoYVNpZGVFZmZlY3QsIG9Db250ZXh0LCBncm91cElkLCBmbkdldEltbWVkaWF0ZVRhcmdldHNBbmRBY3Rpb25zKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHRleHRQYXRocz8uW2tleV0gJiYgdGV4dFBhdGhzW2tleV0ubGVuZ3RoKSB7XG5cdFx0XHRpbW1lZGlhdGVTaWRlRWZmZWN0c1Byb21pc2VzLnB1c2gob1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHModGV4dFBhdGhzW2tleV0sIG9TZWxlY3RlZENvbnRleHQsIGdyb3VwSWQpKTtcblx0XHR9XG5cdFx0cmV0dXJuIChQcm9taXNlIGFzIGFueSkuYWxsU2V0dGxlZChpbW1lZGlhdGVTaWRlRWZmZWN0c1Byb21pc2VzKTtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIFRhYmxlXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgQ29udHJvbGxlciBmb3IgdGhlIHZpZXdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZGlhbG9nLlxuXHQgKi9cblx0Y3JlYXRlRGlhbG9nOiBhc3luYyBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBhbnlbXSwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBzRnJhZ21lbnROYW1lID0gXCJzYXAvZmUvY29yZS9jb250cm9scy9tYXNzRWRpdC9NYXNzRWRpdERpYWxvZ1wiLFxuXHRcdFx0YURhdGFBcnJheTogYW55W10gPSBbXSxcblx0XHRcdG9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0XHRvRGVmYXVsdFZhbHVlcyA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRUZXh0c0ZvckRpYWxvZyhvUmVzb3VyY2VCdW5kbGUsIGFDb250ZXh0cy5sZW5ndGgsIG9UYWJsZSksXG5cdFx0XHRvRGF0YUZpZWxkTW9kZWwgPSBNYXNzRWRpdEhlbHBlci5wcmVwYXJlRGF0YUZvckRpYWxvZyhvVGFibGUsIGFDb250ZXh0cywgYURhdGFBcnJheSksXG5cdFx0XHRkaWFsb2dDb250ZXh0ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGlhbG9nQ29udGV4dChvVGFibGUpLFxuXHRcdFx0b0RpYWxvZ0RhdGFNb2RlbCA9IE1hc3NFZGl0SGVscGVyLnNldFJ1bnRpbWVNb2RlbE9uRGlhbG9nKGFDb250ZXh0cywgYURhdGFBcnJheSwgb0RlZmF1bHRWYWx1ZXMsIGRpYWxvZ0NvbnRleHQpLFxuXHRcdFx0bW9kZWwgPSBvVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLFxuXHRcdFx0bWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRpdGVtc01vZGVsID0gbmV3IFRlbXBsYXRlTW9kZWwob0RhdGFGaWVsZE1vZGVsLmdldERhdGEoKSwgbWV0YU1vZGVsKTtcblxuXHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXG5cdFx0Y29uc3Qgb0NyZWF0ZWRGcmFnbWVudCA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShcblx0XHRcdFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKFxuXHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRkYXRhRmllbGRNb2RlbDogaXRlbXNNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0XHRtZXRhTW9kZWw6IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiksXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1ldGFNb2RlbC5nZXRNZXRhUGF0aChkaWFsb2dDb250ZXh0LmdldFBhdGgoKSkpXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdGRhdGFGaWVsZE1vZGVsOiBpdGVtc01vZGVsLFxuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBtZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogbWV0YU1vZGVsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHQpXG5cdFx0KTtcblx0XHRjb25zdCBvRGlhbG9nQ29udGVudCA9IGF3YWl0IEZyYWdtZW50LmxvYWQoeyBkZWZpbml0aW9uOiBvQ3JlYXRlZEZyYWdtZW50IH0pO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdHRpdGxlOiBvRGVmYXVsdFZhbHVlcy5tYXNzRWRpdFRpdGxlLFxuXHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50IGFzIGFueV0sXG5cdFx0XHRhZnRlck9wZW46IE1hc3NFZGl0SGVscGVyLm9uRGlhbG9nT3Blbixcblx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogTWFzc0VkaXRIZWxwZXIuaGVscGVycy5nZXRFeHBCaW5kaW5nRm9yQXBwbHlCdXR0b25UeHQob0RlZmF1bHRWYWx1ZXMsIG9EYXRhRmllbGRNb2RlbC5nZXRPYmplY3QoXCIvXCIpKSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHByZXNzOiBhc3luYyBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcInNraXBQYXRjaEhhbmRsZXJzXCIsIHRydWUpO1xuXHRcdFx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvQ29udHJvbGxlci5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdGNvbnN0IG9JbkRpYWxvZyA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvSW5EaWFsb2cuZ2V0TW9kZWwoXCJmaWVsZHNJbmZvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGFSZXN1bHRzID0gb01vZGVsLmdldFByb3BlcnR5KFwiL3Jlc3VsdHNcIik7XG5cblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1RhYmxlICYmIChvVGFibGUuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdHNDdXJyZW50RW50aXR5U2V0TmFtZSA9IG9UYWJsZS5kYXRhKFwibWV0YVBhdGhcIiksXG5cdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzQ3VycmVudEVudGl0eVNldE5hbWUpO1xuXHRcdFx0XHRcdGNvbnN0IGVycm9yQ29udGV4dHM6IGFueVtdID0gW107XG5cdFx0XHRcdFx0Y29uc3QgdGV4dFBhdGhzID0gb01vZGVsLmdldFByb3BlcnR5KFwiL3RleHRQYXRoc1wiKTtcblx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlSZWFkYWJsZUluZm8gPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVhZGFibGVQcm9wZXJ0eURhdGFcIik7XG5cdFx0XHRcdFx0bGV0IGdyb3VwSWQ6IHN0cmluZztcblx0XHRcdFx0XHRsZXQgYWxsU2lkZUVmZmVjdHM6IGFueVtdO1xuXHRcdFx0XHRcdGNvbnN0IG1hc3NFZGl0UHJvbWlzZXM6IGFueSA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IGZhaWxlZEZpZWxkc0RhdGE6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGNvbnN0IHNlbGVjdGVkUm93c0xlbmd0aCA9IGFDb250ZXh0cy5sZW5ndGg7XG5cdFx0XHRcdFx0Y29uc3QgZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWU6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGNvbnN0IGJhc2VTaWRlRWZmZWN0c01hcEFycmF5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0U2lkZUVmZmVjdERhdGFGb3JLZXkoXG5cdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udGV4dCxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdFx0YVJlc3VsdHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdC8vY29uc3QgY2hhbmdlUHJvbWlzZTogYW55W10gPSBbXTtcblx0XHRcdFx0XHQvL2xldCBiUmVhZE9ubHlGaWVsZCA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vY29uc3QgZXJyb3JDb250ZXh0czogb2JqZWN0W10gPSBbXTtcblxuXHRcdFx0XHRcdGFDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvU2VsZWN0ZWRDb250ZXh0OiBhbnksIGlkeDogbnVtYmVyKSB7XG5cdFx0XHRcdFx0XHRhbGxTaWRlRWZmZWN0cyA9IFtdO1xuXHRcdFx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChhc3luYyBmdW5jdGlvbiAob1Jlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghZmFpbGVkRmllbGRzRGF0YS5oYXNPd25Qcm9wZXJ0eShvUmVzdWx0LmtleVZhbHVlKSkge1xuXHRcdFx0XHRcdFx0XHRcdGZhaWxlZEZpZWxkc0RhdGFbb1Jlc3VsdC5rZXlWYWx1ZV0gPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vVE9ETyAtIEFkZCBzYXZlIGltcGxlbWVudGF0aW9uIGZvciBWYWx1ZSBIZWxwLlxuXHRcdFx0XHRcdFx0XHRpZiAoYmFzZVNpZGVFZmZlY3RzTWFwQXJyYXlbb1Jlc3VsdC5rZXlWYWx1ZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRhbGxTaWRlRWZmZWN0c1tvUmVzdWx0LmtleVZhbHVlXSA9IGJhc2VTaWRlRWZmZWN0c01hcEFycmF5W29SZXN1bHQua2V5VmFsdWVdO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGFQcm9wZXJ0eVJlYWRhYmxlSW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eVJlYWRhYmxlSW5mby5zb21lKGZ1bmN0aW9uIChvUHJvcGVydHlJbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUmVzdWx0LmtleVZhbHVlID09PSBvUHJvcGVydHlJbmZvLnByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHlJbmZvLnR5cGUgPT09IFwiRGVmYXVsdFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm8udmFsdWUgPT09IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1Byb3BlcnR5SW5mby50eXBlID09PSBcIlBhdGhcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlWYWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChvUHJvcGVydHlJbmZvLnByb3BlcnR5UGF0aCkgPT09IG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlWYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdyb3VwSWQgPSBgJGF1dG8uJHtpZHh9YDtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkUHJvbWlzZSA9IG9TZWxlY3RlZENvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQuc2V0UHJvcGVydHkob1Jlc3VsdC5rZXlWYWx1ZSwgb1Jlc3VsdC52YWx1ZSwgZ3JvdXBJZClcblx0XHRcdFx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNvbnRleHRzLnB1c2gob1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIHVwZGF0aW5nIGVudHJpZXMuXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHRmYWlsZWRGaWVsZHNEYXRhW29SZXN1bHQua2V5VmFsdWVdID0gZmFpbGVkRmllbGRzRGF0YVtvUmVzdWx0LmtleVZhbHVlXSArIDE7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoeyBpc0ZpZWxkVXBkYXRlRmFpbGVkOiB0cnVlIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGRhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHM6IERhdGFUb1VwZGF0ZUZpZWxkQW5kU2lkZUVmZmVjdHNUeXBlID0ge1xuXHRcdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdFx0XHRcdG9GaWVsZFByb21pc2UsXG5cdFx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdHNNYXA6IGJhc2VTaWRlRWZmZWN0c01hcEFycmF5W29SZXN1bHQua2V5VmFsdWVdLFxuXHRcdFx0XHRcdFx0XHRcdHRleHRQYXRocyxcblx0XHRcdFx0XHRcdFx0XHRncm91cElkLFxuXHRcdFx0XHRcdFx0XHRcdGtleTogb1Jlc3VsdC5rZXlWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRvRW50aXR5U2V0Q29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRUYXJnZXRzRm9yQVF1YWxpZmllZE5hbWVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0bWFzc0VkaXRQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLmhhbmRsZU1hc3NFZGl0RmllbGRVcGRhdGVBbmRSZXF1ZXN0U2lkZUVmZmVjdHMoZGF0YVRvVXBkYXRlRmllbGRBbmRTaWRlRWZmZWN0cylcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0YXdhaXQgKFByb21pc2UgYXMgYW55KVxuXHRcdFx0XHRcdFx0LmFsbFNldHRsZWQobWFzc0VkaXRQcm9taXNlcylcblx0XHRcdFx0XHRcdC50aGVuKGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0Z3JvdXBJZCA9IGAkYXV0by5tYXNzRWRpdERlZmVycmVkYDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVmZXJyZWRSZXF1ZXN0cyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c0RhdGFGb3JBbGxLZXlzOiBhbnkgPSBPYmplY3QudmFsdWVzKGRlZmVycmVkVGFyZ2V0c0ZvckFRdWFsaWZpZWROYW1lKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qga2V5c1dpdGhTaWRlRWZmZWN0czogYW55W10gPSBPYmplY3Qua2V5cyhkZWZlcnJlZFRhcmdldHNGb3JBUXVhbGlmaWVkTmFtZSk7XG5cblx0XHRcdFx0XHRcdFx0c2lkZUVmZmVjdHNEYXRhRm9yQWxsS2V5cy5mb3JFYWNoKChhU2lkZUVmZmVjdDogYW55LCBpbmRleDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgY3VycmVudEtleSA9IGtleXNXaXRoU2lkZUVmZmVjdHNbaW5kZXhdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChmYWlsZWRGaWVsZHNEYXRhW2N1cnJlbnRLZXldICE9PSBzZWxlY3RlZFJvd3NMZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRlZmVycmVkU2lkZUVmZmVjdHNEYXRhID0gT2JqZWN0LnZhbHVlcyhhU2lkZUVmZmVjdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZFNpZGVFZmZlY3RzRGF0YS5mb3JFYWNoKChyZXE6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB7IGFUYXJnZXRzLCBvQ29udGV4dCwgVHJpZ2dlckFjdGlvbiwgbVNpZGVFZmZlY3QgfSA9IHJlcTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgZm5HZXREZWZlcnJlZFRhcmdldHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFUYXJnZXRzO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmbkdldERlZmVycmVkVGFyZ2V0c0FuZEFjdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFUYXJnZXRzOiBmbkdldERlZmVycmVkVGFyZ2V0cygpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0VHJpZ2dlckFjdGlvbjogVHJpZ2dlckFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRSZXF1ZXN0cy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGlmIHNvbWUgZGVmZXJyZWQgaXMgcmVqZWN0ZWQsIGl0IHdpbGwgYmUgYWRkIHRvIGZhaWxlZCBxdWV1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtU2lkZUVmZmVjdCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZuR2V0RGVmZXJyZWRUYXJnZXRzQW5kQWN0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5tZXNzYWdlSGFuZGxpbmdGb3JNYXNzRWRpdChvVGFibGUsIGFDb250ZXh0cywgb0NvbnRyb2xsZXIsIG9JbkRpYWxvZywgYVJlc3VsdHMsIGVycm9yQ29udGV4dHMpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaCgoZTogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLmNsb3NlRGlhbG9nKG9EaWFsb2cpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBvRGVmYXVsdFZhbHVlcy5jYW5jZWxCdXR0b25UZXh0LFxuXHRcdFx0XHR2aXNpYmxlOiBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmhhc0VkaXRhYmxlRmllbGRzQmluZGluZyhvRGF0YUZpZWxkTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKSwgdHJ1ZSksXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBvSW5EaWFsb2cgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuY2xvc2VEaWFsb2cob0luRGlhbG9nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldE1vZGVsKG9EaWFsb2dEYXRhTW9kZWwsIFwiZmllbGRzSW5mb1wiKTtcblx0XHRvRGlhbG9nLnNldE1vZGVsKG1vZGVsKTtcblx0XHRvRGlhbG9nLnNldEJpbmRpbmdDb250ZXh0KGRpYWxvZ0NvbnRleHQpO1xuXHRcdHJldHVybiBvRGlhbG9nO1xuXHR9LFxuXG5cdGhlbHBlcnM6IHtcblx0XHRnZXRCaW5kaW5nRXhwRm9ySGFzRWRpdGFibGVGaWVsZHM6IChmaWVsZHM6IGFueSwgZWRpdGFibGU6IGJvb2xlYW4pID0+IHtcblx0XHRcdGNvbnN0IHRvdGFsRXhwID0gZmllbGRzLnJlZHVjZShcblx0XHRcdFx0KGV4cHJlc3Npb246IGFueSwgZmllbGQ6IGFueSkgPT5cblx0XHRcdFx0XHRvcihcblx0XHRcdFx0XHRcdGV4cHJlc3Npb24sXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbChcIi92YWx1ZXMvXCIgKyBmaWVsZC5kYXRhUHJvcGVydHkgKyBcIi92aXNpYmxlXCIsIFwiZmllbGRzSW5mb1wiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRjb25zdGFudChmYWxzZSlcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gZWRpdGFibGUgPyB0b3RhbEV4cCA6IG5vdCh0b3RhbEV4cCk7XG5cdFx0fSxcblxuXHRcdGdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dDogKGRlZmF1bHRWYWx1ZXM6IGFueSwgZmllbGRzOiBib29sZWFuKSA9PiB7XG5cdFx0XHRjb25zdCBlZGl0YWJsZUV4cCA9IE1hc3NFZGl0SGVscGVyLmhlbHBlcnMuZ2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzKGZpZWxkcywgdHJ1ZSk7XG5cdFx0XHRjb25zdCB0b3RhbEV4cCA9IGlmRWxzZShlZGl0YWJsZUV4cCwgY29uc3RhbnQoZGVmYXVsdFZhbHVlcy5hcHBseUJ1dHRvblRleHQpLCBjb25zdGFudChkZWZhdWx0VmFsdWVzLm9rQnV0dG9uVGV4dCkpO1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRvdGFsRXhwKTtcblx0XHR9LFxuXG5cdFx0aGFzRWRpdGFibGVGaWVsZHNCaW5kaW5nOiAoZmllbGRzOiBhbnksIGVkaXRhYmxlOiBib29sZWFuKSA9PiB7XG5cdFx0XHRjb25zdCByZXQgPSBjb21waWxlRXhwcmVzc2lvbihNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIGVkaXRhYmxlKSk7XG5cdFx0XHRpZiAocmV0ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSBpZiAocmV0ID09PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1hc3NFZGl0SGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RUEsTUFBTUEsY0FBYyxHQUFHO0lBQ3RCO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0MsMkJBQTJCLEVBQUUsVUFBVUMsS0FBYSxFQUFFQyxPQUFZLEVBQTJCO01BQzVGLElBQUlDLFVBQWU7TUFDbkIsSUFBSUMsS0FBSyxHQUFHLENBQUM7TUFDYixNQUFNQyxNQUFNLEdBQUdKLEtBQUssQ0FBQ0ssS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUMvQixJQUFJQyxTQUFTLEdBQUcsRUFBRTtNQUNsQkYsTUFBTSxDQUFDRyxPQUFPLENBQUMsVUFBVUMsYUFBcUIsRUFBRTtRQUMvQyxJQUFJLENBQUNQLE9BQU8sQ0FBQ08sYUFBYSxDQUFDLElBQUlMLEtBQUssS0FBSyxDQUFDLEVBQUU7VUFDM0NG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