@sapui5/sap.fe.core 1.127.2 → 1.129.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 (393) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -9
  4. package/src/sap/fe/core/ActionRuntime.ts +3 -7
  5. package/src/sap/fe/core/AppComponent.js +9 -19
  6. package/src/sap/fe/core/AppComponent.ts +2 -12
  7. package/src/sap/fe/core/AppStateHandler.js +3 -11
  8. package/src/sap/fe/core/AppStateHandler.ts +0 -7
  9. package/src/sap/fe/core/BaseController.js +4 -8
  10. package/src/sap/fe/core/BaseController.ts +0 -5
  11. package/src/sap/fe/core/CommonUtils.js +1 -9
  12. package/src/sap/fe/core/CommonUtils.ts +4 -8
  13. package/src/sap/fe/core/ExtensionAPI.js +10 -25
  14. package/src/sap/fe/core/ExtensionAPI.ts +4 -19
  15. package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
  16. package/src/sap/fe/core/PageController.js +7 -10
  17. package/src/sap/fe/core/PageController.ts +0 -3
  18. package/src/sap/fe/core/ResourceModel.js +3 -5
  19. package/src/sap/fe/core/ResourceModel.ts +0 -2
  20. package/src/sap/fe/core/ReuseComponent.js +8 -14
  21. package/src/sap/fe/core/ReuseComponent.ts +0 -6
  22. package/src/sap/fe/core/TemplateComponent.js +37 -9
  23. package/src/sap/fe/core/TemplateComponent.ts +3 -2
  24. package/src/sap/fe/core/TemplateModel.js +5 -5
  25. package/src/sap/fe/core/TemplateModel.ts +0 -1
  26. package/src/sap/fe/core/UIProvider.js +1 -1
  27. package/src/sap/fe/core/UIProvider.ts +44 -1
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
  31. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
  32. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
  35. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
  36. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
  37. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
  38. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
  39. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
  40. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
  41. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
  42. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
  43. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
  44. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
  45. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
  47. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
  48. package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
  49. package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
  50. package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
  51. package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
  52. package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
  53. package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
  54. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
  55. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
  57. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
  59. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
  61. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
  62. package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
  63. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
  64. package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
  65. package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
  66. package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
  67. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
  68. package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
  69. package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
  70. package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
  71. package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
  72. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  73. package/src/sap/fe/core/controllerextensions/Share.js +17 -11
  74. package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
  75. package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
  76. package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
  77. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
  78. package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
  79. package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
  80. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
  81. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
  82. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
  83. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
  84. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
  85. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
  86. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
  87. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  89. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
  90. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
  91. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
  92. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
  94. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
  95. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
  97. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
  98. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
  103. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
  104. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
  105. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
  106. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
  107. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
  108. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
  109. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
  110. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
  111. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
  112. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  113. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
  114. package/src/sap/fe/core/controls/Any.js +1 -2
  115. package/src/sap/fe/core/controls/Any.ts +0 -1
  116. package/src/sap/fe/core/controls/AnyElement.js +1 -2
  117. package/src/sap/fe/core/controls/AnyElement.ts +0 -1
  118. package/src/sap/fe/core/controls/CommandExecution.js +3 -3
  119. package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
  120. package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
  121. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
  122. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
  123. package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
  124. package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
  125. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
  126. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
  127. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
  128. package/src/sap/fe/core/converters/ConverterContext.js +8 -30
  129. package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
  130. package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
  131. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
  132. package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
  133. package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
  134. package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
  135. package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
  136. package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
  137. package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
  139. package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
  140. package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
  141. package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
  142. package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
  143. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
  144. package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
  145. package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
  146. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
  147. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
  149. package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
  150. package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
  151. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
  152. package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
  154. package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
  155. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
  157. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
  158. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
  159. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
  160. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
  161. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
  163. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
  164. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
  165. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
  166. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
  167. package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
  169. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
  171. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
  172. package/src/sap/fe/core/converters/helpers/ID.js +1 -2
  173. package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
  176. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/Key.js +1 -5
  178. package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
  179. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
  180. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
  181. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  182. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
  183. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
  184. package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
  185. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
  186. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
  187. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
  188. package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
  189. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
  190. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
  191. package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
  192. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
  193. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  194. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
  195. package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
  196. package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
  197. package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
  198. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
  199. package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
  200. package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
  201. package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
  202. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
  203. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
  204. package/src/sap/fe/core/fpm/Component.js +14 -17
  205. package/src/sap/fe/core/fpm/Component.ts +7 -10
  206. package/src/sap/fe/core/fpm/manifest.json +1 -1
  207. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
  208. package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
  209. package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
  210. package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
  211. package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
  212. package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
  213. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
  214. package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
  215. package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
  216. package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
  217. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
  218. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
  219. package/src/sap/fe/core/helpers/EditState.js +1 -1
  220. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
  221. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
  222. package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
  223. package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
  224. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
  225. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
  226. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
  227. package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
  228. package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
  229. package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
  230. package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
  231. package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
  232. package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
  233. package/src/sap/fe/core/helpers/MetaPath.js +1 -7
  234. package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
  235. package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
  236. package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
  237. package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
  238. package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
  239. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
  240. package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
  241. package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
  242. package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
  243. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
  244. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
  245. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
  246. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
  247. package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
  248. package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
  249. package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
  250. package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
  251. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
  252. package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
  253. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  254. package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
  255. package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
  256. package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
  257. package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
  258. package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
  259. package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
  260. package/src/sap/fe/core/helpers/WebSocket.js +1 -1
  261. package/src/sap/fe/core/library.js +10 -44
  262. package/src/sap/fe/core/library.support.js +1 -1
  263. package/src/sap/fe/core/library.ts +8 -45
  264. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
  265. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
  266. package/src/sap/fe/core/messagebundle.properties +12 -1
  267. package/src/sap/fe/core/messagebundle_ar.properties +8 -0
  268. package/src/sap/fe/core/messagebundle_bg.properties +8 -0
  269. package/src/sap/fe/core/messagebundle_ca.properties +8 -0
  270. package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
  271. package/src/sap/fe/core/messagebundle_cs.properties +9 -1
  272. package/src/sap/fe/core/messagebundle_cy.properties +8 -0
  273. package/src/sap/fe/core/messagebundle_da.properties +8 -0
  274. package/src/sap/fe/core/messagebundle_de.properties +8 -0
  275. package/src/sap/fe/core/messagebundle_el.properties +8 -0
  276. package/src/sap/fe/core/messagebundle_en.properties +8 -0
  277. package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
  278. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
  279. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
  280. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
  281. package/src/sap/fe/core/messagebundle_es.properties +9 -1
  282. package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
  283. package/src/sap/fe/core/messagebundle_et.properties +8 -0
  284. package/src/sap/fe/core/messagebundle_fi.properties +8 -0
  285. package/src/sap/fe/core/messagebundle_fr.properties +8 -0
  286. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
  287. package/src/sap/fe/core/messagebundle_hi.properties +9 -1
  288. package/src/sap/fe/core/messagebundle_hr.properties +8 -0
  289. package/src/sap/fe/core/messagebundle_hu.properties +8 -0
  290. package/src/sap/fe/core/messagebundle_id.properties +12 -4
  291. package/src/sap/fe/core/messagebundle_it.properties +8 -0
  292. package/src/sap/fe/core/messagebundle_iw.properties +8 -0
  293. package/src/sap/fe/core/messagebundle_ja.properties +8 -0
  294. package/src/sap/fe/core/messagebundle_kk.properties +8 -0
  295. package/src/sap/fe/core/messagebundle_ko.properties +8 -0
  296. package/src/sap/fe/core/messagebundle_lt.properties +8 -0
  297. package/src/sap/fe/core/messagebundle_lv.properties +8 -0
  298. package/src/sap/fe/core/messagebundle_mk.properties +8 -0
  299. package/src/sap/fe/core/messagebundle_ms.properties +8 -0
  300. package/src/sap/fe/core/messagebundle_nl.properties +16 -8
  301. package/src/sap/fe/core/messagebundle_no.properties +8 -0
  302. package/src/sap/fe/core/messagebundle_pl.properties +8 -0
  303. package/src/sap/fe/core/messagebundle_pt.properties +8 -0
  304. package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
  305. package/src/sap/fe/core/messagebundle_ro.properties +8 -0
  306. package/src/sap/fe/core/messagebundle_ru.properties +8 -0
  307. package/src/sap/fe/core/messagebundle_sh.properties +8 -0
  308. package/src/sap/fe/core/messagebundle_sk.properties +8 -0
  309. package/src/sap/fe/core/messagebundle_sl.properties +8 -0
  310. package/src/sap/fe/core/messagebundle_sr.properties +8 -0
  311. package/src/sap/fe/core/messagebundle_sv.properties +8 -0
  312. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  313. package/src/sap/fe/core/messagebundle_tr.properties +8 -0
  314. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  315. package/src/sap/fe/core/messagebundle_vi.properties +8 -0
  316. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
  317. package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
  318. package/src/sap/fe/core/operationsHelper.js +22 -7
  319. package/src/sap/fe/core/operationsHelper.ts +24 -5
  320. package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
  321. package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
  322. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
  323. package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
  324. package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
  325. package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
  326. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  327. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
  328. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
  329. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
  330. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
  331. package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
  332. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
  333. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
  334. package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
  335. package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
  336. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  337. package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
  338. package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
  339. package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
  340. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
  341. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
  342. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
  343. package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
  344. package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
  345. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
  346. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
  347. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
  348. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
  349. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
  350. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
  351. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
  352. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
  353. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
  354. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  355. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  356. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  357. package/src/sap/fe/core/support/CommonHelper.js +4 -1
  358. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  359. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  360. package/src/sap/fe/core/templating/ActionHelper.js +1 -2
  361. package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
  362. package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
  363. package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
  364. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
  365. package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
  366. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
  367. package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
  368. package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
  369. package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
  370. package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
  371. package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
  372. package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
  373. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  374. package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
  375. package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
  376. package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
  377. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  378. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  379. package/src/sap/fe/core/templating/PropertyHelper.js +1 -31
  380. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
  381. package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
  382. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
  383. package/src/sap/fe/core/templating/UIFormatters.js +18 -14
  384. package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
  385. package/src/sap/fe/core/type/Date.js +3 -6
  386. package/src/sap/fe/core/type/Date.ts +0 -3
  387. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  388. package/src/sap/fe/core/type/EDM.js +1 -1
  389. package/src/sap/fe/core/type/Email.js +3 -3
  390. package/src/sap/fe/core/type/FiscalDate.js +3 -9
  391. package/src/sap/fe/core/type/FiscalDate.ts +0 -6
  392. package/src/sap/fe/core/type/InputMask.js +3 -7
  393. package/src/sap/fe/core/type/InputMask.ts +0 -4
@@ -119,7 +119,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
119
119
 
120
120
  /**
121
121
  * This function fetches the related intents when semantic object and action are passed from feEnvironment.getIntent() only in case of My Inbox integration.
122
- *
123
122
  * @param semanticObjectAndAction This specifies the semantic object and action for fetching the intents
124
123
  * @param oBindingContext This sepcifies the binding context for updating related apps
125
124
  * @param appComponentSOItems This is a list of semantic items used for updating the related apps button
@@ -563,7 +562,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
563
562
 
564
563
  /**
565
564
  * Method to return allowed operators for type Guid.
566
- *
567
565
  * @returns Allowed operators for type Guid
568
566
  */
569
567
  function getOperatorsForGuidProperty() {
@@ -592,7 +590,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
592
590
  }
593
591
  /**
594
592
  * Retrieves the user defaults from the startup app state (if available) or the startup parameter and sets them to a model.
595
- *
596
593
  * @param appComponent
597
594
  * @param parameters
598
595
  * @param model
@@ -633,7 +630,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
633
630
  }
634
631
  });
635
632
  }
636
-
637
633
  function getAdditionalParamsForCreate(oStartupParameters, oInboundParameters) {
638
634
  const oInbounds = oInboundParameters,
639
635
  aCreateParameters = oInbounds !== undefined ? Object.keys(oInbounds).filter(function (sParameter) {
@@ -952,7 +948,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
952
948
 
953
949
  /**
954
950
  * Get resolved expression binding used for texts at runtime.
955
- *
956
951
  * @param expBinding
957
952
  * @param control
958
953
  * @returns A string after resolution.
@@ -973,7 +968,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
973
968
  }
974
969
  /**
975
970
  * Check if the current device has a small screen.
976
- *
977
971
  * @returns A Boolean.
978
972
  */
979
973
  function isSmallDevice() {
@@ -982,7 +976,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
982
976
 
983
977
  /**
984
978
  * Parses a SelectionVariant or SelectionPresentationVariant annotation and creates the corresponding filters.
985
- *
986
979
  * @param control MDC Chart, MDC Table or MultiView control on which the filters are applied
987
980
  * @param annotationPath SelectionVariant or SelectionPresentationVariant annotation
988
981
  * @returns Returns an array of filters.
@@ -1028,7 +1021,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1028
1021
  * If a view has been created with the draft Root Path, this method returns its bindingContext.
1029
1022
  * Where no view is found a new created context is returned.
1030
1023
  * The new created context request the key of the entity in order to get the Etag of this entity.
1031
- *
1032
1024
  * @param programmingModel
1033
1025
  * @param view
1034
1026
  * @param appComponent
@@ -1114,4 +1106,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
1114
1106
  };
1115
1107
  return CommonUtils;
1116
1108
  }, false);
1117
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsImluY2x1ZGVzIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsImFMaW5rcyIsImxlbmd0aCIsImFsbG93ZWRBY3Rpb25zIiwidW5hdmFpbGFibGVBY3Rpb25zIiwibWFwcGluZyIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24iLCJzZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsImFwcENvbXBvbmVudFNPSXRlbXMiLCJhY3Rpb25zIiwiYWN0aW9uIiwiZXhjbHVkZWRBY3Rpb25zIiwic29NYXBwaW5ncyIsInVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCIsIm9FbnRyeSIsImFTZW1LZXlzIiwib01ldGFNb2RlbCIsIm9NZXRhUGF0aCIsImFwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTWFuaWZlc3RTT0tleXMiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJzZW1hbnRpY09iamVjdEludGVudHMiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRJbnRlbnQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0IiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlTZXRQYXRoIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsImluZGV4T2YiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJnZXRBY3Rpb25QYXRoIiwiYWN0aW9uQ29udGV4dCIsImJSZXR1cm5Pbmx5UGF0aCIsImluQWN0aW9uTmFtZSIsImJDaGVja1N0YXRpY1ZhbHVlIiwic0FjdGlvbk5hbWUiLCJ0b1N0cmluZyIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic1Byb3BlcnR5Iiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJ3YXJuaW5nIiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9Qcm9taXNlIiwicmVxdWVzdFNpbmdsZXRvblByb3BlcnR5IiwidlByb3BlcnR5VmFsdWUiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiZm9yQ29udGV4dE1lbnUiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsInNldER5bmFtaWNBY3Rpb25Db250ZXh0cyIsInRyYWNlIiwiYXBwbGljYWJsZSIsIm5vdEFwcGxpY2FibGUiLCJkeW5hbWljQWN0aW9uUGF0aFByZWZpeCIsImludGVybmFsTW9kZWwiLCJhcHBsaWNhYmxlUHJvcGVydHkiLCJub3RBcHBsaWNhYmxlUHJvcGVydHkiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5IiwiQWxsb3dlZEV4cHJlc3Npb25zUHJpbyIsInNvcnQiLCJhIiwiYiIsImdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSIsImFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiaXNTdGlja3lFZGl0TW9kZSIsImJJc1N0aWNreU1vZGUiLCJiVUlFZGl0YWJsZSIsImdldFByb3BlcnR5Iiwic2V0VXNlckRlZmF1bHRzIiwicGFyYW1ldGVycyIsImlzQWN0aW9uIiwiaXNDcmVhdGUiLCJhY3Rpb25EZWZhdWx0VmFsdWVzIiwiQmFzZVR5cGUiLCJkZWZhdWx0IiwiVHlwZU1hcCIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwic2hlbGxTZXJ2aWNlcyIsInN0YXJ0dXBBcHBTdGF0ZSIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsInN0YXJ0dXBBcHBTdGF0ZURhdGEiLCJnZXREYXRhIiwiZXh0ZW5kZWRQYXJhbWV0ZXJzIiwic2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdE9wdGlvbnMiLCJvUGFyYW1ldGVyIiwic1Byb3BlcnR5TmFtZSIsInNQYXJhbWV0ZXJOYW1lIiwicGFyYW1ldGVydFR5cGUiLCJ0eXBlIiwiZ2V0QmFzZVR5cGUiLCJTdHJpbmciLCJ0eXBlSW5zdGFuY2UiLCJnZXREYXRhVHlwZUluc3RhbmNlIiwicGFyc2VWYWx1ZSIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJmaWx0ZXIiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsImFQYXJhbWV0ZXJzIiwic1BhcmFtIiwiZm9ybWF0IiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwib1ZpZXdEYXRhIiwib0Nyb3NzTmF2Iiwib0hlYWRlckZhY2V0SXRlbXMiLCJzSWQiLCJvQ29udHJvbENvbmZpZyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiY29uZmlnIiwic091dGJvdW5kIiwibmF2aWdhdGlvbiIsInRhcmdldE91dGJvdW5kIiwib3V0Ym91bmQiLCJnZW5lcmF0ZSIsInNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJ2TWFwcGluZ3MiLCJvTWFwcGluZ3MiLCJKU09OIiwicGFyc2UiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5Iiwib1NlbGVjdE9wdGlvbiIsImdldFNlbGVjdE9wdGlvbiIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwic1BhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsImdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24iLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwib1Byb3BlcnR5IiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJtYXAiLCJfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aCIsInBhdGhzIiwibmF2UGF0aCIsInByb3BzIiwibmF2UGF0aFByZWZpeCIsIm91dFBhdGhzIiwicGF0aFRvQ2hlY2siLCJzdGFydHNXaXRoIiwib3V0UGF0aCIsImdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIm5hdmlnYXRpb25UZXh0IiwiZnJUZXJtIiwiZW50aXR5VHlwZVBhdGhQYXJ0cyIsInJlcGxhY2VBbGwiLCJmaWx0ZXJPdXROYXZQcm9wQmluZGluZyIsImVudGl0eVR5cGVQYXRoIiwiam9pbiIsImVudGl0eVNldFBhdGgiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0UGF0aFBhcnRzIiwiaXNDb250YWlubWVudCIsImNvbnRhaW5tZW50TmF2UGF0aCIsInJlc3VsdENvbnRleHRDaGVjayIsInBhcmVudEVudGl0eVNldFBhdGgiLCJvUGFyZW50UmV0Iiwib1BhcmVudEZSIiwiY29tcGxldGVBbGxvd2VkRXhwcyIsIm91dFByb3AiLCJwcm9wUGF0aCIsIm91dFByb3BQYXRoIiwibWVyZ2VPYmplY3RzIiwib05hdlJlc3RyaWN0aW9ucyIsIk1ldGFNb2RlbEZ1bmN0aW9uIiwiZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIm9OYXZGaWx0ZXJSZXN0IiwibmF2UmVzUmVxUHJvcHMiLCJ1bmlxdWVTb3J0IiwibmF2Tm9uRmlsdGVyUHJvcHMiLCJuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QiLCJuYXZBc3NvY1JlcVByb3BzIiwibmF2QXNzb2NOb25GaWx0ZXJQcm9wcyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwic0ZyYWdtZW50TmFtZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm9PcHRpb25zIiwib01vZGlmaWVyIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIiR0YXJnZXQiLCJwcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJqIiwicmFuZ2UiLCJnZXRSYW5nZURlZmluaXRpb24iLCJGaWx0ZXIiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiZmlsdGVycyIsImFuZCIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic01ldGFQYXRoIiwic0VudGl0eVNldCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImNyZWF0ZVJvb3RDb250ZXh0IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbnRleHQiLCJyb290Q29udGV4dFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJzaW1wbGVSb290Q29udGV4dCIsImV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImZpbmQiLCJwYWdlVmlldyIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0IiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsImdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlLCBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1bmlxdWVTb3J0IGZyb20gXCJzYXAvYmFzZS91dGlsL2FycmF5L3VuaXF1ZVNvcnRcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudERhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhckJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENDaGFydCB9IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RXhwYW5kUGF0aFR5cGUsXG5cdE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdE1ldGFNb2RlbEVudW0sXG5cdE1ldGFNb2RlbE5hdlByb3BlcnR5LFxuXHRNZXRhTW9kZWxQcm9wZXJ0eSxcblx0TWV0YU1vZGVsVHlwZVxufSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRSYW5nZURlZmluaXRpb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsRnVuY3Rpb24gZnJvbSBcIi4vaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuXG50eXBlIE15SW5ib3hJbnRlbnQgPSB7XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdGFjdGlvbjogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzU2VhcmNoVGVybSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRyZXR1cm4gc1NlYXJjaFRlcm1cblx0XHQucmVwbGFjZSgvXCIvZywgXCIgXCIpXG5cdFx0LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKSAvL2VzY2FwZSBiYWNrc2xhc2ggY2hhcmFjdGVycy4gQ2FuIGJlIHJlbW92ZWQgaWYgb2RhdGEvYmluZGluZyBoYW5kbGVzIGJhY2tlbmQgZXJyb3JzIHJlc3BvbmRzLlxuXHRcdC5zcGxpdCgvXFxzKy8pXG5cdFx0LnJlZHVjZShmdW5jdGlvbiAoc05vcm1hbGl6ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgc0N1cnJlbnRXb3JkOiBzdHJpbmcpIHtcblx0XHRcdGlmIChzQ3VycmVudFdvcmQgIT09IFwiXCIpIHtcblx0XHRcdFx0c05vcm1hbGl6ZWQgPSBgJHtzTm9ybWFsaXplZCA/IGAke3NOb3JtYWxpemVkfSBgIDogXCJcIn1cIiR7c0N1cnJlbnRXb3JkfVwiYDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTm9ybWFsaXplZDtcblx0XHR9LCB1bmRlZmluZWQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChiaW5kaW5nQ29udGV4dDogT0RhdGFWNENvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3QgZW50aXR5UGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRjb25zdCBkYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRDb250ZXh0KGVudGl0eVBhdGgpKTtcblx0YXdhaXQgYmluZGluZ0NvbnRleHQucmVxdWVzdFByb3BlcnR5KGRhdGFNb2RlbC50YXJnZXRFbnRpdHlUeXBlLmtleXNbMF0/Lm5hbWUpO1xufVxuXG5mdW5jdGlvbiBmbkhhc1RyYW5zaWVudENvbnRleHRzKG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyk6IGJvb2xlYW4ge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KSB7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0XHRiSGFzVHJhbnNpZW50Q29udGV4dHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSGFzVHJhbnNpZW50Q29udGV4dHM7XG59XG5cbi8vIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gaW4gZW50aXR5U2V0IHBhdGggYW5kIHByb3BlcnR5IHBhdGhcblxuYXN5bmMgZnVuY3Rpb24gX2dldFNPSW50ZW50cyhcblx0b1NoZWxsU2VydmljZUhlbHBlcjogSVNoZWxsU2VydmljZXMsXG5cdG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LFxuXHRvU2VtYW50aWNPYmplY3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0b1BhcmFtOiBvYmplY3QgfCB1bmRlZmluZWRcbik6IFByb21pc2U8TGlua1tdW10+IHtcblx0cmV0dXJuIG9TaGVsbFNlcnZpY2VIZWxwZXIuZ2V0TGlua3MoW1xuXHRcdHtcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHRwYXJhbXM6IG9QYXJhbVxuXHRcdH1cblx0XSk7XG59XG5cbnR5cGUgU09NYXBwaW5nID0geyBMb2NhbFByb3BlcnR5OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9OyBTZW1hbnRpY09iamVjdFByb3BlcnR5OiB1bmtub3duIH07XG4vLyBUTy1ETyBhZGQgdGhpcyBhcyBwYXJ0IG9mIGFwcGx5U2VtYW50aWNPYmplY3RtYXBwaW5ncyBsb2dpYyBpbiBJbnRlbnRCYXNlZG5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb25cbmZ1bmN0aW9uIF9jcmVhdGVNYXBwaW5ncyhvTWFwcGluZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBTT01hcHBpbmdbXSB7XG5cdGNvbnN0IGFTT01hcHBpbmdzOiBTT01hcHBpbmdbXSA9IFtdO1xuXHRjb25zdCBhTWFwcGluZ0tleXMgPSBPYmplY3Qua2V5cyhvTWFwcGluZyk7XG5cdGxldCBvU2VtYW50aWNNYXBwaW5nOiBTT01hcHBpbmc7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFwcGluZ0tleXMpIHtcblx0XHRvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHQkUHJvcGVydHlQYXRoOiBlbGVtZW50XG5cdFx0XHR9LFxuXHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogb01hcHBpbmdbZWxlbWVudF1cblx0XHR9O1xuXHRcdGFTT01hcHBpbmdzLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdH1cblxuXHRyZXR1cm4gYVNPTWFwcGluZ3M7XG59XG50eXBlIFNlbWFudGljSXRlbSA9IHtcblx0dGV4dDogc3RyaW5nO1xuXHR0YXJnZXRTZW1PYmplY3Q6IHN0cmluZztcblx0dGFyZ2V0QWN0aW9uOiBzdHJpbmc7XG5cdHRhcmdldFBhcmFtczogdW5rbm93bjtcbn07XG4vKipcbiAqIEBwYXJhbSBsaW5rR3JvdXBcbiAqIEBwYXJhbSBhRXhjbHVkZWRBY3Rpb25zXG4gKiBAcGFyYW0gb1RhcmdldFBhcmFtc1xuICogQHBhcmFtIGFJdGVtc1xuICogQHBhcmFtIGFBbGxvd2VkQWN0aW9uc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoXG5cdGxpbmtHcm91cDogTGlua1tdW10sXG5cdGFFeGNsdWRlZEFjdGlvbnM6IHVua25vd25bXSxcblx0b1RhcmdldFBhcmFtczogdW5rbm93bixcblx0YUl0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdXG4pOiB2b2lkIHtcblx0Zm9yIChjb25zdCBsaW5rcyBvZiBsaW5rR3JvdXApIHtcblx0XHRmb3IgKGNvbnN0IG9MaW5rIG9mIGxpbmtzKSB7XG5cdFx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdFx0Y29uc3Qgc0FjdGlvbiA9IHNJbnRlbnQuc3BsaXQoXCItXCIpWzFdLnNwbGl0KFwiP1wiKVswXTtcblx0XHRcdGlmIChcblx0XHRcdFx0KGFBbGxvd2VkQWN0aW9ucyAmJiBhQWxsb3dlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpIHx8XG5cdFx0XHRcdCghYUFsbG93ZWRBY3Rpb25zICYmIGFFeGNsdWRlZEFjdGlvbnMgJiYgIWFFeGNsdWRlZEFjdGlvbnMuaW5jbHVkZXMoc0FjdGlvbikpXG5cdFx0XHQpIHtcblx0XHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHRcdHRleHQ6IG9MaW5rLnRleHQsXG5cdFx0XHRcdFx0dGFyZ2V0U2VtT2JqZWN0OiBzSW50ZW50LnNwbGl0KFwiI1wiKVsxXS5zcGxpdChcIi1cIilbMF0sXG5cdFx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRQYXJhbXM6IG9UYXJnZXRQYXJhbXNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljT2JqZWN0ID0ge1xuXHRhbGxvd2VkQWN0aW9ucz86IHVua25vd25bXTtcblx0dW5hdmFpbGFibGVBY3Rpb25zPzogdW5rbm93bltdO1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRwYXRoOiBzdHJpbmc7XG5cdG1hcHBpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3QsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzICYmIGFMaW5rcy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgYUFsbG93ZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMuYWxsb3dlZEFjdGlvbnMgfHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMsIGFBbGxvd2VkQWN0aW9ucyk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGZldGNoZXMgdGhlIHJlbGF0ZWQgaW50ZW50cyB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG9ubHkgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3RBbmRBY3Rpb24gVGhpcyBzcGVjaWZpZXMgdGhlIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciBmZXRjaGluZyB0aGUgaW50ZW50c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dCBUaGlzIHNlcGNpZmllcyB0aGUgYmluZGluZyBjb250ZXh0IGZvciB1cGRhdGluZyByZWxhdGVkIGFwcHNcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRTT0l0ZW1zIFRoaXMgaXMgYSBsaXN0IG9mIHNlbWFudGljIGl0ZW1zIHVzZWQgZm9yIHVwZGF0aW5nIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uXG4gKiBAcGFyYW0gYUxpbmtzIFRoaXMgaXMgYW4gYXJyYXkgY29tcHJpc2luZyBvZiByZWxhdGVkIGludGVudHNcbiAqL1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKFxuXHRzZW1hbnRpY09iamVjdEFuZEFjdGlvbjogTXlJbmJveEludGVudCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBbc2VtYW50aWNPYmplY3RBbmRBY3Rpb24uYWN0aW9uXTtcblx0XHRjb25zdCBleGNsdWRlZEFjdGlvbnM6IFtdID0gW107XG5cdFx0Y29uc3Qgc29NYXBwaW5nczogW10gPSBbXTtcblx0XHRjb25zdCB0YXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IHNvTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBleGNsdWRlZEFjdGlvbnMsIHRhcmdldFBhcmFtcywgYXBwQ29tcG9uZW50U09JdGVtcywgYWN0aW9ucyk7XG5cdH1cbn1cblxudHlwZSBTZW1hbnRpY09iamVjdENvbmZpZyA9IHtcblx0YWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogUmVjb3JkPHN0cmluZywgU2VtYW50aWNPYmplY3Q+O1xufTtcbnR5cGUgUmVsYXRlZEFwcHNDb25maWcgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRvRW50cnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0YVNlbUtleXM6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9NZXRhUGF0aDogc3RyaW5nLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuKTogUHJvbWlzZTxSZWxhdGVkQXBwc0NvbmZpZ1tdPiB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXI6IElTaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgb1BhcmFtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRsZXQgc0N1cnJlbnRTZW1PYmogPSBcIlwiLFxuXHRcdHNDdXJyZW50QWN0aW9uID0gXCJcIjtcblx0bGV0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xuXHRsZXQgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBSZWxhdGVkQXBwc0NvbmZpZ1tdID0gW107XG5cdGxldCBhRXhjbHVkZWRBY3Rpb25zOiB1bmtub3duW10gPSBbXTtcblx0bGV0IGFNYW5pZmVzdFNPS2V5czogc3RyaW5nW107XG5cblx0YXN5bmMgZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRjb25zdCBvUGFyc2VkVXJsID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRzQ3VycmVudFNlbU9iaiA9IG9QYXJzZWRVcmwuc2VtYW50aWNPYmplY3Q7IC8vIEN1cnJlbnQgU2VtYW50aWMgT2JqZWN0XG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBvUGFyc2VkVXJsLmFjdGlvbjtcblx0XHRyZXR1cm4gX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgc0N1cnJlbnRTZW1PYmosIG9QYXJhbSk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvRW50cnkpIHtcblx0XHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VtS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBlbGVtZW50LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzT2JqS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIExvZ2ljIHRvIHJlYWQgYWRkaXRpb25hbCBTTyBmcm9tIG1hbmlmZXN0IGFuZCB1cGRhdGVkIHJlbGF0ZWRhcHBzIG1vZGVsXG5cblx0XHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKSBhcyBTZW1hbnRpY09iamVjdENvbmZpZztcblx0XHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGxldCBzZW1hbnRpY09iamVjdEludGVudHM7XG5cdFx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdFx0YU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFuaWZlc3RTT0tleXMpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGVsZW1lbnQsIG9QYXJhbSkpO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEludGVudHMoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2VsZW1lbnRdLFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50c1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGFwcENvbXBvbmVudFNPSXRlbXMgaXMgdXBkYXRlZCBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgbWV0aG9kXG5cdFx0Ly8gSW4gb3RoZXIgY2FzZXMgaXQgcmVtYWlucyBhcyBhbiBlbXB0eSBsaXN0XG5cdFx0Ly8gV2UgY29uY2F0IHRoaXMgbGlzdCB0b3dhcmRzIHRoZSBlbmQgd2l0aCBhTWFuaWZlc3RTT0l0ZW1zXG5cblx0XHRjb25zdCBhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IGNvbXBvbmVudERhdGE6IENvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGlmIChjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQgJiYgY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpKSB7XG5cdFx0XHRjb25zdCBpbnRlbnQ6IE15SW5ib3hJbnRlbnQgPSBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCk7XG5cdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGludGVudC5zZW1hbnRpY09iamVjdCwgb1BhcmFtKVxuXHRcdFx0KTtcblx0XHRcdF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oaW50ZW50LCBvQmluZGluZ0NvbnRleHQsIGFwcENvbXBvbmVudFNPSXRlbXMsIHNlbWFudGljT2JqZWN0SW50ZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpO1xuXHRcdGlmIChhTGlua3MpIHtcblx0XHRcdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBDb250ZXh0O1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAke29NZXRhUGF0aH1AYDtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYCR7b01ldGFQYXRofS9AYDtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblxuXHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHsgdGFyZ2V0U2VtT2JqZWN0IH0pIHtcblx0XHRcdFx0XHRpZiAoYUFubm90YXRpb25zU09JdGVtc1swXT8udGFyZ2V0U2VtT2JqZWN0ID09PSB0YXJnZXRTZW1PYmplY3QpIHtcblx0XHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGFjdGlvbnMgZnJvbSBjdXJyZW50IGhhc2ggYXBwbGljYXRpb24gaWYgbWFuaWZlc3QgY29udGFpbnMgZW1wdHkgYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyAmJlxuXHRcdFx0XHRcdGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdICYmXG5cdFx0XHRcdFx0ISFvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdLmFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc29JdGVtcyA9IGFNYW5pZmVzdFNPSXRlbXMuY29uY2F0KGFwcENvbXBvbmVudFNPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPyBzb0l0ZW1zIDogc29JdGVtcy5jb25jYXQoYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdH1cblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cblxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMoXG5cdG9FbnRpdHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNDdXJyZW50U2VtT2JqOiBzdHJpbmdcbik6IHtcblx0Ykhhc0VudGl0eVNldFNPOiBib29sZWFuO1xuXHRhQWxsb3dlZEFjdGlvbnM6IHN0cmluZ1tdO1xuXHRhVW5hdmFpbGFibGVBY3Rpb25zOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPltdO1xuXHRhTWFwcGluZ3M6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcbn0ge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFBbGxvd2VkQWN0aW9uczogW10sXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXSxcblx0XHRhTWFwcGluZ3M6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmNsdWRlcyhDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpICYmIG9FbnRpdHlBbm5vdGF0aW9uc1trZXldID09PSBzQ3VycmVudFNlbU9iaikge1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPID0gdHJ1ZTtcblx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0TWFwcGluZ31gO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gO1xuXG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwiI1wiKSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGAke3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgJHtzQW5ub3RhdGlvbkFjdGlvblRlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSAob09iamVjdFBhZ2VMYXlvdXQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0Y29uc3QgcGF0aCA9IChvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkgfHwgXCJcIjtcblx0Y29uc3Qgb01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IGAke29NZXRhUGF0aH0vYCArIGBAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YDtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0Py5nZXRPYmplY3QoKTtcblx0aWYgKCFvRW50cnkgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0b0JpbmRpbmdDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAocmVxdWVzdGVkT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRyZXF1ZXN0ZWRPYmplY3QsXG5cdFx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQsXG5cdFx0XHRcdFx0YVNlbUtleXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRvTWV0YVBhdGgsXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoLCBhcHBDb21wb25lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIG9CdXR0b25cbiAqL1xuZnVuY3Rpb24gZm5GaXJlQnV0dG9uUHJlc3Mob0J1dHRvbj86IENvbnRyb2wpOiB2b2lkIHtcblx0aWYgKFxuXHRcdG9CdXR0b24gJiZcblx0XHRvQnV0dG9uLmlzQTxCdXR0b24gfCBPdmVyZmxvd1Rvb2xiYXJCdXR0b24+KFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXSkgJiZcblx0XHRvQnV0dG9uLmdldFZpc2libGUoKSAmJlxuXHRcdG9CdXR0b24uZ2V0RW5hYmxlZCgpXG5cdCkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBDb250cm9sIHwgQ29tcG9uZW50KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQTxBcHBDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgc2hvdWxkIGJlIGEgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIG93bmVyIG9mIHRoZSBjb250cm9sXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFnZVZpZXcob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogRkVWaWV3IHtcblx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0cmV0dXJuIHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdDogQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldygob0FwcENvbXBvbmVudC5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0VmlldyhvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwpOiBGRVZpZXcge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBPENvbXBvbmVudENvbnRhaW5lcj4oXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2wuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRvQ29udHJvbCA9IG9Db21wb25lbnQgJiYgb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhb0NvbnRyb2wuaXNBPEZFVmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIG9Db250cm9sITtcbn1cblxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IG9iamVjdCwgb0tleXNUb0NoZWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5IGFzIGtleW9mIHR5cGVvZiBvT2JqZWN0XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMoXG5cdG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b0ZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4ge1xuXHRjb25zdCBvRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSA9IChtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L2ApIHx8IHt9KSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRcdG9Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBUYWJsZSB8IE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgfCBPYmplY3RQYWdlU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSk6IFVJNUVsZW1lbnRbXSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uKSB7XG5cdFx0XHRpZiAob0FjdGlvbi5pc0E8QWN0aW9uVG9vbGJhckFjdGlvbj4oXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSkge1xuXHRcdFx0XHRvQWN0aW9uID0gb0FjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdH1cblx0XHRcdGlmIChvQWN0aW9uLmlzQTxNZW51QnV0dG9uPihcInNhcC5tLk1lbnVCdXR0b25cIikpIHtcblx0XHRcdFx0Y29uc3Qgb01lbnUgPSBvQWN0aW9uLmdldE1lbnUoKTtcblx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb01lbnUuZ2V0SXRlbXMoKTtcblx0XHRcdFx0YUl0ZW1zLmZvckVhY2goKG9JdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9JdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChvQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0FjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFJQk5BY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSwgb1ZpZXc6IFZpZXcpOiB2b2lkIHtcblx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93biB9PiA9IHt9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9WaWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdFx0LmdldExpbmtzKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluayk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKG9JQk5BY3Rpb24uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxICYmIGFMaW5rWzBdICYmIGFMaW5rWzBdLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0KG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm5HZXRMaW5rcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbixcblx0aW5BY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW5cbik6XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdCAgfSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCIge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpfS8kVHlwZWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBzdHJpbmcsIG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBzUHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cblxuZXhwb3J0IHR5cGUgX1JlcXVlc3RlZFByb3BlcnR5ID0ge1xuXHR2UHJvcGVydHlWYWx1ZTogdW5rbm93bjtcblx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dDtcblx0c0FjdGlvbjogc3RyaW5nO1xuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFByb3BlcnR5KFxuXHRvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT4ge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH07XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzKTogdm9pZCB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRhUmVzdWx0c1swXS5zQWN0aW9uLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYXBwbGljYWJsZVxuICogQHBhcmFtIG5vdEFwcGxpY2FibGVcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdGFwcGxpY2FibGU6IHVua25vd25bXSxcblx0bm90QXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0Y29uc3QgZHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsXG5cdFx0aW50ZXJuYWxNb2RlbCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFwcGxpY2FibGUpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBub3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKlxuICogQHJldHVybnMgQWxsb3dlZCBvcGVyYXRvcnMgZm9yIHR5cGUgR3VpZFxuICovXG5mdW5jdGlvbiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkoKTogc3RyaW5nIHtcblx0Y29uc3QgYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQgPSBbXCJFUVwiLCBcIk5FXCJdO1xuXHRyZXR1cm4gYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQudG9TdHJpbmcoKTtcbn1cblxudHlwZSBQYXJhbWV0ZXJJbmZvID0ge1xuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0cGFyYW1ldGVyUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbFByb3BlcnR5Pjtcbn07XG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJJbmZvKG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZyk6IFBhcmFtZXRlckluZm8ge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG1ldGFNb2RlbENvbnRleHQuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBQYXJhbWV0ZXJJbmZvID0ge307XG5cdGlmIChiUmVzdWx0Q29udGV4dCAmJiBzUGFyYW1ldGVyQ29udGV4dFBhdGggIT09IHNDb250ZXh0UGF0aCkge1xuXHRcdG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoID0gc1BhcmFtZXRlckNvbnRleHRQYXRoO1xuXHRcdG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMobWV0YU1vZGVsQ29udGV4dCwgc1BhcmFtZXRlckNvbnRleHRQYXRoKTtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG1QYWdlQ29udGV4dDogdW5rbm93bltdLCBvVmlldzogVmlldyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIFVzZXJEZWZhdWx0UGFyYW1ldGVyID0gRWRtQWN0aW9uUGFyYW1ldGVyIHwgQ29udGV4dDtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZGVmYXVsdHMgZnJvbSB0aGUgc3RhcnR1cCBhcHAgc3RhdGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGFuZCBzZXRzIHRoZW0gdG8gYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIG1vZGVsXG4gKiBAcGFyYW0gaXNBY3Rpb25cbiAqIEBwYXJhbSBpc0NyZWF0ZVxuICogQHBhcmFtIGFjdGlvbkRlZmF1bHRWYWx1ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0VXNlckRlZmF1bHRzKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczogVXNlckRlZmF1bHRQYXJhbWV0ZXJbXSxcblx0bW9kZWw6IEpTT05Nb2RlbCB8IE9EYXRhVjRDb250ZXh0LFxuXHRpc0FjdGlvbjogYm9vbGVhbixcblx0aXNDcmVhdGU/OiBib29sZWFuLFxuXHRhY3Rpb25EZWZhdWx0VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBCYXNlVHlwZSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL2VudW1zL0Jhc2VUeXBlXCIpKS5kZWZhdWx0O1xuXHRjb25zdCBUeXBlTWFwID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiKSkuZGVmYXVsdDtcblxuXHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKSxcblx0XHRzdGFydHVwUGFyYW1ldGVycyA9IChjb21wb25lbnREYXRhICYmIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGUgPSBhd2FpdCBzaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShhcHBDb21wb25lbnQpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGVEYXRhID0gc3RhcnR1cEFwcFN0YXRlPy5nZXREYXRhKCkgfHwge30sXG5cdFx0ZXh0ZW5kZWRQYXJhbWV0ZXJzID0gKHN0YXJ0dXBBcHBTdGF0ZURhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdHBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBpc0FjdGlvblxuXHRcdFx0PyBgLyR7KG9QYXJhbWV0ZXIgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZX1gXG5cdFx0XHQ6IChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGg/LigpLnNsaWNlKChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRjb25zdCBzUGFyYW1ldGVyTmFtZSA9IGlzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKGFjdGlvbkRlZmF1bHRWYWx1ZXMgJiYgaXNDcmVhdGUpIHtcblx0XHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnRUeXBlID0gKFxuXHRcdFx0XHRvUGFyYW1ldGVyIGFzIHtcblx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0dHlwZT86IHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0KS50eXBlXG5cdFx0XHRcdD8gVHlwZU1hcC5nZXRCYXNlVHlwZShcblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS50eXBlXG5cdFx0XHRcdCAgKVxuXHRcdFx0XHQ6IEJhc2VUeXBlLlN0cmluZztcblx0XHRcdGNvbnN0IHR5cGVJbnN0YW5jZSA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVJbnN0YW5jZShwYXJhbWV0ZXJ0VHlwZSk7XG5cdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCB0eXBlSW5zdGFuY2UucGFyc2VWYWx1ZShzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0sIFwic3RyaW5nXCIpKTtcblx0XHR9IGVsc2UgaWYgKGV4dGVuZGVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9FeHRlbmRlZFBhcmFtZXRlciBvZiBleHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGhcblx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1JhbmdlICYmIG9SYW5nZS5TaWduID09PSBcIklcIiAmJiBvUmFuZ2UuT3B0aW9uID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBJbmJvdW5kUGFyYW1ldGVyID0ge1xuXHR1c2VGb3JDcmVhdGU6IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShcblx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+LFxuXHRvSW5ib3VuZFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBJbmJvdW5kUGFyYW1ldGVyPlxuKTogdW5rbm93biB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9XG5cdFx0XHRvSW5ib3VuZHMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYUNyZWF0ZVBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gZWxlbWVudDtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXIgPSB7XG5cdHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyVmFsdWU+O1xuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0YWN0aW9uPzogc3RyaW5nO1xufTtcbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZSA9IHtcblx0dmFsdWU/OiB7XG5cdFx0dmFsdWU/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHR9O1xufTtcbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IE91dGJvdW5kUGFyYW1ldGVyKTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdID0gW107XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvc3RyaWN0LWJvb2xlYW4tZXhwcmVzc2lvbnNcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kLnBhcmFtZXRlcnNbc1BhcmFtXTtcblx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJiaW5kaW5nXCIpIHtcblx0XHRcdFx0XHQvLyB1c2luZyB0aGUgZm9ybWF0IG9mIFVJLk1hcHBpbmdcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XHRcdFx0TG9jYWxQcm9wZXJ0eToge1xuXHRcdFx0XHRcdFx0XHQkUHJvcGVydHlQYXRoOiBvTWFwcGluZy52YWx1ZS52YWx1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHNQYXJhbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBUbyBjaGVjayBpZiB0aGUgc2VtYW50aWNPYmplY3QgTWFwcGluZyBpcyBkb25lIGZvciB0aGUgc2FtZSBsb2NhbCBwcm9wZXJ0eSBtb3JlIHRoYXQgb25jZSB0aGVuIGZpcnN0IG9uZSB3aWxsIGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChlbGVtZW50LkxvY2FsUHJvcGVydHk/LiRQcm9wZXJ0eVBhdGggIT09IG9TZW1hbnRpY01hcHBpbmcuTG9jYWxQcm9wZXJ0eS4kUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRvQ3Jvc3NOYXY6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyPlxuKTogUmVjb3JkPFxuXHRzdHJpbmcsXG5cdHtcblx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlPltdO1xuXHR9XG4+IHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdFx0fVxuXHQ+ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uIGFzIFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0bmF2aWdhdGlvbj86IHtcblx0XHRcdFx0dGFyZ2V0T3V0Ym91bmQ/OiB7XG5cdFx0XHRcdFx0b3V0Ym91bmQ6IHN0cmluZztcblx0XHRcdFx0fTtcblx0XHRcdH07XG5cdFx0fVxuXHQ+O1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpIHx8IGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSkge1xuXHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uPy50YXJnZXRPdXRib3VuZD8ub3V0Ym91bmQ7XG5cdFx0XHRpZiAoc091dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29uc3Qgb091dGJvdW5kID0gb0Nyb3NzTmF2W3NPdXRib3VuZF07XG5cdFx0XHRcdGlmIChvT3V0Ym91bmQuc2VtYW50aWNPYmplY3QgJiYgb091dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0XHRcdGlmIChjb25maWcuaW5jbHVkZXMoXCJDaGFydFwiKSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBDcm9zcyBuYXZpZ2F0aW9uIG91dGJvdW5kIGlzIGNvbmZpZ3VyZWQgd2l0aG91dCBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgJHtzT3V0Ym91bmR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9IZWFkZXJGYWNldEl0ZW1zO1xufVxuXG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2TWFwcGluZ3M6IHVua25vd24pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIG9NYXBwaW5ncykge1xuXHRcdGNvbnN0IHNMb2NhbFByb3BlcnR5ID1cblx0XHRcdChlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQoZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXSAmJiBlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdW1wiJFBhdGhcIl0pO1xuXHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdFByb3BlcnR5ID1cblx0XHRcdGVsZW1lbnRbXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cdFx0aWYgKG9TZWxlY3RPcHRpb24pIHtcblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RGcm9tUGF0aCA9IHtcblx0c2VtYW50aWNPYmplY3RQYXRoOiBzdHJpbmc7XG5cdHNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3M6IHsgc2VtYW50aWNPYmplY3Q6IHN0cmluZyB9W107XG5cdHNlbWFudGljT2JqZWN0OiB7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHsgJFBhdGg6IHN0cmluZyB9O1xuXHR9O1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM6IHN0cmluZ1tdO1xufTtcbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgoXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzUGF0aDogc3RyaW5nLFxuXHRzUXVhbGlmaWVyOiBzdHJpbmdcbik6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRsZXQgc1NlbWFudGljT2JqZWN0LCBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0aWYgKHNRdWFsaWZpZXIgPT09IFwiXCIpIHtcblx0XHRcdHNTZW1hbnRpY09iamVjdCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdH1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofUAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fSMke3NRdWFsaWZpZXJ9YCk7XG5cdFx0XHRhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfSMke3NRdWFsaWZpZXJ9YFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogc3RyaW5nLCBzUXVhbGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPFNlbWFudGljT2JqZWN0RnJvbVBhdGg+IHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoLCBzUXVhbGlmaWVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24/OiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB7XG5cdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5KSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5LlByb3BlcnR5ICYmIG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSA9IFtvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4sXG5cdHNSZXN0cmljdGlvbj86IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbik6IHN0cmluZ1tdIHtcblx0bGV0IGFQcm9wczogc3RyaW5nW10gPSBbXTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSkge1xuXHRcdGFQcm9wcyA9IChcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbiBhcyBrZXlvZiBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+XSBhcyBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPltdXG5cdFx0KS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRXhwYW5kUGF0aFR5cGU8RWRtLlByb3BlcnR5UGF0aD4pIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYVByb3BzO1xufVxuXG5mdW5jdGlvbiBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChwYXRoczogc3RyaW5nW10sIG5hdlBhdGg6IHN0cmluZywgcHJvcHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuXHRjb25zdCBuYXZQYXRoUHJlZml4ID0gbmF2UGF0aCArIFwiL1wiO1xuXHRyZXR1cm4gcGF0aHMucmVkdWNlKChvdXRQYXRoczogc3RyaW5nW10sIHBhdGhUb0NoZWNrOiBzdHJpbmcpID0+IHtcblx0XHRpZiAocGF0aFRvQ2hlY2suc3RhcnRzV2l0aChuYXZQYXRoUHJlZml4KSkge1xuXHRcdFx0Y29uc3Qgb3V0UGF0aCA9IHBhdGhUb0NoZWNrLnJlcGxhY2UobmF2UGF0aFByZWZpeCwgXCJcIik7XG5cdFx0XHRpZiAoIW91dFBhdGhzLmluY2x1ZGVzKG91dFBhdGgpKSB7XG5cdFx0XHRcdG91dFBhdGhzLnB1c2gob3V0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRQYXRocztcblx0fSwgcHJvcHMpO1xufVxudHlwZSBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuZXhwb3J0IHR5cGUgX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXTtcblx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG59O1xuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKGVudGl0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhTWV0YU1vZGVsKTogX0ZpbHRlclJlc3RyaWN0aW9ucyB7XG5cdGNvbnN0IG9SZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0UmVxdWlyZWRQcm9wZXJ0aWVzOiBbXSxcblx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHR9O1xuXHRsZXQgb0ZpbHRlclJlc3RyaWN0aW9ucztcblx0Y29uc3QgbmF2aWdhdGlvblRleHQgPSBcIiROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdGNvbnN0IGZyVGVybSA9IFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCI7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoUGFydHMgPSBlbnRpdHlQYXRoLnJlcGxhY2VBbGwoXCIlMkZcIiwgXCIvXCIpLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRjb25zdCBlbnRpdHlUeXBlUGF0aCA9IGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfS9gO1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChlbnRpdHlQYXRoLCBvQ29udGV4dCk7XG5cdGNvbnN0IGVudGl0eVNldFBhdGhQYXJ0cyA9IGVudGl0eVNldFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGlzQ29udGFpbm1lbnQgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9JENvbnRhaW5zVGFyZ2V0YCk7XG5cdGNvbnN0IGNvbnRhaW5tZW50TmF2UGF0aCA9ICEhaXNDb250YWlubWVudCAmJiBlbnRpdHlUeXBlUGF0aFBhcnRzW2VudGl0eVR5cGVQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cblx0Ly9MRUFTVCBQUklPUklUWSAtIEZpbHRlciByZXN0cmljdGlvbnMgZGlyZWN0bHkgYXQgRW50aXR5IFNldFxuXHQvL2UuZy4gRlIgaW4gXCJOUy5FbnRpdHlDb250YWluZXIvU2FsZXNPcmRlck1hbmFnZVwiIENvbnRleHRQYXRoOiAvU2FsZXNPcmRlck1hbmFnZVxuXHRpZiAoIWlzQ29udGFpbm1lbnQpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zID0gb0NvbnRleHQuZ2V0T2JqZWN0KGAke2VudGl0eVNldFBhdGh9JHtmclRlcm19YCkgYXMgTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPiB8IHVuZGVmaW5lZDtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRjb25zdCByZXN1bHRDb250ZXh0Q2hlY2sgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5VHlwZVBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0aWYgKCFyZXN1bHRDb250ZXh0Q2hlY2spIHtcblx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHR9XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucykgfHwge307XG5cdH1cblxuXHRpZiAoZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0Y29uc3QgbmF2UGF0aCA9IGlzQ29udGFpbm1lbnQgPyAoY29udGFpbm1lbnROYXZQYXRoIGFzIHN0cmluZykgOiBlbnRpdHlTZXRQYXRoUGFydHNbZW50aXR5U2V0UGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdC8vIEluIGNhc2Ugb2YgY29udGFpbm1lbnQgd2UgdGFrZSBlbnRpdHlTZXQgcHJvdmlkZWQgYXMgcGFyZW50LiBBbmQgaW4gY2FzZSBvZiBub3JtYWwgd2Ugd291bGQgcmVtb3ZlIHRoZSBsYXN0IG5hdmlnYXRpb24gZnJvbSBlbnRpdHlTZXRQYXRoLlxuXHRcdGNvbnN0IHBhcmVudEVudGl0eVNldFBhdGggPSBpc0NvbnRhaW5tZW50ID8gZW50aXR5U2V0UGF0aCA6IGAvJHtlbnRpdHlTZXRQYXRoUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oYC8ke25hdmlnYXRpb25UZXh0fS9gKX1gO1xuXHRcdC8vVEhJUkQgSElHSEVTVCBQUklPUklUWSAtIFJlYWRpbmcgcHJvcGVydHkgcGF0aCByZXN0cmljdGlvbnMgLSBBbm5vdGF0aW9uIGF0IG1haW4gZW50aXR5IGJ1dCBkaXJlY3RseSBvbiBuYXZpZ2F0aW9uIHByb3BlcnR5IHBhdGhcblx0XHQvL2UuZy4gUGFyZW50IEN1c3RvbWVyIHdpdGggUHJvcGVydHlQYXRoPVwiU2V0L0NpdHlOYW1lXCIgQ29udGV4dFBhdGg6IEN1c3RvbWVyL1NldFxuXHRcdGNvbnN0IG9QYXJlbnRSZXQ6IF9GaWx0ZXJSZXN0cmljdGlvbnMgPSB7XG5cdFx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0Tm9uRmlsdGVyYWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zOiB7fVxuXHRcdH07XG5cdFx0aWYgKCFuYXZQYXRoLmluY2x1ZGVzKFwiJTJGXCIpKSB7XG5cdFx0XHRjb25zdCBvUGFyZW50RlIgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7cGFyZW50RW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBfZmV0Y2hQcm9wZXJ0aWVzRm9yTmF2UGF0aChcblx0XHRcdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9QYXJlbnRGUiwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdLFxuXHRcdFx0XHRuYXZQYXRoLFxuXHRcdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIHx8IFtdXG5cdFx0XHQpO1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0Y29uc3QgY29tcGxldGVBbGxvd2VkRXhwcyA9IGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9QYXJlbnRGUikgfHwge307XG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IE9iamVjdC5rZXlzKGNvbXBsZXRlQWxsb3dlZEV4cHMpLnJlZHVjZShcblx0XHRcdFx0KG91dFByb3A6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiwgcHJvcFBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdGlmIChwcm9wUGF0aC5zdGFydHNXaXRoKG5hdlBhdGggKyBcIi9cIikpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG91dFByb3BQYXRoID0gcHJvcFBhdGgucmVwbGFjZShuYXZQYXRoICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0b3V0UHJvcFtvdXRQcm9wUGF0aF0gPSBjb21wbGV0ZUFsbG93ZWRFeHBzW3Byb3BQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG91dFByb3A7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPlxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0b1BhcmVudFJldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge31cblx0XHQpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuXHRcdC8vU0VDT05EIEhJR0hFU1QgcHJpb3JpdHkgLSBOYXZpZ2F0aW9uIHJlc3RyaWN0aW9uc1xuXHRcdC8vZS5nLiBQYXJlbnQgXCIvQ3VzdG9tZXJcIiB3aXRoIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg9XCJTZXRcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb05hdlJlc3RyaWN0aW9ucyA9IE1ldGFNb2RlbEZ1bmN0aW9uLmdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob0NvbnRleHQsIHBhcmVudEVudGl0eVNldFBhdGgsIG5hdlBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikpO1xuXHRcdGNvbnN0IG9OYXZGaWx0ZXJSZXN0ID0gb05hdlJlc3RyaWN0aW9ucyAmJiAob05hdlJlc3RyaWN0aW9uc1tcIkZpbHRlclJlc3RyaWN0aW9uc1wiXSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+KTtcblx0XHRjb25zdCBuYXZSZXNSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2RmlsdGVyUmVzdCwgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzLmNvbmNhdChuYXZSZXNSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdk5vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdk5vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fSxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9OYXZGaWx0ZXJSZXN0KSB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9ISUdIRVNUIHByaW9yaXR5IC0gUmVzdHJpY3Rpb25zIGhhdmluZyB0YXJnZXQgd2l0aCBuYXZpZ2F0aW9uIGFzc29jaWF0aW9uIGVudGl0eVxuXHRcdC8vIGUuZy4gRlIgaW4gXCJDdXN0b21lclBhcmFtZXRlcnMvU2V0XCIgQ29udGV4dFBhdGg6IFwiQ3VzdG9tZXIvU2V0XCJcblx0XHRjb25zdCBuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QgPSBvQ29udGV4dC5nZXRPYmplY3QoXG5cdFx0XHRgLyR7ZW50aXR5VHlwZVBhdGhQYXJ0cy5qb2luKFwiL1wiKX0ke2ZyVGVybX1gXG5cdFx0KSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+O1xuXHRcdGNvbnN0IG5hdkFzc29jUmVxUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jUmVxUHJvcHMpKTtcblx0XHRjb25zdCBuYXZBc3NvY05vbkZpbHRlclByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCwgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmNvbmNhdChuYXZBc3NvY05vbkZpbHRlclByb3BzKSk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyxcblx0XHRcdGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCkgfHwge31cblx0XHQpIGFzIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5cbnR5cGUgUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudDtcblx0YmluZGluZ0NvbnRleHRzOiBvYmplY3Q7XG5cdG1vZGVsczogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIEJhc2VUcmVlTW9kaWZpZXIgPSB7XG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdHNGcmFnbWVudE5hbWU6IHN0cmluZyxcblx0XHRtUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdG9WaWV3PzogVmlld1xuXHQpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdHRhcmdldHM6IHN0cmluZztcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRzRnJhZ21lbnROYW1lOiBzdHJpbmcsXG5cdG9QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdG9PcHRpb25zOiB7IHZpZXc/OiBWaWV3OyBpc1hNTD86IGJvb2xlYW47IGlkOiBzdHJpbmc7IGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyIHwgRXh0ZW5zaW9uQVBJOyBjb250YWluaW5nVmlldz86IFZpZXcgfSxcblx0b01vZGlmaWVyPzogQmFzZVRyZWVNb2RpZmllclxuKTogUHJvbWlzZTxFbGVtZW50IHwgVUk1RWxlbWVudCB8IEVsZW1lbnRbXSB8IFVJNUVsZW1lbnRbXT4ge1xuXHRvT3B0aW9ucyA9IG9PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyICYmIHR5cGVvZiBzRnJhZ21lbnROYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudCkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGZyYWdtZW50RGF0YSA9XG5cdFx0XHR0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIiA/IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpIDogc0ZyYWdtZW50TmFtZTtcblx0XHRjb25zdCBvRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhmcmFnbWVudERhdGEsIHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdFx0fVxuXHRcdGxldCBvd25lcjogeyBydW5Bc093bmVyOiA8VD4oZm46ICgpID0+IFQpID0+IFQgfSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5hcHBDb21wb25lbnQgPz8geyBydW5Bc093bmVyOiAoZm4pID0+IGZuKCkgfTtcblx0XHRpZiAob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpIHtcblx0XHRcdGNvbnN0IHZpZXdPd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvT3B0aW9ucy5jb250YWluaW5nVmlldyk7XG5cdFx0XHRpZiAodmlld093bmVyKSB7XG5cdFx0XHRcdG93bmVyID0gdmlld093bmVyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgY29udGFpbmluZ1ZpZXc6IFZpZXcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9PcHRpb25zLnZpZXcgJiYgIW9PcHRpb25zLmNvbnRyb2xsZXIpIHtcblx0XHRcdC8vIHRoaXMgaXMgb3ZlcmFsbCBzdHVwaWQsIGluIGNhc2Ugd2UgYXJlIGNvbWluZyBmcm9tIHRoZSBkZWxlZ2F0ZSB3aXRoIGFuIHhtbCBub2RlIGluc3RlYWQgb2YgYSBmcmFnbWVudCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbnRhaW5pbmdWaWV3IGluIHRoZXJlIChkb25lIGJ5IHRoZSBvTW9kaWZpZXIgY2FsbCBmb3IgaW5zdGFuY2UpXG5cdFx0XHQvLyBCdXQgaW4gb3RoZXIgcnVudGltZSBjYXNlIHdoZXJlIHdlIGFyZSBoZXJlIHdlIG5lZWQgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2xsZXIgYW5kIHRodXMgY2Fubm90IGhhdmUgYSBjb250YWluaW5nVmlldy4uLlxuXHRcdFx0Y29udGFpbmluZ1ZpZXcgPSBvT3B0aW9ucy52aWV3O1xuXHRcdH1cblx0XHRyZXR1cm4gb3duZXIucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGlkOiBvT3B0aW9ucy5pZCxcblx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogY29udGFpbmluZ1ZpZXdcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG4vLyBHZXQgdGhlIHBhdGggZm9yIGFjdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXMgbmVlZGVkIHRvIHJlYWQgdGhlIGFubm90YXRpb25zXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJQYXRoKHNQYXRoOiBzdHJpbmcsIHNQYXJhbWV0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzQ29udGV4dDtcblx0aWYgKHNQYXRoLmluY2x1ZGVzKFwiQCR1aTUub3ZlcmxvYWRcIikpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogR2V0IHJlc29sdmVkIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIGZvciB0ZXh0cyBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBleHBCaW5kaW5nXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgQSBzdHJpbmcgYWZ0ZXIgcmVzb2x1dGlvbi5cbiAqL1xuZnVuY3Rpb24gX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyhleHBCaW5kaW5nOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBzdHJpbmcge1xuXHQvLyBUaGUgaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBkdW1teSBlbGVtZW50IHdpdGggdGhlIGV4cHJlc2lvbiBiaW5kaW5nLlxuXHQvLyBBZGRpbmcgaXQgYXMgZGVwZW5kZW50IHRvIHRoZSB2aWV3L2NvbnRyb2wgd291bGQgcHJvcGFnYXRlIGFsbCB0aGUgbW9kZWxzIHRvIHRoZSBkdW1teSBlbGVtZW50IGFuZCByZXNvbHZlIHRoZSBiaW5kaW5nLlxuXHQvLyBXZSByZW1vdmUgdGhlIGR1bW15IGVsZW1lbnQgYWZ0ZXIgdGhhdCBhbmQgZGVzdHJveSBpdC5cblxuXHRjb25zdCBhbnlSZXNvdXJjZVRleHQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IGV4cEJpbmRpbmcgfSk7XG5cdGNvbnRyb2wuYWRkRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGNvbnN0IHJlc3VsdFRleHQgPSBhbnlSZXNvdXJjZVRleHQuZ2V0QW55VGV4dCgpO1xuXHRjb250cm9sLnJlbW92ZURlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRhbnlSZXNvdXJjZVRleHQuZGVzdHJveSgpO1xuXG5cdHJldHVybiByZXN1bHRUZXh0O1xufVxuLyoqXG4gKiBDaGVjayBpZiB0aGUgY3VycmVudCBkZXZpY2UgaGFzIGEgc21hbGwgc2NyZWVuLlxuICpcbiAqIEByZXR1cm5zIEEgQm9vbGVhbi5cbiAqL1xuZnVuY3Rpb24gaXNTbWFsbERldmljZSgpOiBib29sZWFuIHtcblx0cmV0dXJuICFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgfHwgRGV2aWNlLnJlc2l6ZS53aWR0aCA8PSAzMjA7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VsZWN0aW9uVmFyaWFudCBvciBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVycy5cbiAqXG4gKiBAcGFyYW0gY29udHJvbCBNREMgQ2hhcnQsIE1EQyBUYWJsZSBvciBNdWx0aVZpZXcgY29udHJvbCBvbiB3aGljaCB0aGUgZmlsdGVycyBhcmUgYXBwbGllZFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbihjb250cm9sOiBDb250cm9sIHwgTURDQ2hhcnQgfCBNRENUYWJsZSwgYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IEZpbHRlcltdIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHN2Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtjb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpfSR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdGNvbnN0IHByb3BlcnR5RmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyW10+ID0ge307XG5cdGxldCBhbm5vdGF0aW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhzdkNvbnRleHQpLnRhcmdldE9iamVjdDtcblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdGFubm90YXRpb24gPSBhbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHRpZiAoIWFubm90YXRpb24gfHwgIWlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25WYXJpYW50VHlwZT4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0KGFubm90YXRpb24uU2VsZWN0T3B0aW9ucyB8fCBbXSkuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LiR0YXJnZXQgJiYgc2VsZWN0T3B0aW9uLlJhbmdlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIHNlbGVjdE9wdGlvbi5SYW5nZXMpIHtcblx0XHRcdFx0Y29uc3QgcmFuZ2UgPSBnZXRSYW5nZURlZmluaXRpb24oc2VsZWN0T3B0aW9uLlJhbmdlc1tqXSwgcHJvcGVydHlUeXBlKTtcblx0XHRcdFx0cHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPSAocHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPz8gW10pLmNvbmNhdChcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGZvciAoY29uc3QgcGF0aCBpbiBwcm9wZXJ0eUZpbHRlcnMpIHtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogcHJvcGVydHlGaWx0ZXJzW3BhdGhdLFxuXHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKFxuXHRzTWV0YVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNFbnRpdHlTZXQ6IHN0cmluZyxcblx0b0RpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNNZXRhUGF0aCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oc0VudGl0eVNldCwgb0NvbnRleHQgfHwgb01ldGFNb2RlbCwgb0RpYWdub3N0aWNzLCBtZXJnZU9iamVjdHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cbiAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtbWluZ01vZGVsXG4gKiBAcGFyYW0gdmlld1xuICogQHBhcmFtIGFwcENvbXBvbmVudFxuICogQHJldHVybnMgUmV0dXJucyBhIFByb21pc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlUm9vdENvbnRleHQocHJvZ3JhbW1pbmdNb2RlbDogc3RyaW5nLCB2aWV3OiBWaWV3LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBjb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRpZiAoY29udGV4dCkge1xuXHRcdGNvbnN0IHJvb3RDb250ZXh0UGF0aCA9XG5cdFx0XHRwcm9ncmFtbWluZ01vZGVsID09PSBcIkRyYWZ0XCIgPyBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKGNvbnRleHQpIDogTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0bGV0IHNpbXBsZVJvb3RDb250ZXh0OiBPRGF0YVY0Q29udGV4dDtcblx0XHRpZiAocm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGhcblx0XHRcdGNvbnN0IGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UgPSBhcHBDb21wb25lbnRcblx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdC5nZXRJbnN0YW5jZWRWaWV3cygpXG5cdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSByb290Q29udGV4dFBhdGgpXG5cdFx0XHRcdD8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0aWYgKGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UpIHtcblx0XHRcdFx0cmV0dXJuIGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2U7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiKTtcblx0XHRcdGlmIChzaW1wbGVSb290Q29udGV4dD8uZ2V0UGF0aCgpID09PSByb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0cmV0dXJuIHNpbXBsZVJvb3RDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCk7XG5cdFx0XHRzaW1wbGVSb290Q29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KHJvb3RDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRhd2FpdCBDb21tb25VdGlscy53YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHQvLyBTdG9yZSB0aGlzIG5ldyBjcmVhdGVkIGNvbnRleHQgdG8gdXNlIGl0IG9uIHRoZSBuZXh0IGl0ZXJhdGlvbnNcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvc2ltcGxlUm9vdENvbnRleHRcIiwgc2ltcGxlUm9vdENvbnRleHQpO1xuXHRcdFx0cmV0dXJuIHNpbXBsZVJvb3RDb250ZXh0O1xuXHRcdH1cblx0fVxufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0Z2V0Q3VycmVudFBhZ2VWaWV3OiBnZXRDdXJyZW50UGFnZVZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGg6IGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgsXG5cdHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkOiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZTogc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHM6IHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyxcblx0cmVxdWVzdFByb3BlcnR5OiByZXF1ZXN0UHJvcGVydHksXG5cdGdldFBhcmFtZXRlclBhdGg6IGdldFBhcmFtZXRlclBhdGgsXG5cdGdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMsXG5cdGdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmc6IF9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcsXG5cdHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbDogdXBkYXRlUmVsYXRlQXBwc01vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zOiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyxcblx0Z2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uOiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24sXG5cdGNyZWF0ZVJvb3RDb250ZXh0OiBjcmVhdGVSb290Q29udGV4dCxcblx0aXNTbWFsbERldmljZSxcblx0Z2V0Q29udmVydGVyQ29udGV4dEZvclBhdGhcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3RUEsU0FBU0EsbUJBQW1CLENBQUNDLFdBQW1CLEVBQXNCO0lBQ3JFLElBQUksQ0FBQ0EsV0FBVyxFQUFFO01BQ2pCLE9BQU9DLFNBQVM7SUFDakI7SUFFQSxPQUFPRCxXQUFXLENBQ2hCRSxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUNsQkEsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUFBLENBQ3ZCQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQ1pDLE1BQU0sQ0FBQyxVQUFVQyxXQUErQixFQUFFQyxZQUFvQixFQUFFO01BQ3hFLElBQUlBLFlBQVksS0FBSyxFQUFFLEVBQUU7UUFDeEJELFdBQVcsR0FBSSxHQUFFQSxXQUFXLEdBQUksR0FBRUEsV0FBWSxHQUFFLEdBQUcsRUFBRyxJQUFHQyxZQUFhLEdBQUU7TUFDekU7TUFDQSxPQUFPRCxXQUFXO0lBQ25CLENBQUMsRUFBRUosU0FBUyxDQUFDO0VBQ2Y7RUFFQSxlQUFlTSx1QkFBdUIsQ0FBQ0MsY0FBOEIsRUFBaUI7SUFBQTtJQUNyRixNQUFNQyxLQUFLLEdBQUdELGNBQWMsQ0FBQ0UsUUFBUSxFQUFFO0lBQ3ZDLE1BQU1DLFNBQVMsR0FBR0YsS0FBSyxD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
1109
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJfZGF0YU1vZGVsJHRhcmdldEVudGkiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsImluY2x1ZGVzIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsImFMaW5rcyIsImxlbmd0aCIsImFsbG93ZWRBY3Rpb25zIiwidW5hdmFpbGFibGVBY3Rpb25zIiwibWFwcGluZyIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24iLCJzZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsImFwcENvbXBvbmVudFNPSXRlbXMiLCJhY3Rpb25zIiwiYWN0aW9uIiwiZXhjbHVkZWRBY3Rpb25zIiwic29NYXBwaW5ncyIsInVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCIsIm9FbnRyeSIsImFTZW1LZXlzIiwib01ldGFNb2RlbCIsIm9NZXRhUGF0aCIsImFwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTWFuaWZlc3RTT0tleXMiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJzZW1hbnRpY09iamVjdEludGVudHMiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRJbnRlbnQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0IiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlTZXRQYXRoIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJfcmVmIiwiX2FBbm5vdGF0aW9uc1NPSXRlbXMkIiwic29JdGVtcyIsImNvbmNhdCIsInNldFByb3BlcnR5IiwiZXJyb3IiLCJMb2ciLCJfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsIm9FbnRpdHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0iLCJzQW5ub3RhdGlvbkFjdGlvblRlcm0iLCJzUXVhbGlmaWVyIiwiZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJwYXRoIiwic1NlbWFudGljS2V5Vm9jYWJ1bGFyeSIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwicmVxdWVzdGVkT2JqZWN0IiwiY2F0Y2giLCJvRXJyb3IiLCJmbkZpcmVCdXR0b25QcmVzcyIsIm9CdXR0b24iLCJpc0EiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImdldEFwcENvbXBvbmVudCIsIm9Db250cm9sIiwib093bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJFcnJvciIsImdldEN1cnJlbnRQYWdlVmlldyIsIm9BcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRQYXJlbnQiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwibWV0YU1vZGVsQ29udGV4dCIsInNDb250ZXh0UGF0aCIsIm9GaWx0ZXIiLCJvRW50aXR5VHlwZSIsIm9Qcm9wZXJ0aWVzIiwiaGFzT3duUHJvcGVydHkiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJvTWVudSIsImdldE1lbnUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZGF0YSIsImZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvVmlldyIsIm9QYXJhbXMiLCJpc1N0aWNreSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJpbmRleE9mIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldElkIiwic2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlIiwiX29WaWV3JGdldEJpbmRpbmdDb250IiwiZ2V0QWN0aW9uUGF0aCIsImFjdGlvbkNvbnRleHQiLCJiUmV0dXJuT25seVBhdGgiLCJpbkFjdGlvbk5hbWUiLCJiQ2hlY2tTdGF0aWNWYWx1ZSIsInNBY3Rpb25OYW1lIiwidG9TdHJpbmciLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNQcm9wZXJ0eSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwid2FybmluZyIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvUHJvbWlzZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInZQcm9wZXJ0eVZhbHVlIiwic2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlIiwib0ludGVybmFsTW9kZWxDb250ZXh0IiwiYVJlcXVlc3RQcm9taXNlcyIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJ0cmFjZSIsImFwcGxpY2FibGUiLCJub3RBcHBsaWNhYmxlIiwiZHluYW1pY0FjdGlvblBhdGhQcmVmaXgiLCJpbnRlcm5hbE1vZGVsIiwiYXBwbGljYWJsZVByb3BlcnR5Iiwibm90QXBwbGljYWJsZVByb3BlcnR5IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkiLCJhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCIsImdldFBhcmFtZXRlckluZm8iLCJzUGFyYW1ldGVyQ29udGV4dFBhdGgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsImJSZXN1bHRDb250ZXh0Iiwib1BhcmFtZXRlckluZm8iLCJjb250ZXh0UGF0aCIsInBhcmFtZXRlclByb3BlcnRpZXMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm9TZWxlY3Rpb25WYXJpYW50IiwibVBhZ2VDb250ZXh0Iiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsImlzU3RpY2t5RWRpdE1vZGUiLCJiSXNTdGlja3lNb2RlIiwiYlVJRWRpdGFibGUiLCJnZXRQcm9wZXJ0eSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJfZ2V0UGF0aCIsIl9yZWYyIiwic1Byb3BlcnR5TmFtZSIsImNhbGwiLCJzUGFyYW1ldGVyTmFtZSIsInBhcmFtZXRlcnRUeXBlIiwidHlwZSIsImdldEJhc2VUeXBlIiwiU3RyaW5nIiwidHlwZUluc3RhbmNlIiwiZ2V0RGF0YVR5cGVJbnN0YW5jZSIsInBhcnNlVmFsdWUiLCJvRXh0ZW5kZWRQYXJhbWV0ZXIiLCJQcm9wZXJ0eU5hbWUiLCJvUmFuZ2UiLCJSYW5nZXMiLCJTaWduIiwiT3B0aW9uIiwiTG93IiwiZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSIsIm9TdGFydHVwUGFyYW1ldGVycyIsIm9JbmJvdW5kUGFyYW1ldGVycyIsIm9JbmJvdW5kcyIsImFDcmVhdGVQYXJhbWV0ZXJzIiwiZmlsdGVyIiwic1BhcmFtZXRlciIsInVzZUZvckNyZWF0ZSIsIm9SZXQiLCJzQ3JlYXRlUGFyYW1ldGVyIiwiYVZhbHVlcyIsImNyZWF0ZSIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9PdXRib3VuZCIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhUGFyYW1ldGVycyIsInNQYXJhbSIsImZvcm1hdCIsIl9lbGVtZW50JExvY2FsUHJvcGVydCIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm9WaWV3RGF0YSIsIm9Dcm9zc05hdiIsIm9IZWFkZXJGYWNldEl0ZW1zIiwic0lkIiwib0NvbnRyb2xDb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsIl9vQ29udHJvbENvbmZpZyRjb25maSIsIl9vQ29udHJvbENvbmZpZyRjb25maTIiLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4Iiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib09wdGlvbnMiLCJvTW9kaWZpZXIiLCJ2aWV3Iiwib0ZyYWdtZW50IiwidGFyZ2V0cyIsImZyYWdtZW50RGF0YSIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwiaXNYTUwiLCJvd25lciIsInJ1bkFzT3duZXIiLCJmbiIsImNvbnRhaW5pbmdWaWV3Iiwidmlld093bmVyIiwiY29udHJvbGxlciIsIkZyYWdtZW50IiwibG9hZCIsImlkIiwiZGVmaW5pdGlvbiIsImdldFNpbmdsZXRvblBhdGgiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsImVudGl0eVNldCIsInNpbmdsZXRvbk5hbWUiLCJyZXNvbHZlZFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmciLCJiaW5kUHJvcGVydHkiLCJyZXF1ZXN0VmFsdWUiLCJnZXRQYXJhbWV0ZXJQYXRoIiwic0NvbnRleHQiLCJhQWN0aW9uIiwiX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyIsImV4cEJpbmRpbmciLCJjb250cm9sIiwiYW55UmVzb3VyY2VUZXh0IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJhZGREZXBlbmRlbnQiLCJyZXN1bHRUZXh0IiwiZ2V0QW55VGV4dCIsInJlbW92ZURlcGVuZGVudCIsImRlc3Ryb3kiLCJpc1NtYWxsRGV2aWNlIiwiRGV2aWNlIiwic3lzdGVtIiwiZGVza3RvcCIsInJlc2l6ZSIsIndpZHRoIiwiZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJzdkNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsInByb3BlcnR5RmlsdGVycyIsImFubm90YXRpb24iLCJ0YXJnZXRPYmplY3QiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uIiwiX3NlbGVjdE9wdGlvbiRQcm9wZXJ0IiwiX3NlbGVjdE9wdGlvbiRSYW5nZXMiLCIkdGFyZ2V0IiwicHJvcGVydHlUeXBlIiwicHJvcGVydHlQYXRoIiwiaiIsInJhbmdlIiwiZ2V0UmFuZ2VEZWZpbml0aW9uIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJyYW5nZUxvdyIsInJhbmdlSGlnaCIsImZpbHRlcnMiLCJhbmQiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNNZXRhUGF0aCIsInNFbnRpdHlTZXQiLCJvRGlhZ25vc3RpY3MiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJjcmVhdGVSb290Q29udGV4dCIsInByb2dyYW1taW5nTW9kZWwiLCJjb250ZXh0Iiwicm9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwic2ltcGxlUm9vdENvbnRleHQiLCJfYXBwQ29tcG9uZW50JGdldFJvb3QiLCJfc2ltcGxlUm9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJmaW5kIiwicGFnZVZpZXciLCJfcGFnZVZpZXckZ2V0QmluZGluZ0MiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImdldElCTkFjdGlvbnMiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJnZXRSZWxhdGVkQXBwc01lbnVJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIGFzIEVkbUFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSwgU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgU2VsZWN0aW9uVmFyaWFudFR5cGUsIFRleHRBcnJhbmdlbWVudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdW5pcXVlU29ydCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9hcnJheS91bmlxdWVTb3J0XCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBPdmVyZmxvd1Rvb2xiYXJCdXR0b24gZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckJ1dHRvblwiO1xuaW1wb3J0IERldmljZSBmcm9tIFwic2FwL3VpL0RldmljZVwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgTURDQ2hhcnQgfSBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEFjdGlvblRvb2xiYXJBY3Rpb24gZnJvbSBcInNhcC91aS9tZGMvYWN0aW9udG9vbGJhci9BY3Rpb25Ub29sYmFyQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy92YWx1ZWhlbHAvY29udGVudC9NRENUYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEV4cGFuZFBhdGhUeXBlLFxuXHRNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRNZXRhTW9kZWxFbnVtLFxuXHRNZXRhTW9kZWxOYXZQcm9wZXJ0eSxcblx0TWV0YU1vZGVsUHJvcGVydHksXG5cdE1ldGFNb2RlbFR5cGVcbn0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0UmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4vY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbEZ1bmN0aW9uIGZyb20gXCIuL2hlbHBlcnMvTWV0YU1vZGVsRnVuY3Rpb25cIjtcblxudHlwZSBNeUluYm94SW50ZW50ID0ge1xuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRhY3Rpb246IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHNTZWFyY2hUZXJtXG5cdFx0LnJlcGxhY2UoL1wiL2csIFwiIFwiKVxuXHRcdC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIikgLy9lc2NhcGUgYmFja3NsYXNoIGNoYXJhY3RlcnMuIENhbiBiZSByZW1vdmVkIGlmIG9kYXRhL2JpbmRpbmcgaGFuZGxlcyBiYWNrZW5kIGVycm9ycyByZXNwb25kcy5cblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gYCR7c05vcm1hbGl6ZWQgPyBgJHtzTm9ybWFsaXplZH0gYCA6IFwiXCJ9XCIke3NDdXJyZW50V29yZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoYmluZGluZ0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IG1vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IGVudGl0eVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3QgZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChlbnRpdHlQYXRoKSk7XG5cdGF3YWl0IGJpbmRpbmdDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShkYXRhTW9kZWwudGFyZ2V0RW50aXR5VHlwZS5rZXlzWzBdPy5uYW1lKTtcbn1cblxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBib29sZWFuIHtcblx0bGV0IGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IGZhbHNlO1xuXHRpZiAob0xpc3RCaW5kaW5nKSB7XG5cdFx0b0xpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLmZvckVhY2goZnVuY3Rpb24gKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuXG4vLyB0aGVyZSBpcyBubyBuYXZpZ2F0aW9uIGluIGVudGl0eVNldCBwYXRoIGFuZCBwcm9wZXJ0eSBwYXRoXG5cbmFzeW5jIGZ1bmN0aW9uIF9nZXRTT0ludGVudHMoXG5cdG9TaGVsbFNlcnZpY2VIZWxwZXI6IElTaGVsbFNlcnZpY2VzLFxuXHRvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0b1NlbWFudGljT2JqZWN0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG9QYXJhbTogb2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdHJldHVybiBvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzKFtcblx0XHR7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0cGFyYW1zOiBvUGFyYW1cblx0XHR9XG5cdF0pO1xufVxuXG50eXBlIFNPTWFwcGluZyA9IHsgTG9jYWxQcm9wZXJ0eTogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTsgU2VtYW50aWNPYmplY3RQcm9wZXJ0eTogdW5rbm93biB9O1xuLy8gVE8tRE8gYWRkIHRoaXMgYXMgcGFydCBvZiBhcHBseVNlbWFudGljT2JqZWN0bWFwcGluZ3MgbG9naWMgaW4gSW50ZW50QmFzZWRuYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5mdW5jdGlvbiBfY3JlYXRlTWFwcGluZ3Mob01hcHBpbmc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogU09NYXBwaW5nW10ge1xuXHRjb25zdCBhU09NYXBwaW5nczogU09NYXBwaW5nW10gPSBbXTtcblx0Y29uc3QgYU1hcHBpbmdLZXlzID0gT2JqZWN0LmtleXMob01hcHBpbmcpO1xuXHRsZXQgb1NlbWFudGljTWFwcGluZzogU09NYXBwaW5nO1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYU1hcHBpbmdLZXlzKSB7XG5cdFx0b1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogZWxlbWVudFxuXHRcdFx0fSxcblx0XHRcdFNlbWFudGljT2JqZWN0UHJvcGVydHk6IG9NYXBwaW5nW2VsZW1lbnRdXG5cdFx0fTtcblx0XHRhU09NYXBwaW5ncy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHR9XG5cblx0cmV0dXJuIGFTT01hcHBpbmdzO1xufVxudHlwZSBTZW1hbnRpY0l0ZW0gPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xuXHR0YXJnZXRQYXJhbXM6IHVua25vd247XG59O1xuLyoqXG4gKiBAcGFyYW0gbGlua0dyb3VwXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqIEBwYXJhbSBhQWxsb3dlZEFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKFxuXHRsaW5rR3JvdXA6IExpbmtbXVtdLFxuXHRhRXhjbHVkZWRBY3Rpb25zOiB1bmtub3duW10sXG5cdG9UYXJnZXRQYXJhbXM6IHVua25vd24sXG5cdGFJdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFBbGxvd2VkQWN0aW9ucz86IHVua25vd25bXVxuKTogdm9pZCB7XG5cdGZvciAoY29uc3QgbGlua3Mgb2YgbGlua0dyb3VwKSB7XG5cdFx0Zm9yIChjb25zdCBvTGluayBvZiBsaW5rcykge1xuXHRcdFx0Y29uc3Qgc0ludGVudCA9IG9MaW5rLmludGVudDtcblx0XHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChhQWxsb3dlZEFjdGlvbnMgJiYgYUFsbG93ZWRBY3Rpb25zLmluY2x1ZGVzKHNBY3Rpb24pKSB8fFxuXHRcdFx0XHQoIWFBbGxvd2VkQWN0aW9ucyAmJiBhRXhjbHVkZWRBY3Rpb25zICYmICFhRXhjbHVkZWRBY3Rpb25zLmluY2x1ZGVzKHNBY3Rpb24pKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFJdGVtcy5wdXNoKHtcblx0XHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHRcdHRhcmdldFNlbU9iamVjdDogc0ludGVudC5zcGxpdChcIiNcIilbMV0uc3BsaXQoXCItXCIpWzBdLFxuXHRcdFx0XHRcdHRhcmdldEFjdGlvbjogc0FjdGlvbi5zcGxpdChcIn5cIilbMF0sXG5cdFx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBTZW1hbnRpY09iamVjdCA9IHtcblx0YWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW107XG5cdHVuYXZhaWxhYmxlQWN0aW9ucz86IHVua25vd25bXTtcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0cGF0aDogc3RyaW5nO1xuXHRtYXBwaW5nPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkSW50ZW50cyhcblx0b0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFNlbWFudGljT2JqZWN0LFxuXHRvQmluZGluZ0NvbnRleHQ6IENvbnRleHQsXG5cdGFNYW5pZmVzdFNPSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhTGlua3M6IExpbmtbXVtdXG4pOiB2b2lkIHtcblx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFBbGxvd2VkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLmFsbG93ZWRBY3Rpb25zIHx8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBhRXhjbHVkZWRBY3Rpb25zID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zID8gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMudW5hdmFpbGFibGVBY3Rpb25zIDogW107XG5cdFx0Y29uc3QgYVNPTWFwcGluZ3MgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nID8gX2NyZWF0ZU1hcHBpbmdzKG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcpIDogW107XG5cdFx0Y29uc3Qgb1RhcmdldFBhcmFtcyA9IHsgbmF2aWdhdGlvbkNvbnRleHRzOiBvQmluZGluZ0NvbnRleHQsIHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNPTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhTWFuaWZlc3RTT0l0ZW1zLCBhQWxsb3dlZEFjdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBmZXRjaGVzIHRoZSByZWxhdGVkIGludGVudHMgd2hlbiBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBhcmUgcGFzc2VkIGZyb20gZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSBvbmx5IGluIGNhc2Ugb2YgTXkgSW5ib3ggaW50ZWdyYXRpb24uXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3RBbmRBY3Rpb24gVGhpcyBzcGVjaWZpZXMgdGhlIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciBmZXRjaGluZyB0aGUgaW50ZW50c1xuICogQHBhcmFtIG9CaW5kaW5nQ29udGV4dCBUaGlzIHNlcGNpZmllcyB0aGUgYmluZGluZyBjb250ZXh0IGZvciB1cGRhdGluZyByZWxhdGVkIGFwcHNcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRTT0l0ZW1zIFRoaXMgaXMgYSBsaXN0IG9mIHNlbWFudGljIGl0ZW1zIHVzZWQgZm9yIHVwZGF0aW5nIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uXG4gKiBAcGFyYW0gYUxpbmtzIFRoaXMgaXMgYW4gYXJyYXkgY29tcHJpc2luZyBvZiByZWxhdGVkIGludGVudHNcbiAqL1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKFxuXHRzZW1hbnRpY09iamVjdEFuZEFjdGlvbjogTXlJbmJveEludGVudCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFjdGlvbnMgPSBbc2VtYW50aWNPYmplY3RBbmRBY3Rpb24uYWN0aW9uXTtcblx0XHRjb25zdCBleGNsdWRlZEFjdGlvbnM6IFtdID0gW107XG5cdFx0Y29uc3Qgc29NYXBwaW5nczogW10gPSBbXTtcblx0XHRjb25zdCB0YXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IHNvTWFwcGluZ3MgfTtcblx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBleGNsdWRlZEFjdGlvbnMsIHRhcmdldFBhcmFtcywgYXBwQ29tcG9uZW50U09JdGVtcywgYWN0aW9ucyk7XG5cdH1cbn1cblxudHlwZSBTZW1hbnRpY09iamVjdENvbmZpZyA9IHtcblx0YWRkaXRpb25hbFNlbWFudGljT2JqZWN0czogUmVjb3JkPHN0cmluZywgU2VtYW50aWNPYmplY3Q+O1xufTtcbnR5cGUgUmVsYXRlZEFwcHNDb25maWcgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0dGFyZ2V0U2VtT2JqZWN0OiBzdHJpbmc7XG5cdHRhcmdldEFjdGlvbjogc3RyaW5nO1xufTtcbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRvRW50cnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRvT2JqZWN0UGFnZUxheW91dDogT2JqZWN0UGFnZUxheW91dCxcblx0YVNlbUtleXM6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9NZXRhUGF0aDogc3RyaW5nLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudFxuKTogUHJvbWlzZTxSZWxhdGVkQXBwc0NvbmZpZ1tdPiB7XG5cdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXI6IElTaGVsbFNlcnZpY2VzID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0Y29uc3Qgb1BhcmFtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRsZXQgc0N1cnJlbnRTZW1PYmogPSBcIlwiLFxuXHRcdHNDdXJyZW50QWN0aW9uID0gXCJcIjtcblx0bGV0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xuXHRsZXQgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBSZWxhdGVkQXBwc0NvbmZpZ1tdID0gW107XG5cdGxldCBhRXhjbHVkZWRBY3Rpb25zOiB1bmtub3duW10gPSBbXTtcblx0bGV0IGFNYW5pZmVzdFNPS2V5czogc3RyaW5nW107XG5cblx0YXN5bmMgZnVuY3Rpb24gZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKCk6IFByb21pc2U8TGlua1tdW10+IHtcblx0XHRjb25zdCBvUGFyc2VkVXJsID0gb1NoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRzQ3VycmVudFNlbU9iaiA9IG9QYXJzZWRVcmwuc2VtYW50aWNPYmplY3Q7IC8vIEN1cnJlbnQgU2VtYW50aWMgT2JqZWN0XG5cdFx0c0N1cnJlbnRBY3Rpb24gPSBvUGFyc2VkVXJsLmFjdGlvbjtcblx0XHRyZXR1cm4gX2dldFNPSW50ZW50cyhvU2hlbGxTZXJ2aWNlSGVscGVyLCBvT2JqZWN0UGFnZUxheW91dCwgc0N1cnJlbnRTZW1PYmosIG9QYXJhbSk7XG5cdH1cblxuXHR0cnkge1xuXHRcdGlmIChvRW50cnkpIHtcblx0XHRcdGlmIChhU2VtS2V5cyAmJiBhU2VtS2V5cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhU2VtS2V5cykge1xuXHRcdFx0XHRcdGNvbnN0IHNTZW1LZXkgPSBlbGVtZW50LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc1NlbUtleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzU2VtS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzU2VtS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0XHRpZiAoIW9QYXJhbVtzT2JqS2V5XSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtW3NPYmpLZXldID0geyB2YWx1ZTogb0VudHJ5W3NPYmpLZXldIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIExvZ2ljIHRvIHJlYWQgYWRkaXRpb25hbCBTTyBmcm9tIG1hbmlmZXN0IGFuZCB1cGRhdGVkIHJlbGF0ZWRhcHBzIG1vZGVsXG5cblx0XHRjb25zdCBvTWFuaWZlc3REYXRhID0gZ2V0VGFyZ2V0VmlldyhvT2JqZWN0UGFnZUxheW91dCkuZ2V0Vmlld0RhdGEoKSBhcyBTZW1hbnRpY09iamVjdENvbmZpZztcblx0XHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGxldCBzZW1hbnRpY09iamVjdEludGVudHM7XG5cdFx0aWYgKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cykge1xuXHRcdFx0YU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhTWFuaWZlc3RTT0tleXMpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGVsZW1lbnQsIG9QYXJhbSkpO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEludGVudHMoXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2VsZW1lbnRdLFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50c1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGFwcENvbXBvbmVudFNPSXRlbXMgaXMgdXBkYXRlZCBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgbWV0aG9kXG5cdFx0Ly8gSW4gb3RoZXIgY2FzZXMgaXQgcmVtYWlucyBhcyBhbiBlbXB0eSBsaXN0XG5cdFx0Ly8gV2UgY29uY2F0IHRoaXMgbGlzdCB0b3dhcmRzIHRoZSBlbmQgd2l0aCBhTWFuaWZlc3RTT0l0ZW1zXG5cblx0XHRjb25zdCBhcHBDb21wb25lbnRTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdGNvbnN0IGNvbXBvbmVudERhdGE6IENvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdGlmIChjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQgJiYgY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpKSB7XG5cdFx0XHRjb25zdCBpbnRlbnQ6IE15SW5ib3hJbnRlbnQgPSBjb21wb25lbnREYXRhLmZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCk7XG5cdFx0XHRzZW1hbnRpY09iamVjdEludGVudHMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRcdF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIGludGVudC5zZW1hbnRpY09iamVjdCwgb1BhcmFtKVxuXHRcdFx0KTtcblx0XHRcdF9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24oaW50ZW50LCBvQmluZGluZ0NvbnRleHQsIGFwcENvbXBvbmVudFNPSXRlbXMsIHNlbWFudGljT2JqZWN0SW50ZW50cyk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSBvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IGFMaW5rcyA9IGF3YWl0IGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpO1xuXHRcdGlmIChhTGlua3MpIHtcblx0XHRcdGlmIChhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRsZXQgaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID0gZmFsc2U7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXRQYXJhbXM6IHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM/OiBDb250ZXh0O1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZz86IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHRcdFx0fSA9IHt9O1xuXHRcdFx0XHRjb25zdCBhQW5ub3RhdGlvbnNTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSA9IFtdO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGAke29NZXRhUGF0aH1AYDtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVR5cGVQYXRoID0gYCR7b01ldGFQYXRofS9AYDtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMsIHNDdXJyZW50U2VtT2JqKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRcdFx0Ly9Ta2lwIHNhbWUgYXBwbGljYXRpb24gZnJvbSBSZWxhdGVkIEFwcHNcblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucy5wdXNoKHNDdXJyZW50QWN0aW9uKTtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5uYXZpZ2F0aW9uQ29udGV4dHMgPSBvQmluZGluZ0NvbnRleHQ7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMuc2VtYW50aWNPYmplY3RNYXBwaW5nID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzO1xuXHRcdFx0XHRfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMoYUxpbmtzLCBhRXhjbHVkZWRBY3Rpb25zLCBvVGFyZ2V0UGFyYW1zLCBhQW5ub3RhdGlvbnNTT0l0ZW1zKTtcblxuXHRcdFx0XHRhTWFuaWZlc3RTT0l0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHsgdGFyZ2V0U2VtT2JqZWN0IH0pIHtcblx0XHRcdFx0XHRpZiAoYUFubm90YXRpb25zU09JdGVtc1swXT8udGFyZ2V0U2VtT2JqZWN0ID09PSB0YXJnZXRTZW1PYmplY3QpIHtcblx0XHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGFjdGlvbnMgZnJvbSBjdXJyZW50IGhhc2ggYXBwbGljYXRpb24gaWYgbWFuaWZlc3QgY29udGFpbnMgZW1wdHkgYWxsb3dlZEFjdGlvbnNcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyAmJlxuXHRcdFx0XHRcdGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdICYmXG5cdFx0XHRcdFx0ISFvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHNbYUFubm90YXRpb25zU09JdGVtc1swXS50YXJnZXRTZW1PYmplY3RdLmFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc29JdGVtcyA9IGFNYW5pZmVzdFNPSXRlbXMuY29uY2F0KGFwcENvbXBvbmVudFNPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPyBzb0l0ZW1zIDogc29JdGVtcy5jb25jYXQoYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdC8vIElmIG5vIGFwcCBpbiBsaXN0LCByZWxhdGVkIGFwcHMgYnV0dG9uIHdpbGwgYmUgaGlkZGVuXG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBmYWxzZSk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdH1cblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cblxuZnVuY3Rpb24gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMoXG5cdG9FbnRpdHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdHNDdXJyZW50U2VtT2JqOiBzdHJpbmdcbik6IHtcblx0Ykhhc0VudGl0eVNldFNPOiBib29sZWFuO1xuXHRhQWxsb3dlZEFjdGlvbnM6IHN0cmluZ1tdO1xuXHRhVW5hdmFpbGFibGVBY3Rpb25zOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zPltdO1xuXHRhTWFwcGluZ3M6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcbn0ge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFBbGxvd2VkQWN0aW9uczogW10sXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXSxcblx0XHRhTWFwcGluZ3M6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmNsdWRlcyhDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpICYmIG9FbnRpdHlBbm5vdGF0aW9uc1trZXldID09PSBzQ3VycmVudFNlbU9iaikge1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPID0gdHJ1ZTtcblx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0TWFwcGluZ31gO1xuXHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc31gO1xuXG5cdFx0XHRpZiAoa2V5LmluY2x1ZGVzKFwiI1wiKSkge1xuXHRcdFx0XHRzUXVhbGlmaWVyID0ga2V5LnNwbGl0KFwiI1wiKVsxXTtcblx0XHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IGAke3NBbm5vdGF0aW9uTWFwcGluZ1Rlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBgJHtzQW5ub3RhdGlvbkFjdGlvblRlcm19IyR7c1F1YWxpZmllcn1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXSkge1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucy5jb25jYXQoXG5cdFx0XHRcdFx0b0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSAob09iamVjdFBhZ2VMYXlvdXQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0Y29uc3QgcGF0aCA9IChvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKSkgfHwgXCJcIjtcblx0Y29uc3Qgb01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXRoKTtcblx0Ly8gU2VtYW50aWMgS2V5IFZvY2FidWxhcnlcblx0Y29uc3Qgc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSA9IGAke29NZXRhUGF0aH0vYCArIGBAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YDtcblx0Ly9TZW1hbnRpYyBLZXlzXG5cdGNvbnN0IGFTZW1LZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1NlbWFudGljS2V5Vm9jYWJ1bGFyeSk7XG5cdC8vIFVuYXZhaWxhYmxlIEFjdGlvbnNcblx0Y29uc3Qgb0VudHJ5ID0gb0JpbmRpbmdDb250ZXh0Py5nZXRPYmplY3QoKTtcblx0aWYgKCFvRW50cnkgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0b0JpbmRpbmdDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihhc3luYyBmdW5jdGlvbiAocmVxdWVzdGVkT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKFxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRyZXF1ZXN0ZWRPYmplY3QsXG5cdFx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQsXG5cdFx0XHRcdFx0YVNlbUtleXMsXG5cdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRvTWV0YVBhdGgsXG5cdFx0XHRcdFx0YXBwQ29tcG9uZW50XG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVSZWxhdGVBcHBzTW9kZWwob0JpbmRpbmdDb250ZXh0LCBvRW50cnksIG9PYmplY3RQYWdlTGF5b3V0LCBhU2VtS2V5cywgb01ldGFNb2RlbCwgb01ldGFQYXRoLCBhcHBDb21wb25lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIG9CdXR0b25cbiAqL1xuZnVuY3Rpb24gZm5GaXJlQnV0dG9uUHJlc3Mob0J1dHRvbj86IENvbnRyb2wpOiB2b2lkIHtcblx0aWYgKFxuXHRcdG9CdXR0b24gJiZcblx0XHRvQnV0dG9uLmlzQTxCdXR0b24gfCBPdmVyZmxvd1Rvb2xiYXJCdXR0b24+KFtcInNhcC5tLkJ1dHRvblwiLCBcInNhcC5tLk92ZXJmbG93VG9vbGJhckJ1dHRvblwiXSkgJiZcblx0XHRvQnV0dG9uLmdldFZpc2libGUoKSAmJlxuXHRcdG9CdXR0b24uZ2V0RW5hYmxlZCgpXG5cdCkge1xuXHRcdG9CdXR0b24uZmlyZVByZXNzKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBDb250cm9sIHwgQ29tcG9uZW50KTogQXBwQ29tcG9uZW50IHtcblx0aWYgKG9Db250cm9sLmlzQTxBcHBDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgc2hvdWxkIGJlIGEgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIG93bmVyIG9mIHRoZSBjb250cm9sXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFnZVZpZXcob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogRkVWaWV3IHtcblx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0cmV0dXJuIHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdDogQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldygob0FwcENvbXBvbmVudC5nZXRSb290Q29udGFpbmVyKCkgYXMgTmF2Q29udGFpbmVyKS5nZXRDdXJyZW50UGFnZSgpKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0VmlldyhvQ29udHJvbDogTWFuYWdlZE9iamVjdCB8IG51bGwpOiBGRVZpZXcge1xuXHRpZiAob0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBPENvbXBvbmVudENvbnRhaW5lcj4oXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2wuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRvQ29udHJvbCA9IG9Db21wb25lbnQgJiYgb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhb0NvbnRyb2wuaXNBPEZFVmlldz4oXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdG9Db250cm9sID0gb0NvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdH1cblx0cmV0dXJuIG9Db250cm9sITtcbn1cblxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IG9iamVjdCwgb0tleXNUb0NoZWNrOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0tleXNUb0NoZWNrKSB7XG5cdFx0aWYgKG9LZXlzVG9DaGVja1tzS2V5XSAhPT0gb09iamVjdFtzS2V5IGFzIGtleW9mIHR5cGVvZiBvT2JqZWN0XSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMoXG5cdG1ldGFNb2RlbENvbnRleHQ6IE9EYXRhTWV0YU1vZGVsLFxuXHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b0ZpbHRlcj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4ge1xuXHRjb25zdCBvRW50aXR5VHlwZTogTWV0YU1vZGVsRW50aXR5VHlwZSA9IChtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L2ApIHx8IHt9KSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlLFxuXHRcdG9Qcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT4gfCBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZm5HZXRJQk5BY3Rpb25zKG9Db250cm9sOiBUYWJsZSB8IE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgfCBPYmplY3RQYWdlU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSk6IFVJNUVsZW1lbnRbXSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uKSB7XG5cdFx0XHRpZiAob0FjdGlvbi5pc0E8QWN0aW9uVG9vbGJhckFjdGlvbj4oXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXIuQWN0aW9uVG9vbGJhckFjdGlvblwiKSkge1xuXHRcdFx0XHRvQWN0aW9uID0gb0FjdGlvbi5nZXRBY3Rpb24oKTtcblx0XHRcdH1cblx0XHRcdGlmIChvQWN0aW9uLmlzQTxNZW51QnV0dG9uPihcInNhcC5tLk1lbnVCdXR0b25cIikpIHtcblx0XHRcdFx0Y29uc3Qgb01lbnUgPSBvQWN0aW9uLmdldE1lbnUoKTtcblx0XHRcdFx0Y29uc3QgYUl0ZW1zID0gb01lbnUuZ2V0SXRlbXMoKTtcblx0XHRcdFx0YUl0ZW1zLmZvckVhY2goKG9JdGVtKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG9JdGVtLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9JdGVtKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChvQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpKSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zLnB1c2gob0FjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFJQk5BY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSwgb1ZpZXc6IFZpZXcpOiB2b2lkIHtcblx0Y29uc3Qgb1BhcmFtczogUmVjb3JkPHN0cmluZywgeyB2YWx1ZTogdW5rbm93biB9PiA9IHt9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3QgaXNTdGlja3kgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9WaWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAob0RhdGEpIHtcblx0XHRcdGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMob0RhdGEpO1xuXHRcdFx0YUtleXMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogc3RyaW5nKSB7XG5cdFx0XHRcdGlmIChzS2V5LmluZGV4T2YoXCJfXCIpICE9PSAwICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbikge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHQuZ2V0U2hlbGxTZXJ2aWNlcygpXG5cdFx0XHRcdFx0LmdldExpbmtzKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluayk6IHZvaWQge1xuXHRcdFx0XHRcdFx0aWYgKG9JQk5BY3Rpb24uaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkge1xuXHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxICYmIGFMaW5rWzBdICYmIGFMaW5rWzBdLmxlbmd0aCA9PT0gMVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKGlzU3RpY2t5KSB7XG5cdFx0XHRcdFx0XHRcdChvSUJOQWN0aW9uLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uZ2V0SWQoKS5zcGxpdChcIi0tXCIpWzFdLFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHNoZWxsTmF2aWdhdGlvbk5vdEF2YWlsYWJsZTogIShhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0KG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm5HZXRMaW5rcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFjdGlvblBhdGgoXG5cdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGJSZXR1cm5Pbmx5UGF0aDogYm9vbGVhbixcblx0aW5BY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRiQ2hlY2tTdGF0aWNWYWx1ZT86IGJvb2xlYW5cbik6XG5cdHwgc3RyaW5nXG5cdHwge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzdHJpbmc7XG5cdFx0XHRzUHJvcGVydHk6IHN0cmluZztcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBzdHJpbmc7XG5cdCAgfSB7XG5cdGNvbnN0IHNBY3Rpb25OYW1lOiBzdHJpbmcgPSAhaW5BY3Rpb25OYW1lID8gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYWN0aW9uQ29udGV4dC5nZXRQYXRoKCkpLnRvU3RyaW5nKCkgOiBpbkFjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBhY3Rpb25Db250ZXh0LmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSAoYWN0aW9uQ29udGV4dC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoKSBhcyBNZXRhTW9kZWxFbnRpdHlUeXBlKS4kVHlwZTtcblx0Y29uc3Qgc0VudGl0eU5hbWUgPSBnZXRFbnRpdHlTZXROYW1lKGFjdGlvbkNvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbCwgc0VudGl0eVR5cGVOYW1lKTtcblx0aWYgKHNFbnRpdHlOYW1lKSB7XG5cdFx0c0NvbnRleHRQYXRoID0gYC8ke3NFbnRpdHlOYW1lfWA7XG5cdH1cblx0aWYgKGJDaGVja1N0YXRpY1ZhbHVlKSB7XG5cdFx0cmV0dXJuIGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlYCk7XG5cdH1cblx0aWYgKGJSZXR1cm5Pbmx5UGF0aCkge1xuXHRcdHJldHVybiBgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9YDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1AT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlLyRQYXRoYCksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfS9AJHVpNS5vdmVybG9hZC8wLyRQYXJhbWV0ZXIvMC8kTmFtZWApXG5cdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRvQ29sbGVjdGlvbkFubm90YXRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFwiRGVzY3JpcHRpb25cIiB8IFwiVmFsdWVEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZVwiIHwgXCJEZXNjcmlwdGlvblZhbHVlXCIge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IChvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRcdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSkpIGFzIE1ldGFNb2RlbEVudW08VGV4dEFycmFuZ2VtZW50PjtcblxuXHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24pIHtcblx0XHRpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZURlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRTZXBhcmF0ZVwiKSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0XHQvL0RlZmF1bHQgc2hvdWxkIGJlIFRleHRGaXJzdCBpZiB0aGVyZSBpcyBhIFRleHQgYW5ub3RhdGlvbiBhbmQgbmVpdGhlciBUZXh0T25seSBub3IgVGV4dExhc3QgYXJlIHNldFxuXHRcdHJldHVybiBcIkRlc2NyaXB0aW9uVmFsdWVcIjtcblx0fVxuXHRyZXR1cm4gb1RleHRBbm5vdGF0aW9uID8gXCJEZXNjcmlwdGlvblZhbHVlXCIgOiBcIlZhbHVlXCI7XG59XG5cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpfS8kVHlwZWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBfcmVxdWVzdE9iamVjdChzQWN0aW9uOiBzdHJpbmcsIG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBzUHJvcGVydHk6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cblxuZXhwb3J0IHR5cGUgX1JlcXVlc3RlZFByb3BlcnR5ID0ge1xuXHR2UHJvcGVydHlWYWx1ZTogdW5rbm93bjtcblx0b1NlbGVjdGVkQ29udGV4dDogQ29udGV4dDtcblx0c0FjdGlvbjogc3RyaW5nO1xuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmc7XG59O1xuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFByb3BlcnR5KFxuXHRvU2VsZWN0ZWRDb250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0c0FjdGlvbjogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT4ge1xuXHRjb25zdCBvUHJvbWlzZSA9XG5cdFx0c1Byb3BlcnR5ICYmIHNQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA9PT0gMFxuXHRcdFx0PyByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkoc1Byb3BlcnR5LCBvU2VsZWN0ZWRDb250ZXh0LmdldE1vZGVsKCkpXG5cdFx0XHQ6IF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb24sIG9TZWxlY3RlZENvbnRleHQsIHNQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIG9Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHZQcm9wZXJ0eVZhbHVlOiB2UHJvcGVydHlWYWx1ZSxcblx0XHRcdG9TZWxlY3RlZENvbnRleHQ6IG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRzQWN0aW9uOiBzQWN0aW9uLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aDogc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aFxuXHRcdH07XG5cdH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoXG5cdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzKTogdm9pZCB7XG5cdFx0XHRpZiAoYVJlc3VsdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IGFBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IHVua25vd25bXSA9IFtdO1xuXHRcdFx0XHRhUmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRcdGlmIChhUmVzdWx0LnZQcm9wZXJ0eVZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KGFSZXN1bHQuc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKFxuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRhUmVzdWx0c1swXS5zQWN0aW9uLFxuXHRcdFx0XHRcdGFBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uXG4gKiBAcGFyYW0gYXBwbGljYWJsZVxuICogQHBhcmFtIG5vdEFwcGxpY2FibGVcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICovXG5mdW5jdGlvbiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdGFwcGxpY2FibGU6IHVua25vd25bXSxcblx0bm90QXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiB2b2lkIHtcblx0Y29uc3QgZHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2R5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsXG5cdFx0aW50ZXJuYWxNb2RlbCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCksXG5cdFx0YXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhQXBwbGljYWJsZVwiIDogXCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51XCIsXG5cdFx0bm90QXBwbGljYWJsZVByb3BlcnR5ID0gIWZvckNvbnRleHRNZW51ID8gXCJhTm90QXBwbGljYWJsZVwiIDogXCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51XCI7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7YXBwbGljYWJsZVByb3BlcnR5fWAsIGFwcGxpY2FibGUpO1xuXHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAke2R5bmFtaWNBY3Rpb25QYXRoUHJlZml4fS8ke25vdEFwcGxpY2FibGVQcm9wZXJ0eX1gLCBub3RBcHBsaWNhYmxlKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihhRXhwcmVzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogc3RyaW5nLCBiOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gcmV0dXJuIGFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWQuXG4gKiBAcmV0dXJucyBBbGxvd2VkIG9wZXJhdG9ycyBmb3IgdHlwZSBHdWlkXG4gKi9cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSgpOiBzdHJpbmcge1xuXHRjb25zdCBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZCA9IFtcIkVRXCIsIFwiTkVcIl07XG5cdHJldHVybiBhbGxvd2VkT3BlcmF0b3JzRm9yR3VpZC50b1N0cmluZygpO1xufVxuXG50eXBlIFBhcmFtZXRlckluZm8gPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRwYXJhbWV0ZXJQcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+O1xufTtcbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8obWV0YU1vZGVsQ29udGV4dDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKTogUGFyYW1ldGVySW5mbyB7XG5cdGNvbnN0IHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IHNDb250ZXh0UGF0aC5zdWJzdHJpbmcoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gbWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlckNvbnRleHRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IFBhcmFtZXRlckluZm8gPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhtZXRhTW9kZWxDb250ZXh0LCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpIGFzIFJlY29yZDxcblx0XHRcdHN0cmluZyxcblx0XHRcdE1ldGFNb2RlbFByb3BlcnR5XG5cdFx0Pjtcblx0fVxuXHRyZXR1cm4gb1BhcmFtZXRlckluZm87XG59XG5cbnR5cGUgVmlld0RhdGEgPSB7XG5cdGNvbnRyb2xDb25maWd1cmF0aW9uPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG1QYWdlQ29udGV4dDogdW5rbm93bltdLCBvVmlldzogVmlldyk6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IChvQ29udHJvbC5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbCkuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG5cbmV4cG9ydCB0eXBlIFVzZXJEZWZhdWx0UGFyYW1ldGVyID0gRWRtQWN0aW9uUGFyYW1ldGVyIHwgQ29udGV4dDtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZGVmYXVsdHMgZnJvbSB0aGUgc3RhcnR1cCBhcHAgc3RhdGUgKGlmIGF2YWlsYWJsZSkgb3IgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGFuZCBzZXRzIHRoZW0gdG8gYSBtb2RlbC5cbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gbW9kZWxcbiAqIEBwYXJhbSBpc0FjdGlvblxuICogQHBhcmFtIGlzQ3JlYXRlXG4gKiBAcGFyYW0gYWN0aW9uRGVmYXVsdFZhbHVlc1xuICovXG5hc3luYyBmdW5jdGlvbiBzZXRVc2VyRGVmYXVsdHMoXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYXJhbWV0ZXJzOiBVc2VyRGVmYXVsdFBhcmFtZXRlcltdLFxuXHRtb2RlbDogSlNPTk1vZGVsIHwgT0RhdGFWNENvbnRleHQsXG5cdGlzQWN0aW9uOiBib29sZWFuLFxuXHRpc0NyZWF0ZT86IGJvb2xlYW4sXG5cdGFjdGlvbkRlZmF1bHRWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGNvbnN0IEJhc2VUeXBlID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvZW51bXMvQmFzZVR5cGVcIikpLmRlZmF1bHQ7XG5cdGNvbnN0IFR5cGVNYXAgPSAoYXdhaXQgaW1wb3J0KFwic2FwL3VpL21kYy9vZGF0YS92NC9UeXBlTWFwXCIpKS5kZWZhdWx0O1xuXG5cdGNvbnN0IGNvbXBvbmVudERhdGEgPSBhcHBDb21wb25lbnQuZ2V0Q29tcG9uZW50RGF0YSgpLFxuXHRcdHN0YXJ0dXBQYXJhbWV0ZXJzID0gKGNvbXBvbmVudERhdGEgJiYgY29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30sXG5cdFx0c2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IHN0YXJ0dXBBcHBTdGF0ZSA9IGF3YWl0IHNoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKGFwcENvbXBvbmVudCk7XG5cdGNvbnN0IHN0YXJ0dXBBcHBTdGF0ZURhdGEgPSBzdGFydHVwQXBwU3RhdGU/LmdldERhdGEoKSB8fCB7fSxcblx0XHRleHRlbmRlZFBhcmFtZXRlcnMgPSAoc3RhcnR1cEFwcFN0YXRlRGF0YS5zZWxlY3Rpb25WYXJpYW50ICYmIHN0YXJ0dXBBcHBTdGF0ZURhdGEuc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB8fCBbXTtcblx0cGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGlzQWN0aW9uXG5cdFx0XHQ/IGAvJHsob1BhcmFtZXRlciBhcyB7IG5hbWU6IHN0cmluZyB9KS5uYW1lfWBcblx0XHRcdDogKG9QYXJhbWV0ZXIgYXMgQ29udGV4dCkuZ2V0UGF0aD8uKCkuc2xpY2UoKG9QYXJhbWV0ZXIgYXMgQ29udGV4dCkuZ2V0UGF0aCgpLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gaXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoYWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBpc0NyZWF0ZSkge1xuXHRcdFx0aWYgKGFjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIGFjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHN0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVydFR5cGUgPSAoXG5cdFx0XHRcdG9QYXJhbWV0ZXIgYXMge1xuXHRcdFx0XHRcdG5hbWU6IHN0cmluZztcblx0XHRcdFx0XHR0eXBlPzogc3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHQpLnR5cGVcblx0XHRcdFx0PyBUeXBlTWFwLmdldEJhc2VUeXBlKFxuXHRcdFx0XHRcdFx0KFxuXHRcdFx0XHRcdFx0XHRvUGFyYW1ldGVyIGFzIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQpLnR5cGVcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogQmFzZVR5cGUuU3RyaW5nO1xuXHRcdFx0Y29uc3QgdHlwZUluc3RhbmNlID0gVHlwZU1hcC5nZXREYXRhVHlwZUluc3RhbmNlKHBhcmFtZXRlcnRUeXBlKTtcblx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIHR5cGVJbnN0YW5jZS5wYXJzZVZhbHVlKHN0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXVswXSwgXCJzdHJpbmdcIikpO1xuXHRcdH0gZWxzZSBpZiAoZXh0ZW5kZWRQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3Qgb0V4dGVuZGVkUGFyYW1ldGVyIG9mIGV4dGVuZGVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRpZiAob0V4dGVuZGVkUGFyYW1ldGVyLlByb3BlcnR5TmFtZSA9PT0gc1BhcmFtZXRlck5hbWUpIHtcblx0XHRcdFx0XHRjb25zdCBvUmFuZ2UgPSBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aFxuXHRcdFx0XHRcdFx0PyBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzW29FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChvUmFuZ2UgJiYgb1JhbmdlLlNpZ24gPT09IFwiSVwiICYmIG9SYW5nZS5PcHRpb24gPT09IFwiRVFcIikge1xuXHRcdFx0XHRcdFx0bW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1JhbmdlLkxvdyk7IC8vIGhpZ2ggaXMgaWdub3JlZCB3aGVuIE9wdGlvbj1FUVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59XG5cbmV4cG9ydCB0eXBlIEluYm91bmRQYXJhbWV0ZXIgPSB7XG5cdHVzZUZvckNyZWF0ZTogYm9vbGVhbjtcbn07XG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKFxuXHRvU3RhcnR1cFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4sXG5cdG9JbmJvdW5kUGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIEluYm91bmRQYXJhbWV0ZXI+XG4pOiB1bmtub3duIHtcblx0Y29uc3Qgb0luYm91bmRzID0gb0luYm91bmRQYXJhbWV0ZXJzLFxuXHRcdGFDcmVhdGVQYXJhbWV0ZXJzID1cblx0XHRcdG9JbmJvdW5kcyAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gT2JqZWN0LmtleXMob0luYm91bmRzKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9JbmJvdW5kc1tzUGFyYW1ldGVyXS51c2VGb3JDcmVhdGU7XG5cdFx0XHRcdCAgfSlcblx0XHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAoY29uc3QgZWxlbWVudCBvZiBhQ3JlYXRlUGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHNDcmVhdGVQYXJhbWV0ZXIgPSBlbGVtZW50O1xuXHRcdGNvbnN0IGFWYWx1ZXMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NDcmVhdGVQYXJhbWV0ZXJdO1xuXHRcdGlmIChhVmFsdWVzICYmIGFWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRvUmV0ID0gb1JldCB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuXHRcdFx0b1JldFtzQ3JlYXRlUGFyYW1ldGVyXSA9IGFWYWx1ZXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUmV0O1xufVxudHlwZSBPdXRib3VuZFBhcmFtZXRlciA9IHtcblx0cGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZT47XG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRhY3Rpb24/OiBzdHJpbmc7XG59O1xudHlwZSBPdXRib3VuZFBhcmFtZXRlclZhbHVlID0ge1xuXHR2YWx1ZT86IHtcblx0XHR2YWx1ZT86IHN0cmluZztcblx0XHRmb3JtYXQ/OiBzdHJpbmc7XG5cdH07XG59O1xuZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9PdXRib3VuZDogT3V0Ym91bmRQYXJhbWV0ZXIpOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10gPSBbXTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9zdHJpY3QtYm9vbGVhbi1leHByZXNzaW9uc1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFTZW1hbnRpY09iamVjdE1hcHBpbmcpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuTG9jYWxQcm9wZXJ0eT8uJFByb3BlcnR5UGF0aCAhPT0gb1NlbWFudGljTWFwcGluZy5Mb2NhbFByb3BlcnR5LiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdG9Dcm9zc05hdjogUmVjb3JkPHN0cmluZywgT3V0Ym91bmRQYXJhbWV0ZXI+XG4pOiBSZWNvcmQ8XG5cdHN0cmluZyxcblx0e1xuXHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W107XG5cdH1cbj4ge1xuXHRjb25zdCBvSGVhZGVyRmFjZXRJdGVtczogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc3RyaW5nO1xuXHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZT5bXTtcblx0XHR9XG5cdD4gPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRuYXZpZ2F0aW9uPzoge1xuXHRcdFx0XHR0YXJnZXRPdXRib3VuZD86IHtcblx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9XG5cdD47XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgfHwgY29uZmlnLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpKSB7XG5cdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24/LnRhcmdldE91dGJvdW5kPy5vdXRib3VuZDtcblx0XHRcdGlmIChzT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciAke3NPdXRib3VuZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5cbmZ1bmN0aW9uIHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogdW5rbm93bik6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb01hcHBpbmdzKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdChlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0ZWxlbWVudFtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRpZiAob1NlbGVjdE9wdGlvbikge1xuXHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxudHlwZSBTZW1hbnRpY09iamVjdEZyb21QYXRoID0ge1xuXHRzZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH1bXTtcblx0c2VtYW50aWNPYmplY3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdDogeyAkUGF0aDogc3RyaW5nIH07XG5cdH07XG5cdHVuYXZhaWxhYmxlQWN0aW9uczogc3RyaW5nW107XG59O1xuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQYXRoOiBzdHJpbmcsXG5cdHNRdWFsaWZpZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGxldCBzU2VtYW50aWNPYmplY3QsIGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAoc1F1YWxpZmllciA9PT0gXCJcIikge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9IyR7c1F1YWxpZmllcn1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9IyR7c1F1YWxpZmllcn1gXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNQYXRoOiBzdHJpbmcsIHNRdWFsaWZpZXI6IHN0cmluZyk6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbCwgc1BhdGgsIHNRdWFsaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pOiBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHt9O1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHkgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uPzogTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPixcblx0c1Jlc3RyaWN0aW9uPzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dKSB7XG5cdFx0YVByb3BzID0gKFxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dIGFzIEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+W11cblx0XHQpLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPikge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhUHJvcHM7XG59XG5cbmZ1bmN0aW9uIF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKHBhdGhzOiBzdHJpbmdbXSwgbmF2UGF0aDogc3RyaW5nLCBwcm9wczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IG5hdlBhdGhQcmVmaXggPSBuYXZQYXRoICsgXCIvXCI7XG5cdHJldHVybiBwYXRocy5yZWR1Y2UoKG91dFBhdGhzOiBzdHJpbmdbXSwgcGF0aFRvQ2hlY2s6IHN0cmluZykgPT4ge1xuXHRcdGlmIChwYXRoVG9DaGVjay5zdGFydHNXaXRoKG5hdlBhdGhQcmVmaXgpKSB7XG5cdFx0XHRjb25zdCBvdXRQYXRoID0gcGF0aFRvQ2hlY2sucmVwbGFjZShuYXZQYXRoUHJlZml4LCBcIlwiKTtcblx0XHRcdGlmICghb3V0UGF0aHMuaW5jbHVkZXMob3V0UGF0aCkpIHtcblx0XHRcdFx0b3V0UGF0aHMucHVzaChvdXRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dFBhdGhzO1xuXHR9LCBwcm9wcyk7XG59XG50eXBlIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5leHBvcnQgdHlwZSBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRSZXF1aXJlZFByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogc3RyaW5nW107XG5cdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoZW50aXR5UGF0aDogc3RyaW5nLCBvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwpOiBfRmlsdGVyUmVzdHJpY3Rpb25zIHtcblx0Y29uc3Qgb1JldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdH07XG5cdGxldCBvRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGV4dCA9IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0Y29uc3QgZnJUZXJtID0gXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIjtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGhQYXJ0cyA9IGVudGl0eVBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikuc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9L2A7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGVudGl0eVBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aFBhcnRzID0gZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgaXNDb250YWlubWVudCA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH0kQ29udGFpbnNUYXJnZXRgKTtcblx0Y29uc3QgY29udGFpbm1lbnROYXZQYXRoID0gISFpc0NvbnRhaW5tZW50ICYmIGVudGl0eVR5cGVQYXRoUGFydHNbZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblxuXHQvL0xFQVNUIFBSSU9SSVRZIC0gRmlsdGVyIHJlc3RyaWN0aW9ucyBkaXJlY3RseSBhdCBFbnRpdHkgU2V0XG5cdC8vZS5nLiBGUiBpbiBcIk5TLkVudGl0eUNvbnRhaW5lci9TYWxlc09yZGVyTWFuYWdlXCIgQ29udGV4dFBhdGg6IC9TYWxlc09yZGVyTWFuYWdlXG5cdGlmICghaXNDb250YWlubWVudCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdGNvbnN0IHJlc3VsdENvbnRleHRDaGVjayA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRpZiAoIXJlc3VsdENvbnRleHRDaGVjaykge1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdH1cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zKSB8fCB7fTtcblx0fVxuXG5cdGlmIChlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRjb25zdCBuYXZQYXRoID0gaXNDb250YWlubWVudCA/IChjb250YWlubWVudE5hdlBhdGggYXMgc3RyaW5nKSA6IGVudGl0eVNldFBhdGhQYXJ0c1tlbnRpdHlTZXRQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb250YWlubWVudCB3ZSB0YWtlIGVudGl0eVNldCBwcm92aWRlZCBhcyBwYXJlbnQuIEFuZCBpbiBjYXNlIG9mIG5vcm1hbCB3ZSB3b3VsZCByZW1vdmUgdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIGVudGl0eVNldFBhdGguXG5cdFx0Y29uc3QgcGFyZW50RW50aXR5U2V0UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBlbnRpdHlTZXRQYXRoIDogYC8ke2VudGl0eVNldFBhdGhQYXJ0cy5zbGljZSgwLCAtMSkuam9pbihgLyR7bmF2aWdhdGlvblRleHR9L2ApfWA7XG5cdFx0Ly9USElSRCBISUdIRVNUIFBSSU9SSVRZIC0gUmVhZGluZyBwcm9wZXJ0eSBwYXRoIHJlc3RyaWN0aW9ucyAtIEFubm90YXRpb24gYXQgbWFpbiBlbnRpdHkgYnV0IGRpcmVjdGx5IG9uIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aFxuXHRcdC8vZS5nLiBQYXJlbnQgQ3VzdG9tZXIgd2l0aCBQcm9wZXJ0eVBhdGg9XCJTZXQvQ2l0eU5hbWVcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb1BhcmVudFJldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdFx0fTtcblx0XHRpZiAoIW5hdlBhdGguaW5jbHVkZXMoXCIlMkZcIikpIHtcblx0XHRcdGNvbnN0IG9QYXJlbnRGUiA9IG9Db250ZXh0LmdldE9iamVjdChgJHtwYXJlbnRFbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRjb25zdCBjb21wbGV0ZUFsbG93ZWRFeHBzID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob1BhcmVudEZSKSB8fCB7fTtcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gT2JqZWN0LmtleXMoY29tcGxldGVBbGxvd2VkRXhwcykucmVkdWNlKFxuXHRcdFx0XHQob3V0UHJvcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LCBwcm9wUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHByb3BQYXRoLnN0YXJ0c1dpdGgobmF2UGF0aCArIFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0UHJvcFBhdGggPSBwcm9wUGF0aC5yZXBsYWNlKG5hdlBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0XHRcdFx0XHRvdXRQcm9wW291dFByb3BQYXRoXSA9IGNvbXBsZXRlQWxsb3dlZEV4cHNbcHJvcFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3V0UHJvcDtcblx0XHRcdFx0fSxcblx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9TRUNPTkQgSElHSEVTVCBwcmlvcml0eSAtIE5hdmlnYXRpb24gcmVzdHJpY3Rpb25zXG5cdFx0Ly9lLmcuIFBhcmVudCBcIi9DdXN0b21lclwiIHdpdGggTmF2aWdhdGlvblByb3BlcnR5UGF0aD1cIlNldFwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvTmF2UmVzdHJpY3Rpb25zID0gTWV0YU1vZGVsRnVuY3Rpb24uZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvQ29udGV4dCwgcGFyZW50RW50aXR5U2V0UGF0aCwgbmF2UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKSk7XG5cdFx0Y29uc3Qgb05hdkZpbHRlclJlc3QgPSBvTmF2UmVzdHJpY3Rpb25zICYmIChvTmF2UmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pO1xuXHRcdGNvbnN0IG5hdlJlc1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdlJlc1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2Tm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2Tm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob05hdkZpbHRlclJlc3QpIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL0hJR0hFU1QgcHJpb3JpdHkgLSBSZXN0cmljdGlvbnMgaGF2aW5nIHRhcmdldCB3aXRoIG5hdmlnYXRpb24gYXNzb2NpYXRpb24gZW50aXR5XG5cdFx0Ly8gZS5nLiBGUiBpbiBcIkN1c3RvbWVyUGFyYW1ldGVycy9TZXRcIiBDb250ZXh0UGF0aDogXCJDdXN0b21lci9TZXRcIlxuXHRcdGNvbnN0IG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCA9IG9Db250ZXh0LmdldE9iamVjdChcblx0XHRcdGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfSR7ZnJUZXJtfWBcblx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT47XG5cdFx0Y29uc3QgbmF2QXNzb2NSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdkFzc29jTm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jTm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zLFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24obmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0KSB8fCB7fVxuXHRcdCkgYXMgX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cblxudHlwZSBQcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0YXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50O1xuXHRiaW5kaW5nQ29udGV4dHM6IG9iamVjdDtcblx0bW9kZWxzOiBvYmplY3Q7XG59O1xuZXhwb3J0IHR5cGUgQmFzZVRyZWVNb2RpZmllciA9IHtcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdFx0c0ZyYWdtZW50TmFtZTogc3RyaW5nLFxuXHRcdG1QcmVwcm9jZXNzb3JTZXR0aW5nczogUHJlcHJvY2Vzc29yU2V0dGluZ3MsXG5cdFx0b1ZpZXc/OiBWaWV3XG5cdCk6IFByb21pc2U8VUk1RWxlbWVudFtdIHwgRWxlbWVudFtdPjtcblx0dGFyZ2V0czogc3RyaW5nO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoXG5cdHNGcmFnbWVudE5hbWU6IHN0cmluZyxcblx0b1ByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0b09wdGlvbnM6IHsgdmlldz86IFZpZXc7IGlzWE1MPzogYm9vbGVhbjsgaWQ6IHN0cmluZzsgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgfCBFeHRlbnNpb25BUEk7IGNvbnRhaW5pbmdWaWV3PzogVmlldyB9LFxuXHRvTW9kaWZpZXI/OiBCYXNlVHJlZU1vZGlmaWVyXG4pOiBQcm9taXNlPEVsZW1lbnQgfCBVSTVFbGVtZW50IHwgRWxlbWVudFtdIHwgVUk1RWxlbWVudFtdPiB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIgJiYgdHlwZW9mIHNGcmFnbWVudE5hbWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50KSB7XG5cdFx0XHQvLyBUaGlzIGlzIHJlcXVpcmVkIGFzIEZsZXggcmV0dXJucyBhbiBIVE1MQ29sbGVjdGlvbiBhcyB0ZW1wbGF0aW5nIHJlc3VsdCBpbiBYTUwgdGltZS5cblx0XHRcdHJldHVybiBvTW9kaWZpZXIudGFyZ2V0cyA9PT0gXCJ4bWxUcmVlXCIgJiYgb0ZyYWdtZW50Lmxlbmd0aCA+IDAgPyBvRnJhZ21lbnRbMF0gOiBvRnJhZ21lbnQ7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZnJhZ21lbnREYXRhID1cblx0XHRcdHR5cGVvZiBzRnJhZ21lbnROYW1lID09PSBcInN0cmluZ1wiID8gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIikgOiBzRnJhZ21lbnROYW1lO1xuXHRcdGNvbnN0IG9GcmFnbWVudCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGZyYWdtZW50RGF0YSwgeyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0aWYgKCEhb09wdGlvbnMuaXNYTUwgJiYgb0NvbnRyb2wpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbDtcblx0XHR9XG5cdFx0bGV0IG93bmVyOiB7IHJ1bkFzT3duZXI6IDxUPihmbjogKCkgPT4gVCkgPT4gVCB9ID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLmFwcENvbXBvbmVudCA/PyB7IHJ1bkFzT3duZXI6IChmbikgPT4gZm4oKSB9O1xuXHRcdGlmIChvT3B0aW9ucy5jb250YWluaW5nVmlldykge1xuXHRcdFx0Y29uc3Qgdmlld093bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9PcHRpb25zLmNvbnRhaW5pbmdWaWV3KTtcblx0XHRcdGlmICh2aWV3T3duZXIpIHtcblx0XHRcdFx0b3duZXIgPSB2aWV3T3duZXI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGxldCBjb250YWluaW5nVmlldzogVmlldyB8IHVuZGVmaW5lZDtcblx0XHRpZiAob09wdGlvbnMudmlldyAmJiAhb09wdGlvbnMuY29udHJvbGxlcikge1xuXHRcdFx0Ly8gdGhpcyBpcyBvdmVyYWxsIHN0dXBpZCwgaW4gY2FzZSB3ZSBhcmUgY29taW5nIGZyb20gdGhlIGRlbGVnYXRlIHdpdGggYW4geG1sIG5vZGUgaW5zdGVhZCBvZiBhIGZyYWdtZW50IHdlIG5lZWQgdG8gcGFzcyB0aGUgY29udGFpbmluZ1ZpZXcgaW4gdGhlcmUgKGRvbmUgYnkgdGhlIG9Nb2RpZmllciBjYWxsIGZvciBpbnN0YW5jZSlcblx0XHRcdC8vIEJ1dCBpbiBvdGhlciBydW50aW1lIGNhc2Ugd2hlcmUgd2UgYXJlIGhlcmUgd2UgbmVlZCB0byBtYWludGFpbiB0aGUgY29udHJvbGxlciBhbmQgdGh1cyBjYW5ub3QgaGF2ZSBhIGNvbnRhaW5pbmdWaWV3Li4uXG5cdFx0XHRjb250YWluaW5nVmlldyA9IG9PcHRpb25zLnZpZXc7XG5cdFx0fVxuXHRcdHJldHVybiBvd25lci5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0aWQ6IG9PcHRpb25zLmlkLFxuXHRcdFx0XHRkZWZpbml0aW9uOiBvRnJhZ21lbnQgYXMgdW5rbm93biBhcyBzdHJpbmcsXG5cdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXIsXG5cdFx0XHRcdGNvbnRhaW5pbmdWaWV3OiBjb250YWluaW5nVmlld1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSEsXG5cdFx0bmF2aWdhdGlvblBhdGggPSBwYXJ0cy5qb2luKFwiL1wiKSxcblx0XHRlbnRpdHlTZXQgPSBuYXZpZ2F0aW9uUGF0aCAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtuYXZpZ2F0aW9uUGF0aH1gKTtcblx0aWYgKGVudGl0eVNldD8uJGtpbmQgPT09IFwiU2luZ2xldG9uXCIpIHtcblx0XHRjb25zdCBzaW5nbGV0b25OYW1lID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG5cdFx0cmV0dXJuIGAvJHtzaW5nbGV0b25OYW1lfS8ke3Byb3BlcnR5TmFtZX1gO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShwYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGlmICghcGF0aCB8fCAhbW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHQvLyBGaW5kIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzZXQgZnJvbSB0aGUgcHJvcGVydHkgcGF0aCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBhIHNpbmdsZXRvbi5cblx0Y29uc3QgcmVzb2x2ZWRQYXRoID0gZ2V0U2luZ2xldG9uUGF0aChwYXRoLCBtZXRhTW9kZWwpO1xuXHRpZiAocmVzb2x2ZWRQYXRoKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHJlc29sdmVkUGF0aCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59XG5cbi8vIEdldCB0aGUgcGF0aCBmb3IgYWN0aW9uIHBhcmFtZXRlcnMgdGhhdCBpcyBuZWVkZWQgdG8gcmVhZCB0aGUgYW5ub3RhdGlvbnNcbmZ1bmN0aW9uIGdldFBhcmFtZXRlclBhdGgoc1BhdGg6IHN0cmluZywgc1BhcmFtZXRlcjogc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IHNDb250ZXh0O1xuXHRpZiAoc1BhdGguaW5jbHVkZXMoXCJAJHVpNS5vdmVybG9hZFwiKSkge1xuXHRcdHNDb250ZXh0ID0gc1BhdGguc3BsaXQoXCJAJHVpNS5vdmVybG9hZFwiKVswXTtcblx0fSBlbHNlIHtcblx0XHQvLyBGb3IgVW5ib3VuZCBBY3Rpb25zIGluIEFjdGlvbiBQYXJhbWV0ZXIgRGlhbG9nc1xuXHRcdGNvbnN0IGFBY3Rpb24gPSBzUGF0aC5zcGxpdChcIi8wXCIpWzBdLnNwbGl0KFwiLlwiKTtcblx0XHRzQ29udGV4dCA9IGAvJHthQWN0aW9uW2FBY3Rpb24ubGVuZ3RoIC0gMV19L2A7XG5cdH1cblx0cmV0dXJuIHNDb250ZXh0ICsgc1BhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBHZXQgcmVzb2x2ZWQgZXhwcmVzc2lvbiBiaW5kaW5nIHVzZWQgZm9yIHRleHRzIGF0IHJ1bnRpbWUuXG4gKiBAcGFyYW0gZXhwQmluZGluZ1xuICogQHBhcmFtIGNvbnRyb2xcbiAqIEByZXR1cm5zIEEgc3RyaW5nIGFmdGVyIHJlc29sdXRpb24uXG4gKi9cbmZ1bmN0aW9uIF9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcoZXhwQmluZGluZzogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogc3RyaW5nIHtcblx0Ly8gVGhlIGlkZWEgaGVyZSBpcyB0byBjcmVhdGUgZHVtbXkgZWxlbWVudCB3aXRoIHRoZSBleHByZXNpb24gYmluZGluZy5cblx0Ly8gQWRkaW5nIGl0IGFzIGRlcGVuZGVudCB0byB0aGUgdmlldy9jb250cm9sIHdvdWxkIHByb3BhZ2F0ZSBhbGwgdGhlIG1vZGVscyB0byB0aGUgZHVtbXkgZWxlbWVudCBhbmQgcmVzb2x2ZSB0aGUgYmluZGluZy5cblx0Ly8gV2UgcmVtb3ZlIHRoZSBkdW1teSBlbGVtZW50IGFmdGVyIHRoYXQgYW5kIGRlc3Ryb3kgaXQuXG5cblx0Y29uc3QgYW55UmVzb3VyY2VUZXh0ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBleHBCaW5kaW5nIH0pO1xuXHRjb250cm9sLmFkZERlcGVuZGVudChhbnlSZXNvdXJjZVRleHQpO1xuXHRjb25zdCByZXN1bHRUZXh0ID0gYW55UmVzb3VyY2VUZXh0LmdldEFueVRleHQoKTtcblx0Y29udHJvbC5yZW1vdmVEZXBlbmRlbnQoYW55UmVzb3VyY2VUZXh0KTtcblx0YW55UmVzb3VyY2VUZXh0LmRlc3Ryb3koKTtcblxuXHRyZXR1cm4gcmVzdWx0VGV4dDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgZGV2aWNlIGhhcyBhIHNtYWxsIHNjcmVlbi5cbiAqIEByZXR1cm5zIEEgQm9vbGVhbi5cbiAqL1xuZnVuY3Rpb24gaXNTbWFsbERldmljZSgpOiBib29sZWFuIHtcblx0cmV0dXJuICFEZXZpY2Uuc3lzdGVtLmRlc2t0b3AgfHwgRGV2aWNlLnJlc2l6ZS53aWR0aCA8PSAzMjA7XG59XG5cbi8qKlxuICogUGFyc2VzIGEgU2VsZWN0aW9uVmFyaWFudCBvciBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVycy5cbiAqIEBwYXJhbSBjb250cm9sIE1EQyBDaGFydCwgTURDIFRhYmxlIG9yIE11bHRpVmlldyBjb250cm9sIG9uIHdoaWNoIHRoZSBmaWx0ZXJzIGFyZSBhcHBsaWVkXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggU2VsZWN0aW9uVmFyaWFudCBvciBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgb2YgZmlsdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uKGNvbnRyb2w6IENvbnRyb2wgfCBNRENDaGFydCB8IE1EQ1RhYmxlLCBhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogRmlsdGVyW10ge1xuXHRjb25zdCBtZXRhTW9kZWwgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udHJvbCBhcyBDb250cm9sKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgc3ZDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGAke2NvbnRyb2wuZGF0YShcImVudGl0eVR5cGVcIil9JHthbm5vdGF0aW9uUGF0aH1gKTtcblx0Y29uc3QgcHJvcGVydHlGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJbXT4gPSB7fTtcblx0bGV0IGFubm90YXRpb24gPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKHN2Q29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXG5cdGlmIChpc0Fubm90YXRpb25PZlR5cGU8U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudD4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0YW5ub3RhdGlvbiA9IGFubm90YXRpb24uU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdGlmICghYW5ub3RhdGlvbiB8fCAhaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblZhcmlhbnRUeXBlPihhbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25WYXJpYW50VHlwZSkpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQoYW5ub3RhdGlvbi5TZWxlY3RPcHRpb25zIHx8IFtdKS5mb3JFYWNoKChzZWxlY3RPcHRpb24pID0+IHtcblx0XHRpZiAoc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZT8uJHRhcmdldCAmJiBzZWxlY3RPcHRpb24uUmFuZ2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVR5cGUgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLiR0YXJnZXQudHlwZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUudmFsdWU7XG5cdFx0XHRmb3IgKGNvbnN0IGogaW4gc2VsZWN0T3B0aW9uLlJhbmdlcykge1xuXHRcdFx0XHRjb25zdCByYW5nZSA9IGdldFJhbmdlRGVmaW5pdGlvbihzZWxlY3RPcHRpb24uUmFuZ2VzW2pdLCBwcm9wZXJ0eVR5cGUpO1xuXHRcdFx0XHRwcm9wZXJ0eUZpbHRlcnNbcHJvcGVydHlQYXRoXSA9IChwcm9wZXJ0eUZpbHRlcnNbcHJvcGVydHlQYXRoXSA/PyBbXSkuY29uY2F0KFxuXHRcdFx0XHRcdG5ldyBGaWx0ZXIocHJvcGVydHlQYXRoLCByYW5nZS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvciwgcmFuZ2UucmFuZ2VMb3csIHJhbmdlLnJhbmdlSGlnaClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IGZpbHRlcnMgPSBbXTtcblx0Zm9yIChjb25zdCBwYXRoIGluIHByb3BlcnR5RmlsdGVycykge1xuXHRcdGZpbHRlcnMucHVzaChcblx0XHRcdG5ldyBGaWx0ZXIoe1xuXHRcdFx0XHRmaWx0ZXJzOiBwcm9wZXJ0eUZpbHRlcnNbcGF0aF0sXG5cdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gZmlsdGVycztcbn1cblxuZnVuY3Rpb24gZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgoXG5cdHNNZXRhUGF0aDogc3RyaW5nLFxuXHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c0VudGl0eVNldDogc3RyaW5nLFxuXHRvRGlhZ25vc3RpY3M6IERpYWdub3N0aWNzXG4pOiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc01ldGFQYXRoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQ/LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhzRW50aXR5U2V0LCBvQ29udGV4dCB8fCBvTWV0YU1vZGVsLCBvRGlhZ25vc3RpY3MsIG1lcmdlT2JqZWN0cyk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29udGV4dCBvZiB0aGUgRHJhZnRSb290IHBhdGguXG4gKiBJZiBhIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBkcmFmdCBSb290IFBhdGgsIHRoaXMgbWV0aG9kIHJldHVybnMgaXRzIGJpbmRpbmdDb250ZXh0LlxuICogV2hlcmUgbm8gdmlldyBpcyBmb3VuZCBhIG5ldyBjcmVhdGVkIGNvbnRleHQgaXMgcmV0dXJuZWQuXG4gKiBUaGUgbmV3IGNyZWF0ZWQgY29udGV4dCByZXF1ZXN0IHRoZSBrZXkgb2YgdGhlIGVudGl0eSBpbiBvcmRlciB0byBnZXQgdGhlIEV0YWcgb2YgdGhpcyBlbnRpdHkuXG4gKiBAcGFyYW0gcHJvZ3JhbW1pbmdNb2RlbFxuICogQHBhcmFtIHZpZXdcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFJldHVybnMgYSBQcm9taXNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVJvb3RDb250ZXh0KHByb2dyYW1taW5nTW9kZWw6IHN0cmluZywgdmlldzogVmlldywgYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgY29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0aWYgKGNvbnRleHQpIHtcblx0XHRjb25zdCByb290Q29udGV4dFBhdGggPVxuXHRcdFx0cHJvZ3JhbW1pbmdNb2RlbCA9PT0gXCJEcmFmdFwiID8gTW9kZWxIZWxwZXIuZ2V0RHJhZnRSb290UGF0aChjb250ZXh0KSA6IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKGNvbnRleHQpO1xuXHRcdGxldCBzaW1wbGVSb290Q29udGV4dDogT0RhdGFWNENvbnRleHQ7XG5cdFx0aWYgKHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgYSB2aWV3IG1hdGNoZXMgd2l0aCB0aGUgZHJhZnQgcm9vdCBwYXRoXG5cdFx0XHRjb25zdCBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlID0gYXBwQ29tcG9uZW50XG5cdFx0XHRcdC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKVxuXHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHQuZmluZCgocGFnZVZpZXc6IFZpZXcpID0+IHBhZ2VWaWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoKVxuXHRcdFx0XHQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGlmIChleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlKSB7XG5cdFx0XHRcdHJldHVybiBleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRzaW1wbGVSb290Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2ltcGxlUm9vdENvbnRleHRcIik7XG5cdFx0XHRpZiAoc2ltcGxlUm9vdENvbnRleHQ/LmdldFBhdGgoKSA9PT0gcm9vdENvbnRleHRQYXRoKSB7XG5cdFx0XHRcdHJldHVybiBzaW1wbGVSb290Q29udGV4dDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChyb290Q29udGV4dFBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMud2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoc2ltcGxlUm9vdENvbnRleHQpO1xuXHRcdFx0Ly8gU3RvcmUgdGhpcyBuZXcgY3JlYXRlZCBjb250ZXh0IHRvIHVzZSBpdCBvbiB0aGUgbmV4dCBpdGVyYXRpb25zXG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIsIHNpbXBsZVJvb3RDb250ZXh0KTtcblx0XHRcdHJldHVybiBzaW1wbGVSb290Q29udGV4dDtcblx0XHR9XG5cdH1cbn1cblxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdGZpcmVCdXR0b25QcmVzczogZm5GaXJlQnV0dG9uUHJlc3MsXG5cdGdldFRhcmdldFZpZXc6IGdldFRhcmdldFZpZXcsXG5cdGdldEN1cnJlbnRQYWdlVmlldzogZ2V0Q3VycmVudFBhZ2VWaWV3LFxuXHRoYXNUcmFuc2llbnRDb250ZXh0OiBmbkhhc1RyYW5zaWVudENvbnRleHRzLFxuXHR1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHM6IGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzLFxuXHRnZXRBcHBDb21wb25lbnQ6IGdldEFwcENvbXBvbmVudCxcblx0Z2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzOiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyxcblx0Z2V0UGFyYW1ldGVySW5mbzogZ2V0UGFyYW1ldGVySW5mbyxcblx0dXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHk6IGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHksXG5cdGdldEVudGl0eVNldE5hbWU6IGdldEVudGl0eVNldE5hbWUsXG5cdGdldEFjdGlvblBhdGg6IGdldEFjdGlvblBhdGgsXG5cdGNvbXB1dGVEaXNwbGF5TW9kZTogY29tcHV0ZURpc3BsYXlNb2RlLFxuXHRpc1N0aWNreUVkaXRNb2RlOiBpc1N0aWNreUVkaXRNb2RlLFxuXHRnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHk6IGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eSxcblx0YWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50LFxuXHRzZXRVc2VyRGVmYXVsdHM6IHNldFVzZXJEZWZhdWx0cyxcblx0Z2V0SUJOQWN0aW9uczogZm5HZXRJQk5BY3Rpb25zLFxuXHRnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb246IGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nOiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3M6IHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3MsXG5cdGdldFNlbWFudGljT2JqZWN0UHJvbWlzZTogZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UsXG5cdGdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoOiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoLFxuXHR3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZDogd2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQsXG5cdGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aDogZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoLFxuXHRnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uOiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uLFxuXHRnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlOiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlLFxuXHRyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHk6IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSxcblx0dGVtcGxhdGVDb250cm9sRnJhZ21lbnQ6IHRlbXBsYXRlQ29udHJvbEZyYWdtZW50LFxuXHRGaWx0ZXJSZXN0cmljdGlvbnM6IHtcblx0XHRSRVFVSVJFRF9QUk9QRVJUSUVTOiBcIlJlcXVpcmVkUHJvcGVydGllc1wiLFxuXHRcdE5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVM6IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIixcblx0XHRBTExPV0VEX0VYUFJFU1NJT05TOiBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXG5cdH0sXG5cdEFsbG93ZWRFeHByZXNzaW9uc1ByaW86IFtcIlNpbmdsZVZhbHVlXCIsIFwiTXVsdGlWYWx1ZVwiLCBcIlNpbmdsZVJhbmdlXCIsIFwiTXVsdGlSYW5nZVwiLCBcIlNlYXJjaEV4cHJlc3Npb25cIiwgXCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJdLFxuXHRub3JtYWxpemVTZWFyY2hUZXJtOiBub3JtYWxpemVTZWFyY2hUZXJtLFxuXHRzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGU6IHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSxcblx0c2V0RHluYW1pY0FjdGlvbkNvbnRleHRzOiBzZXREeW5hbWljQWN0aW9uQ29udGV4dHMsXG5cdHJlcXVlc3RQcm9wZXJ0eTogcmVxdWVzdFByb3BlcnR5LFxuXHRnZXRQYXJhbWV0ZXJQYXRoOiBnZXRQYXJhbWV0ZXJQYXRoLFxuXHRnZXRSZWxhdGVkQXBwc01lbnVJdGVtczogX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zLFxuXHRnZXRUcmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nOiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nLFxuXHR1cGRhdGVSZWxhdGVBcHBzTW9kZWw6IHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCxcblx0Z2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9uczogX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMsXG5cdGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbjogZ2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uLFxuXHRjcmVhdGVSb290Q29udGV4dDogY3JlYXRlUm9vdENvbnRleHQsXG5cdGlzU21hbGxEZXZpY2UsXG5cdGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25VdGlscztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBd0VBLFNBQVNBLG1CQUFtQkEsQ0FBQ0MsV0FBbUIsRUFBc0I7SUFDckUsSUFBSSxDQUFDQSxXQUFXLEVBQUU7TUFDakIsT0FBT0MsU0FBUztJQUNqQjtJQUVBLE9BQU9ELFdBQVcsQ0FDaEJFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQ2xCQSxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQUEs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