@sapui5/sap.fe.core 1.113.0 → 1.115.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime-dbg.js +68 -5
  4. package/src/sap/fe/core/ActionRuntime.js +1 -1
  5. package/src/sap/fe/core/ActionRuntime.js.map +1 -1
  6. package/src/sap/fe/core/ActionRuntime.ts +120 -4
  7. package/src/sap/fe/core/AppComponent-dbg.js +8 -2
  8. package/src/sap/fe/core/AppComponent.js +1 -1
  9. package/src/sap/fe/core/AppComponent.js.map +1 -1
  10. package/src/sap/fe/core/AppComponent.ts +19 -3
  11. package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
  12. package/src/sap/fe/core/AppStateHandler.js +1 -1
  13. package/src/sap/fe/core/AppStateHandler.js.map +1 -1
  14. package/src/sap/fe/core/AppStateHandler.ts +17 -11
  15. package/src/sap/fe/core/BaseController-dbg.js +1 -1
  16. package/src/sap/fe/core/BaseController.ts +13 -2
  17. package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
  18. package/src/sap/fe/core/CommonUtils.js +1 -1
  19. package/src/sap/fe/core/CommonUtils.js.map +1 -1
  20. package/src/sap/fe/core/CommonUtils.ts +96 -473
  21. package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
  22. package/src/sap/fe/core/ExtensionAPI.ts +2 -2
  23. package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
  24. package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
  25. package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
  26. package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
  27. package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  28. package/src/sap/fe/core/TemplateComponent.ts +6 -0
  29. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
  30. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
  31. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
  32. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
  33. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
  34. package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
  35. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
  36. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
  37. package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
  38. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
  39. package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
  40. package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
  41. package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
  44. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
  45. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  46. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
  48. package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  50. package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
  52. package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
  53. package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
  54. package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
  55. package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
  56. package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
  57. package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
  58. package/src/sap/fe/core/controllerextensions/Share.js +1 -1
  59. package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
  60. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  61. package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
  62. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  63. package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
  64. package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
  65. package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
  66. package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  67. package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
  68. package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
  69. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
  70. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
  71. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
  72. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
  73. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
  74. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
  75. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
  76. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
  77. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
  78. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
  79. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
  80. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
  81. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
  82. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
  83. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
  84. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
  85. package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
  86. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
  87. package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
  88. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
  89. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
  90. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
  91. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
  92. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
  93. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
  94. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
  95. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
  96. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
  97. package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
  98. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
  99. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
  100. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
  101. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
  102. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
  103. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
  104. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
  105. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
  106. package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
  107. package/src/sap/fe/core/controls/CommandExecution.js +1 -1
  108. package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
  109. package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
  110. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
  111. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
  112. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
  113. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
  114. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
  116. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
  117. package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
  118. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
  119. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
  120. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
  121. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
  122. package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
  123. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
  124. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
  125. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
  126. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
  127. package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
  128. package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
  129. package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  131. package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
  132. package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
  133. package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
  134. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  135. package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
  136. package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
  137. package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
  138. package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  139. package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
  140. package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
  141. package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
  142. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  143. package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
  144. package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
  145. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  146. package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
  147. package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
  148. package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
  149. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
  150. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
  151. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
  152. package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
  153. package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  154. package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
  155. package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
  156. package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
  157. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  158. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
  159. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
  160. package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
  161. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  162. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
  163. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
  164. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
  165. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
  166. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
  167. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
  168. package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
  169. package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  170. package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
  171. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
  172. package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
  173. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
  174. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
  175. package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
  176. package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
  177. package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  178. package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
  179. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
  180. package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
  181. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  182. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
  183. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
  184. package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
  185. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  186. package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
  187. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
  188. package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
  189. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  190. package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
  191. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
  192. package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
  193. package/src/sap/fe/core/fpm/Component.js +1 -1
  194. package/src/sap/fe/core/fpm/Component.js.map +1 -1
  195. package/src/sap/fe/core/fpm/Component.ts +3 -1
  196. package/src/sap/fe/core/fpm/manifest.json +1 -1
  197. package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
  198. package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
  199. package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
  200. package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
  201. package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
  202. package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
  203. package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
  204. package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
  205. package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
  206. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
  207. package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
  208. package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
  209. package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
  210. package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
  211. package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
  212. package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
  213. package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
  214. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  215. package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
  216. package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
  217. package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
  218. package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
  219. package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
  220. package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
  221. package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
  222. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
  223. package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
  224. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  225. package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
  226. package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
  227. package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
  228. package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
  229. package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
  230. package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
  231. package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
  232. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
  233. package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
  234. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
  235. package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
  236. package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
  237. package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
  238. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
  239. package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
  240. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
  241. package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
  242. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
  243. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
  244. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
  245. package/src/sap/fe/core/library-dbg.js +4 -3
  246. package/src/sap/fe/core/library-preload.js +91 -74
  247. package/src/sap/fe/core/library-preload.js.map +1 -1
  248. package/src/sap/fe/core/library.js +1 -1
  249. package/src/sap/fe/core/library.js.map +1 -1
  250. package/src/sap/fe/core/library.ts +1 -1
  251. package/src/sap/fe/core/manifest.json +1 -1
  252. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
  253. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
  256. package/src/sap/fe/core/messagebundle.properties +12 -8
  257. package/src/sap/fe/core/messagebundle_ar.properties +7 -5
  258. package/src/sap/fe/core/messagebundle_bg.properties +7 -5
  259. package/src/sap/fe/core/messagebundle_ca.properties +7 -5
  260. package/src/sap/fe/core/messagebundle_cs.properties +7 -5
  261. package/src/sap/fe/core/messagebundle_cy.properties +7 -5
  262. package/src/sap/fe/core/messagebundle_da.properties +7 -5
  263. package/src/sap/fe/core/messagebundle_de.properties +7 -5
  264. package/src/sap/fe/core/messagebundle_el.properties +7 -5
  265. package/src/sap/fe/core/messagebundle_en.properties +7 -5
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
  270. package/src/sap/fe/core/messagebundle_es.properties +7 -5
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
  272. package/src/sap/fe/core/messagebundle_et.properties +7 -5
  273. package/src/sap/fe/core/messagebundle_fi.properties +7 -5
  274. package/src/sap/fe/core/messagebundle_fr.properties +7 -5
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
  276. package/src/sap/fe/core/messagebundle_hi.properties +7 -5
  277. package/src/sap/fe/core/messagebundle_hr.properties +7 -5
  278. package/src/sap/fe/core/messagebundle_hu.properties +7 -5
  279. package/src/sap/fe/core/messagebundle_id.properties +7 -5
  280. package/src/sap/fe/core/messagebundle_it.properties +8 -6
  281. package/src/sap/fe/core/messagebundle_iw.properties +7 -5
  282. package/src/sap/fe/core/messagebundle_ja.properties +7 -5
  283. package/src/sap/fe/core/messagebundle_kk.properties +7 -5
  284. package/src/sap/fe/core/messagebundle_ko.properties +7 -5
  285. package/src/sap/fe/core/messagebundle_lt.properties +7 -5
  286. package/src/sap/fe/core/messagebundle_lv.properties +7 -5
  287. package/src/sap/fe/core/messagebundle_ms.properties +7 -5
  288. package/src/sap/fe/core/messagebundle_nl.properties +7 -5
  289. package/src/sap/fe/core/messagebundle_no.properties +7 -5
  290. package/src/sap/fe/core/messagebundle_pl.properties +7 -5
  291. package/src/sap/fe/core/messagebundle_pt.properties +7 -5
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
  293. package/src/sap/fe/core/messagebundle_ro.properties +7 -5
  294. package/src/sap/fe/core/messagebundle_ru.properties +7 -5
  295. package/src/sap/fe/core/messagebundle_sh.properties +7 -5
  296. package/src/sap/fe/core/messagebundle_sk.properties +7 -5
  297. package/src/sap/fe/core/messagebundle_sl.properties +7 -5
  298. package/src/sap/fe/core/messagebundle_sv.properties +7 -5
  299. package/src/sap/fe/core/messagebundle_th.properties +7 -5
  300. package/src/sap/fe/core/messagebundle_tr.properties +7 -5
  301. package/src/sap/fe/core/messagebundle_uk.properties +7 -5
  302. package/src/sap/fe/core/messagebundle_vi.properties +7 -5
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
  305. package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
  306. package/src/sap/fe/core/operationsHelper.ts +1 -1
  307. package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
  308. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  309. package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
  310. package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
  311. package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
  312. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  313. package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
  314. package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
  315. package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
  316. package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
  317. package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
  318. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
  319. package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
  320. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  321. package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
  322. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
  323. package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
  324. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  325. package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
  326. package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
  327. package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
  328. package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  329. package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
  330. package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
  331. package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
  332. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  333. package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
  334. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
  335. package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
  336. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
  337. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
  338. package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
  339. package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
  340. package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
  341. package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
  342. package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
  343. package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
  344. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  345. package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
  346. package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
  347. package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
  348. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  349. package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
  350. package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
  351. package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
  352. package/src/sap/fe/core/templating/FilterHelper.js +1 -1
  353. package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
  354. package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
  355. package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
  356. package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
  357. package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
  358. package/src/sap/fe/core/templating/UIFormatters.js +1 -1
  359. package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
  360. package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
  361. package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
  362. package/src/sap/fe/core/type/TypeUtil.js +1 -1
  363. package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
  364. package/src/sap/fe/core/type/TypeUtil.ts +2 -2
  365. package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
  366. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
  367. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
  368. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
  369. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
  370. package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
  371. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
  372. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
  373. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
  374. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
  375. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
@@ -51,41 +51,32 @@ import type {
51
51
  ViewPathConfiguration
52
52
  } from "../ManifestSettings";
53
53
  import { TemplateType, VariantManagementType, VisualizationType } from "../ManifestSettings";
54
-
55
54
  type ViewAnnotations = SelectionPresentationVariant | SelectionVariant;
56
55
  type VariantManagementDefinition = {
57
56
  id: string;
58
57
  targetControlIds: string;
59
58
  };
60
-
61
59
  type MultipleViewConfiguration = ViewPathConfiguration & {
62
60
  annotation?: DataVisualizationAnnotations;
63
61
  };
64
-
65
62
  type SingleViewConfiguration = {
66
63
  annotation?: DataVisualizationAnnotations;
67
64
  };
68
-
69
65
  type CustomViewConfiguration = CustomViewTemplateConfiguration & {
70
66
  type: string;
71
67
  };
72
-
73
68
  type ViewConfiguration = MultipleViewConfiguration | SingleViewConfiguration | CustomViewConfiguration;
74
69
  type ViewAnnotationConfiguration = MultipleViewConfiguration | SingleViewConfiguration;
75
-
76
70
  type ViewConverterSettings = ViewConfiguration & {
77
71
  converterContext?: ConverterContext;
78
72
  };
79
-
80
73
  type DefaultSemanticDate = ConfigurableObject & {
81
74
  operator: string;
82
75
  };
83
-
84
76
  type MultiViewsControlConfiguration = {
85
77
  id: string;
86
78
  showTabCounts?: boolean;
87
79
  };
88
-
89
80
  export type ListReportDefinition = {
90
81
  mainEntitySet: string;
91
82
  mainEntityType: string; // entityType> at the start of LR templating
@@ -118,9 +109,7 @@ export type ListReportDefinition = {
118
109
  hideFilterBar: boolean;
119
110
  useHiddenFilterBar: boolean;
120
111
  };
121
-
122
112
  export type ListReportViewDefinition = SingleViewDefinition | CustomViewDefinition | CombinedViewDefinition;
123
-
124
113
  export type CombinedViewDefinition = {
125
114
  selectionVariantPath?: string; // only with on multi Table mode
126
115
  title?: string; // only with multi Table mode
@@ -131,7 +120,6 @@ export type CombinedViewDefinition = {
131
120
  defaultPath?: string;
132
121
  visible?: string;
133
122
  };
134
-
135
123
  export type CustomViewDefinition = {
136
124
  title?: string; // only with multi Table mode
137
125
  fragment: string;
@@ -140,28 +128,23 @@ export type CustomViewDefinition = {
140
128
  visible?: string;
141
129
  };
142
130
  export type SingleViewDefinition = SingleTableViewDefinition | SingleChartViewDefinition;
143
-
144
131
  export type BaseSingleViewDefinition = {
145
132
  selectionVariantPath?: string; // only with on multi Table mode
146
133
  title?: string; // only with multi Table mode
147
134
  presentation: DataVisualizationDefinition;
148
135
  };
149
-
150
136
  export type SingleTableViewDefinition = BaseSingleViewDefinition & {
151
137
  tableControlId?: string;
152
138
  visible?: string;
153
139
  };
154
-
155
140
  export type SingleChartViewDefinition = BaseSingleViewDefinition & {
156
141
  chartControlId?: string;
157
142
  visible?: string;
158
143
  };
159
-
160
144
  type ContentAreaID = {
161
145
  chartId: string;
162
146
  tableId: string;
163
147
  };
164
-
165
148
  /**
166
149
  * Retrieves all list report tables.
167
150
  *
@@ -175,7 +158,6 @@ function getTableVisualizations(views: ListReportViewDefinition[]): TableVisuali
175
158
  const visualizations = (view as CombinedViewDefinition).secondaryVisualization
176
159
  ? (view as CombinedViewDefinition).secondaryVisualization.visualizations
177
160
  : (view as SingleViewDefinition).presentation.visualizations;
178
-
179
161
  visualizations.forEach(function (visualization) {
180
162
  if (visualization.type === VisualizationType.Table) {
181
163
  tables.push(visualization);
@@ -185,7 +167,6 @@ function getTableVisualizations(views: ListReportViewDefinition[]): TableVisuali
185
167
  });
186
168
  return tables;
187
169
  }
188
-
189
170
  function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisualization[] {
190
171
  const charts: ChartVisualization[] = [];
191
172
  views.forEach(function (view) {
@@ -193,7 +174,6 @@ function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisuali
193
174
  const visualizations = (view as CombinedViewDefinition).primaryVisualization
194
175
  ? (view as CombinedViewDefinition).primaryVisualization.visualizations
195
176
  : (view as SingleViewDefinition).presentation.visualizations;
196
-
197
177
  visualizations.forEach(function (visualization) {
198
178
  if (visualization.type === VisualizationType.Chart) {
199
179
  charts.push(visualization);
@@ -203,7 +183,6 @@ function getChartVisualizations(views: ListReportViewDefinition[]): ChartVisuali
203
183
  });
204
184
  return charts;
205
185
  }
206
-
207
186
  const getDefaultSemanticDates = function (filterFields: Record<string, CustomElementFilterField>): Record<string, DefaultSemanticDate> {
208
187
  const defaultSemanticDates: any = {};
209
188
  for (const filterField in filterFields) {
@@ -213,7 +192,6 @@ const getDefaultSemanticDates = function (filterFields: Record<string, CustomEle
213
192
  }
214
193
  return defaultSemanticDates;
215
194
  };
216
-
217
195
  /**
218
196
  * Find a visualization annotation that can be used for rendering the list report.
219
197
  *
@@ -230,7 +208,6 @@ function getCompliantVisualizationAnnotation(
230
208
  const annotationPath = converterContext.getManifestWrapper().getDefaultTemplateAnnotationPath();
231
209
  const selectionPresentationVariant = getSelectionPresentationVariant(entityType, annotationPath, converterContext);
232
210
  const errorMessageForALP = "ALP flavor needs both chart and table to load the application";
233
-
234
211
  if (selectionPresentationVariant) {
235
212
  if (annotationPath) {
236
213
  const presentationVariant = selectionPresentationVariant.PresentationVariant;
@@ -250,7 +227,6 @@ function getCompliantVisualizationAnnotation(
250
227
  throw new Error(errorMessageForALP);
251
228
  }
252
229
  }
253
-
254
230
  const presentationVariant = getDefaultPresentationVariant(entityType);
255
231
  if (presentationVariant) {
256
232
  if (isPresentationCompliant(presentationVariant, isALP)) {
@@ -259,14 +235,12 @@ function getCompliantVisualizationAnnotation(
259
235
  throw new Error(errorMessageForALP);
260
236
  }
261
237
  }
262
-
263
238
  if (!isALP) {
264
239
  return getDefaultLineItem(entityType);
265
240
  }
266
241
  return undefined;
267
242
  }
268
-
269
- const getView = function (viewConverterConfiguration: ViewConverterSettings): ListReportViewDefinition {
243
+ const getView = function (viewConverterConfiguration: ViewConverterSettings, isInsightsEnabled?: boolean): ListReportViewDefinition {
270
244
  let config = viewConverterConfiguration;
271
245
  if (config.converterContext) {
272
246
  let converterContext = config.converterContext;
@@ -283,7 +257,8 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
283
257
  config as ViewPathConfiguration,
284
258
  undefined,
285
259
  undefined,
286
- isMultipleViewConfiguration(config)
260
+ isMultipleViewConfiguration(config),
261
+ isInsightsEnabled
287
262
  );
288
263
  let tableControlId = "";
289
264
  let chartControlId = "";
@@ -321,7 +296,11 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
321
296
  : "",
322
297
  true,
323
298
  converterContext,
324
- config as ViewPathConfiguration
299
+ config as ViewPathConfiguration,
300
+ undefined,
301
+ undefined,
302
+ undefined,
303
+ isInsightsEnabled
325
304
  );
326
305
  return presentation;
327
306
  } else {
@@ -461,10 +440,10 @@ const getView = function (viewConverterConfiguration: ViewConverterSettings): Li
461
440
  };
462
441
  }
463
442
  };
464
-
465
443
  const getViews = function (
466
444
  converterContext: ConverterContext,
467
- settingsViews: MultipleViewsConfiguration | undefined
445
+ settingsViews: MultipleViewsConfiguration | undefined,
446
+ isInsightsEnabled?: boolean
468
447
  ): ListReportViewDefinition[] {
469
448
  let viewConverterConfigs: ViewConverterSettings[] = [];
470
449
  if (settingsViews) {
@@ -496,7 +475,6 @@ const getViews = function (
496
475
  path.contextPath || (path.entitySet && `/${path.entitySet}`) || converterContext.getContextPath()
497
476
  ),
498
477
  entityType = viewConverterContext.getEntityType();
499
-
500
478
  if (entityType && viewConverterContext) {
501
479
  let annotation;
502
480
  const resolvedTarget = viewConverterContext.getEntityTypeAnnotation(path.annotationPath);
@@ -532,10 +510,9 @@ const getViews = function (
532
510
  }
533
511
  }
534
512
  return viewConverterConfigs.map((viewConverterConfig) => {
535
- return getView(viewConverterConfig);
513
+ return getView(viewConverterConfig, isInsightsEnabled);
536
514
  });
537
515
  };
538
-
539
516
  const getMultiViewsControl = function (
540
517
  converterContext: ConverterContext,
541
518
  views: ListReportViewDefinition[]
@@ -550,7 +527,6 @@ const getMultiViewsControl = function (
550
527
  }
551
528
  return undefined;
552
529
  };
553
-
554
530
  function getAlpViewConfig(converterContext: ConverterContext, viewConfigs: ViewConverterSettings[]): ViewConverterSettings[] {
555
531
  const entityType = converterContext.getEntityType();
556
532
  const annotation = getCompliantVisualizationAnnotation(entityType, converterContext, true);
@@ -578,19 +554,16 @@ function getAlpViewConfig(converterContext: ConverterContext, viewConfigs: ViewC
578
554
  }
579
555
  return viewConfigs;
580
556
  }
581
-
582
557
  function hasMultiVisualizations(converterContext: ConverterContext): boolean {
583
558
  return (
584
559
  converterContext.getManifestWrapper().hasMultipleVisualizations() ||
585
560
  converterContext.getTemplateType() === TemplateType.AnalyticalListPage
586
561
  );
587
562
  }
588
-
589
563
  export const getHeaderActions = function (converterContext: ConverterContext): BaseAction[] {
590
564
  const manifestWrapper = converterContext.getManifestWrapper();
591
565
  return insertCustomElements<BaseAction>([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext).actions);
592
566
  };
593
-
594
567
  export const checkChartFilterBarId = function (views: ListReportViewDefinition[], filterBarId: string) {
595
568
  views.forEach((view) => {
596
569
  if (!(view as CustomViewDefinition).type) {
@@ -603,17 +576,16 @@ export const checkChartFilterBarId = function (views: ListReportViewDefinition[]
603
576
  }
604
577
  });
605
578
  };
606
-
607
579
  /**
608
580
  * Creates the ListReportDefinition for multiple entity sets (multiple table mode).
609
581
  *
610
582
  * @param converterContext The converter context
583
+ * @param isInsightsEnabled
611
584
  * @returns The list report definition based on annotation + manifest
612
585
  */
613
- export const convertPage = function (converterContext: ConverterContext): ListReportDefinition {
586
+ export const convertPage = function (converterContext: ConverterContext, isInsightsEnabled?: boolean): ListReportDefinition {
614
587
  const entityType = converterContext.getEntityType();
615
588
  const sContextPath = converterContext.getContextPath();
616
-
617
589
  if (!sContextPath) {
618
590
  // If we don't have an entitySet at this point we have an issue I'd say
619
591
  throw new Error(
@@ -623,7 +595,7 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
623
595
  const manifestWrapper = converterContext.getManifestWrapper();
624
596
  const viewsDefinition: MultipleViewsConfiguration | undefined = manifestWrapper.getViewConfiguration();
625
597
  const hasMultipleEntitySets = manifestWrapper.hasMultipleEntitySets();
626
- const views: ListReportViewDefinition[] = getViews(converterContext, viewsDefinition);
598
+ const views: ListReportViewDefinition[] = getViews(converterContext, viewsDefinition, isInsightsEnabled);
627
599
  const lrTableVisualizations = getTableVisualizations(views);
628
600
  const lrChartVisualizations = getChartVisualizations(views);
629
601
  const showPinnableToggle = lrTableVisualizations.some((table) => table.control.type === "ResponsiveTable");
@@ -637,13 +609,11 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
637
609
  const filterLayout = fbConfig?.layout !== undefined ? fbConfig?.layout.toLowerCase() : "compact";
638
610
  const useSemanticDateRange = fbConfig.useSemanticDateRange !== undefined ? fbConfig.useSemanticDateRange : true;
639
611
  const showClearButton = fbConfig.showClearButton !== undefined ? fbConfig.showClearButton : false;
640
-
641
612
  const oConfig = getContentAreaId(converterContext, views);
642
613
  if (oConfig) {
643
614
  singleChartId = oConfig.chartId;
644
615
  singleTableId = oConfig.tableId;
645
616
  }
646
-
647
617
  const useHiddenFilterBar = manifestWrapper.useHiddenFilterBar();
648
618
  // Chart has a dependency to filter bar (issue with loading data). Once resolved, the check for chart should be removed here.
649
619
  // Until then, hiding filter bar is now allowed if a chart is being used on LR.
@@ -653,16 +623,13 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
653
623
  const propertyInfoFields = lrFilterProperties.sPropertyInfo;
654
624
  const hideBasicSearch = getFilterBarHideBasicSearch(lrTableVisualizations, lrChartVisualizations, converterContext);
655
625
  const multiViewControl = getMultiViewsControl(converterContext, views);
656
-
657
626
  const selectionVariant = multiViewControl ? undefined : getSelectionVariant(entityType, converterContext);
658
627
  const defaultSemanticDates = useSemanticDateRange ? getDefaultSemanticDates(getManifestFilterFields(entityType, converterContext)) : {};
659
-
660
628
  // Sort header actions according to position attributes in manifest
661
629
  const headerActions = getHeaderActions(converterContext);
662
630
  if (hasMultipleEntitySets) {
663
631
  checkChartFilterBarId(views, filterBarId);
664
632
  }
665
-
666
633
  const visualizationIds = lrTableVisualizations
667
634
  .map((visualization) => {
668
635
  return visualization.annotation.id;
@@ -677,10 +644,8 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
677
644
  ...(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []),
678
645
  ...(multiViewControl ? [multiViewControl.id] : [])
679
646
  ];
680
-
681
647
  const stickySubheaderProvider =
682
648
  multiViewControl && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? multiViewControl.id : undefined;
683
-
684
649
  return {
685
650
  mainEntitySet: sContextPath,
686
651
  mainEntityType: `${sContextPath}/`,
@@ -717,7 +682,6 @@ export const convertPage = function (converterContext: ConverterContext): ListRe
717
682
  useHiddenFilterBar
718
683
  };
719
684
  };
720
-
721
685
  function getContentAreaId(converterContext: ConverterContext, views: ListReportViewDefinition[]): ContentAreaID | undefined {
722
686
  let singleTableId = "",
723
687
  singleChartId = "";
@@ -725,8 +689,8 @@ function getContentAreaId(converterContext: ConverterContext, views: ListReportV
725
689
  converterContext.getManifestWrapper().hasMultipleVisualizations() ||
726
690
  converterContext.getTemplateType() === TemplateType.AnalyticalListPage
727
691
  ) {
728
- for (let view of views) {
729
- view = view as CombinedViewDefinition;
692
+ for (const lrView of views) {
693
+ const view: CombinedViewDefinition = lrView as CombinedViewDefinition;
730
694
  if (view.chartControlId && view.tableControlId) {
731
695
  singleChartId = view.chartControlId;
732
696
  singleTableId = view.tableControlId;
@@ -734,8 +698,8 @@ function getContentAreaId(converterContext: ConverterContext, views: ListReportV
734
698
  }
735
699
  }
736
700
  } else {
737
- for (let view of views) {
738
- view = view as SingleViewDefinition;
701
+ for (const lrView of views) {
702
+ const view: SingleViewDefinition = lrView as SingleViewDefinition;
739
703
  if (!singleTableId && (view as SingleTableViewDefinition).tableControlId) {
740
704
  singleTableId = (view as SingleTableViewDefinition).tableControlId || "";
741
705
  }
@@ -233,12 +233,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
233
233
  var _subSection$presentat;
234
234
  return subSection !== null && subSection !== void 0 && (_subSection$presentat = subSection.presentation) !== null && _subSection$presentat !== void 0 && _subSection$presentat.visualizations[0] ? subSection.presentation.visualizations[0] : undefined;
235
235
  }
236
- function _isFacetHasGridTableVisible(dataVisualizationSubSection, subSectionVisualization) {
236
+ function _isFacetHasNonResponsiveTableVisible(dataVisualizationSubSection, subSectionVisualization) {
237
237
  var _dataVisualizationSub, _subSectionVisualizat;
238
- return dataVisualizationSubSection.visible === "true" && (dataVisualizationSubSection === null || dataVisualizationSubSection === void 0 ? void 0 : (_dataVisualizationSub = dataVisualizationSubSection.presentation) === null || _dataVisualizationSub === void 0 ? void 0 : _dataVisualizationSub.visualizations) && (subSectionVisualization === null || subSectionVisualization === void 0 ? void 0 : subSectionVisualization.type) === "Table" && (subSectionVisualization === null || subSectionVisualization === void 0 ? void 0 : (_subSectionVisualizat = subSectionVisualization.control) === null || _subSectionVisualizat === void 0 ? void 0 : _subSectionVisualizat.type) === "GridTable";
238
+ return dataVisualizationSubSection.visible === "true" && (dataVisualizationSubSection === null || dataVisualizationSubSection === void 0 ? void 0 : (_dataVisualizationSub = dataVisualizationSubSection.presentation) === null || _dataVisualizationSub === void 0 ? void 0 : _dataVisualizationSub.visualizations) && (subSectionVisualization === null || subSectionVisualization === void 0 ? void 0 : subSectionVisualization.type) === "Table" && (subSectionVisualization === null || subSectionVisualization === void 0 ? void 0 : (_subSectionVisualizat = subSectionVisualization.control) === null || _subSectionVisualizat === void 0 ? void 0 : _subSectionVisualizat.type) !== "ResponsiveTable";
239
239
  }
240
- function _setGridTableVisualizationInformation(sections, dataVisualizationSubSection, subSectionVisualization, sectionLayout) {
241
- if (_isFacetHasGridTableVisible(dataVisualizationSubSection, subSectionVisualization)) {
240
+ function _setNonResponsiveTableVisualizationInformation(sections, dataVisualizationSubSection, subSectionVisualization, sectionLayout) {
241
+ if (_isFacetHasNonResponsiveTableVisible(dataVisualizationSubSection, subSectionVisualization)) {
242
242
  const tableControlConfiguration = subSectionVisualization.control;
243
243
  if (!(sectionLayout === "Page" && sections.length > 1)) {
244
244
  tableControlConfiguration.rowCountMode = "Auto";
@@ -248,12 +248,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
248
248
  }
249
249
  }
250
250
  }
251
- function _setGridTableWithMixFacetsInformation(subSection, sectionLayout) {
251
+ function _setNonResponsiveTableWithMixFacetsInformation(subSection, sectionLayout) {
252
252
  var _subSection$content;
253
253
  if ((subSection === null || subSection === void 0 ? void 0 : (_subSection$content = subSection.content) === null || _subSection$content === void 0 ? void 0 : _subSection$content.length) === 1) {
254
254
  var _presentation;
255
255
  const tableControl = ((_presentation = subSection.content[0].presentation) === null || _presentation === void 0 ? void 0 : _presentation.visualizations[0]).control;
256
- if (tableControl.type === "GridTable") {
256
+ if (tableControl.type !== "ResponsiveTable") {
257
257
  tableControl.rowCountMode = "Auto";
258
258
  if (sectionLayout !== "Tabs") {
259
259
  tableControl.useCondensedTableLayout = false;
@@ -263,13 +263,13 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
263
263
  }
264
264
 
265
265
  /**
266
- * Set the GridTable display information.
266
+ * Set the NonResponsive Table (grid, tree, analytical) display information.
267
267
  *
268
268
  * @param sections The ObjectPage sections
269
269
  * @param section The current ObjectPage section processed
270
270
  * @param sectionLayout
271
271
  */
272
- function _setGridTableSubSectionControlConfiguration(sections, section, sectionLayout) {
272
+ function _setNonResponsiveTableSubSectionControlConfiguration(sections, section, sectionLayout) {
273
273
  let dataVisualizationSubSection;
274
274
  let subSectionVisualization;
275
275
  const subSections = section.subSections;
@@ -278,10 +278,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
278
278
  switch (subSections[0].type) {
279
279
  case "DataVisualization":
280
280
  subSectionVisualization = _getSubSectionVisualization(dataVisualizationSubSection);
281
- _setGridTableVisualizationInformation(sections, dataVisualizationSubSection, subSectionVisualization, sectionLayout);
281
+ _setNonResponsiveTableVisualizationInformation(sections, dataVisualizationSubSection, subSectionVisualization, sectionLayout);
282
282
  break;
283
283
  case "Mixed":
284
- _setGridTableWithMixFacetsInformation(dataVisualizationSubSection, sectionLayout);
284
+ _setNonResponsiveTableWithMixFacetsInformation(dataVisualizationSubSection, sectionLayout);
285
285
  break;
286
286
  default:
287
287
  break;
@@ -353,7 +353,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
353
353
  // ==============================================
354
354
  sections.forEach(function (section) {
355
355
  var _section$subSections;
356
- _setGridTableSubSectionControlConfiguration(sections, section, manifestWrapper.getSectionLayout());
356
+ _setNonResponsiveTableSubSectionControlConfiguration(sections, section, manifestWrapper.getSectionLayout());
357
357
  (_section$subSections = section.subSections) === null || _section$subSections === void 0 ? void 0 : _section$subSections.forEach(function (subSection) {
358
358
  var _subSection$content3;
359
359
  subSection.title = subSection.title === "undefined" ? undefined : subSection.title;
@@ -478,4 +478,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
478
478
  _exports.convertPage = convertPage;
479
479
  return _exports;
480
480
  }, false);
481
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJvYmplY3RQYWdlU2VjdGlvbnMiLCJGYWNldHMiLCJtYXAiLCJnZXRTZWN0aW9uRnJvbUFubm90YXRpb24iLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsInNlY3Rpb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsInZhbHVlT2YiLCJnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0U2VjdGlvbnMiLCJzZWN0aW9ucyIsIk9iamVjdCIsImtleXMiLCJtYW5pZmVzdFNlY3Rpb25LZXkiLCJnZXRTZWN0aW9uRnJvbU1hbmlmZXN0IiwiY3VzdG9tU2VjdGlvbkRlZmluaXRpb24iLCJzZWN0aW9uS2V5IiwiY3VzdG9tU2VjdGlvbklEIiwiZ2V0Q3VzdG9tU2VjdGlvbklEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJnZXRIZWFkZXJBY3Rpb25zIiwiYUFubm90YXRpb25IZWFkZXJBY3Rpb25zIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJoZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJhY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsIl9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbiIsInN1YlNlY3Rpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9ucyIsIl9pc0ZhY2V0SGFzR3JpZFRhYmxlVmlzaWJsZSIsImRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiIsInN1YlNlY3Rpb25WaXN1YWxpemF0aW9uIiwidHlwZSIsImNvbnRyb2wiLCJfc2V0R3JpZFRhYmxlVmlzdWFsaXphdGlvbkluZm9ybWF0aW9uIiwic2VjdGlvbkxheW91dCIsInRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24iLCJyb3dDb3VudE1vZGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsIl9zZXRHcmlkVGFibGVXaXRoTWl4RmFjZXRzSW5mb3JtYXRpb24iLCJjb250ZW50IiwidGFibGVDb250cm9sIiwiX3NldEdyaWRUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbiIsIl9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMiLCJzaW5nbGVWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInNpbmdsZUNvbnRlbnQiLCJnZXRTZWN0aW9ucyIsIm1lcmdlIiwic2lkZUNvbnRlbnQiLCJvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQiLCJnZXRTZWN0aW9uTGF5b3V0IiwiZmlyc3RGb3JtIiwiZmluZCIsImVsZW1lbnQiLCJTdWJTZWN0aW9uVHlwZSIsIkZvcm0iLCJoYXNIZWFkZXJDb250ZW50IiwiZ2V0SGVhZGVyRmFjZXRzIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiSGVhZGVySW5mbyIsInRlbXBsYXRlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImhlYWRlciIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwiZmFjZXRzIiwic2hvd0NvbnRlbnQiLCJoYXNDb250ZW50IiwiYXZhdGFyIiwiZ2V0QXZhdGFyIiwiZXhwYW5kZWRJbWFnZVZpc2libGUiLCJoZWFkZXJDb21tYW5kQWN0aW9ucyIsImZvb3RlckNvbW1hbmRBY3Rpb25zIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb21iaW5lZEFjdGlvbiwgQ3VzdG9tQWN0aW9uLCBPdmVycmlkZVR5cGVBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7XG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0RGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRGb3JtU3ViU2VjdGlvbixcblx0T2JqZWN0UGFnZVNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTdWJTZWN0aW9uXG59IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7XG5cdGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsXG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9ucyxcblx0U3ViU2VjdGlvblR5cGVcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCwgUG9zaXRpb24gfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU2VjdGlvbklELCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCwgZ2V0U2VjdGlvbklEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RTZWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24gfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4uL1RlbXBsYXRlQ29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VEZWZpbml0aW9uID0gUGFnZURlZmluaXRpb24gJiB7XG5cdGhlYWRlcjoge1xuXHRcdHZpc2libGU6IGJvb2xlYW47XG5cdFx0c2VjdGlvbj86IE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdGZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W107XG5cdFx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRcdHNob3dDb250ZW50OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRoYXNDb250ZW50OiBib29sZWFuO1xuXHRcdGF2YXRhcj86IEF2YXRhcjtcblx0XHR0aXRsZToge1xuXHRcdFx0ZXhwYW5kZWRJbWFnZVZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdH07XG5cdH07XG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGhlYWRlckNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRmb290ZXJDb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0c2hvd0FuY2hvckJhcjogYm9vbGVhbjtcblx0dXNlSWNvblRhYkJhcjogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGdldFNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZWN0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnQ7IGl0IGlzIG9ubHkgdmlzaWJsZSBpbiBlZGl0IG1vZGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YWxsSGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXVxuKTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IGdldEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJmYWNldFN1YlNlY3Rpb25zID0gaGVhZGVyRmFjZXRzID8gY3JlYXRlU3ViU2VjdGlvbnMoaGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSA6IFtdO1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdGlmIChjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHQvLyBtZXJnZSBhbm5vdGF0aW9uIGJhc2VkIGhlYWRlciBmYWNldHMgYW5kIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGluIHRoZSByaWdodCBvcmRlclxuXHRcdGxldCBpID0gMDtcblx0XHRhbGxIZWFkZXJGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0Ly8gaGlkZGVuIGhlYWRlciBmYWNldHMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhbGxIZWFkZXJGYWNldHMgYXJyYXkgPT4gYWRkIHRoZW0gYW55d2F5XG5cdFx0XHR3aGlsZSAoaGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmIGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0udmlzaWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmXG5cdFx0XHRcdChpdGVtLmtleSA9PT0gaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkgfHxcblx0XHRcdFx0XHQvLyBmb3IgaGVhZGVyIGZhY2V0cyB3aXRoIG5vIGlkIHRoZSBrZXlzIG9mIGhlYWRlciBmYWNldCBhbmQgc3Vic2VjdGlvbiBhcmUgZGlmZmVyZW50ID0+IGNoZWNrIG9ubHkgdGhlIGxhc3QgcGFydFxuXHRcdFx0XHRcdGl0ZW0ua2V5LnNsaWNlKGl0ZW0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSA9PT1cblx0XHRcdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5LnNsaWNlKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbUl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IGN1c3RvbUl0ZW0ua2V5KSB7XG5cdFx0XHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGN1c3RvbUl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMgPSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCxcblx0XHRrZXk6IFwiRWRpdGFibGVIZWFkZXJDb250ZW50XCIsXG5cdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX0hFQURFUl9TRUNUSU9OfVwiLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpLFxuXHRcdHN1YlNlY3Rpb25zOiBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uc1xuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5pdGlvbiBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBGYWNldCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQWxsIHNlY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25zRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9iamVjdFBhZ2VTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSA9XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubWFwKChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpID0+XG5cdFx0XHRnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCkgfHwgW107XG5cdHJldHVybiBvYmplY3RQYWdlU2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFubm90YXRpb24gYmFzZWQgc2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldDogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gZ2V0U2VjdGlvbklEKGZhY2V0KTtcblx0Y29uc3Qgc2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IHNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IGZhY2V0LkxhYmVsID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0LkxhYmVsKSkgOiB1bmRlZmluZWQsXG5cdFx0c2hvd1RpdGxlOiAhIWZhY2V0LkxhYmVsLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0c3ViU2VjdGlvbnM6IGNyZWF0ZVN1YlNlY3Rpb25zKFtmYWNldF0sIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cdHJldHVybiBzZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9ucyBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgZGVmaW5pdGlvbnMuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0U2VjdGlvbnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdFNlY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+IHtcblx0Y29uc3Qgc2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFNlY3Rpb25zKS5mb3JFYWNoKChtYW5pZmVzdFNlY3Rpb25LZXkpID0+IHtcblx0XHRzZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldID0gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChtYW5pZmVzdFNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0sIG1hbmlmZXN0U2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QtYmFzZWQgY3VzdG9tIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBjdXN0b21TZWN0aW9uSUQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5pZCB8fCBnZXRDdXN0b21TZWN0aW9uSUQoc2VjdGlvbktleSk7XG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGxldCBtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRpZiAoIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zKSB7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbm8gc3ViU2VjdGlvbiBkZWZpbmVkLCB3ZSBhZGQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1c3RvbSBzZWN0aW9uIGFzIHN1YnNlY3Rpb25zXG5cdFx0Ly8gYW5kIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZpc2liaWxpdHkgdG8gJ3RydWUnLCBhcyB0aGUgYWN0dWFsIHZpc2liaWxpdHkgaXMgaGFuZGxlZCBieSB0aGUgc2VjdGlvbiBpdHNlbGZcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0ge1xuXHRcdFx0W3NlY3Rpb25LZXldOiB7XG5cdFx0XHRcdC4uLmN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLFxuXHRcdFx0XHRwb3NpdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHR2aXNpYmxlOiBcInRydWVcIlxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyBhcyBhbnlcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYUFubm90YXRpb25IZWFkZXJBY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGZvb3RlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEZvb3RlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCwgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zKTtcblxuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogZm9vdGVyQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59O1xuXG5mdW5jdGlvbiBfZ2V0U3ViU2VjdGlvblZpc3VhbGl6YXRpb24oc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0cmV0dXJuIChzdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdID8gc3ViU2VjdGlvbi5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gOiB1bmRlZmluZWQpIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcbn1cblxuZnVuY3Rpb24gX2lzRmFjZXRIYXNHcmlkVGFibGVWaXNpYmxlKFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiICYmXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LnR5cGUgPT09IFwiVGFibGVcIiAmJlxuXHRcdHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uPy5jb250cm9sPy50eXBlID09PSBcIkdyaWRUYWJsZVwiXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9zZXRHcmlkVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24oXG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0c2VjdGlvbkxheW91dDogc3RyaW5nXG4pOiB2b2lkIHtcblx0aWYgKF9pc0ZhY2V0SGFzR3JpZFRhYmxlVmlzaWJsZShkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uKSkge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbi5jb250cm9sO1xuXHRcdGlmICghKHNlY3Rpb25MYXlvdXQgPT09IFwiUGFnZVwiICYmIHNlY3Rpb25zLmxlbmd0aCA+IDEpKSB7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnJvd0NvdW50TW9kZSA9IFwiQXV0b1wiO1xuXHRcdH1cblx0XHRpZiAoc2VjdGlvbkxheW91dCAhPT0gXCJUYWJzXCIpIHtcblx0XHRcdHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24udXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gX3NldEdyaWRUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbihzdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQ6IHN0cmluZyk6IHZvaWQge1xuXHRpZiAoc3ViU2VjdGlvbj8uY29udGVudD8ubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sID0gKChzdWJTZWN0aW9uLmNvbnRlbnRbMF0gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKS5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbilcblx0XHRcdC5jb250cm9sO1xuXHRcdGlmICh0YWJsZUNvbnRyb2wudHlwZSA9PT0gXCJHcmlkVGFibGVcIikge1xuXHRcdFx0dGFibGVDb250cm9sLnJvd0NvdW50TW9kZSA9IFwiQXV0b1wiO1xuXHRcdFx0aWYgKHNlY3Rpb25MYXlvdXQgIT09IFwiVGFic1wiKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFNldCB0aGUgR3JpZFRhYmxlIGRpc3BsYXkgaW5mb3JtYXRpb24uXG4gKlxuICogQHBhcmFtIHNlY3Rpb25zIFRoZSBPYmplY3RQYWdlIHNlY3Rpb25zXG4gKiBAcGFyYW0gc2VjdGlvbiBUaGUgY3VycmVudCBPYmplY3RQYWdlIHNlY3Rpb24gcHJvY2Vzc2VkXG4gKiBAcGFyYW0gc2VjdGlvbkxheW91dFxuICovXG5mdW5jdGlvbiBfc2V0R3JpZFRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKFxuXHRzZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSxcblx0c2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24sXG5cdHNlY3Rpb25MYXlvdXQ6IHN0cmluZ1xuKTogdm9pZCB7XG5cdGxldCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblx0bGV0IHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb247XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gc2VjdGlvbi5zdWJTZWN0aW9ucztcblx0aWYgKHN1YlNlY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuXHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zWzBdIGFzIERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjtcblx0XHRzd2l0Y2ggKHN1YlNlY3Rpb25zWzBdLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJEYXRhVmlzdWFsaXphdGlvblwiOlxuXHRcdFx0XHRzdWJTZWN0aW9uVmlzdWFsaXphdGlvbiA9IF9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbihkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pO1xuXHRcdFx0XHRfc2V0R3JpZFRhYmxlVmlzdWFsaXphdGlvbkluZm9ybWF0aW9uKHNlY3Rpb25zLCBkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLCBzZWN0aW9uTGF5b3V0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTWl4ZWRcIjpcblx0XHRcdFx0X3NldEdyaWRUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbihkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0X3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb25kZW5zZSBsYXlvdXQgbW9kZSBmcm9tIHRoZSBzdWJzZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YlNlY3Rpb25zIHdoZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjb25kZW5zZWQgbGF5b3V0XG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pIHtcblx0bGV0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHQvLyBXZSBjaGVjayBpbiBlYWNoIHN1YnNlY3Rpb24gaWYgdGhlcmUgaXMgdmlzdWFsaXphdGlvbnNcblx0c3ViU2VjdGlvbnMuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4ge1xuXHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHRcdGlmIChkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0c2luZ2xlVmlzdWFsaXphdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBUaGVuIHdlIGNoZWNrIHRoZSBjb250ZW50IG9mIHRoZSBzdWJzZWN0aW9uLCBhbmQgaW4gZWFjaCBjb250ZW50IHdlIGNoZWNrIGlmIHRoZXJlIGlzIGEgdGFibGUgdG8gc2V0IGl0cyBjb25kZW5zZWQgbGF5b3V0IHRvIGZhbHNlXG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8uY29udGVudCkge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmNvbnRlbnQuZm9yRWFjaCgoc2luZ2xlQ29udGVudCkgPT4ge1xuXHRcdFx0XHQoc2luZ2xlQ29udGVudCBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pLnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgoc2luZ2xlVmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUmV0cmlldmVzIGFuZCBtZXJnZXMgdGhlIE9iamVjdFBhZ2Ugc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbiBhbmQgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFNlY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzdWJTZWN0aW9uczoge1xuXHRcdFx0XHRhY3Rpb25zOiBPdmVycmlkZVR5cGUubWVyZ2UsXG5cdFx0XHRcdHRpdGxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0XHRzaWRlQ29udGVudDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgYW5kIGFjdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgYXNzaWduZWQgdG8gYSBmb3JtLFxuXHQvLyB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IGFuZCBhY3Rpb25zIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBjb250ZW50LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRfc2V0R3JpZFRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKHNlY3Rpb25zLCBzZWN0aW9uLCBtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbkxheW91dCgpKTtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRzdWJTZWN0aW9uLnRpdGxlID0gc3ViU2VjdGlvbi50aXRsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IHN1YlNlY3Rpb24udGl0bGU7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIpIHtcblx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50Py5mb3JFYWNoKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29udGVudC5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQgPSBzdWJTZWN0aW9uLm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5jb250ZW50Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RGb3JtID0gc3ViU2VjdGlvbi5jb250ZW50LmZpbmQoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IChlbGVtZW50IGFzIEZvcm1TdWJTZWN0aW9uKS50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5Gb3JtXG5cdFx0XHRcdCkgYXMgRm9ybVN1YlNlY3Rpb247XG5cblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCB0byB0aGUgU3ViU2VjdGlvbidzIGZpcnN0IGZvcm07IG9yIC0tIGlmIHVuYXZhaWxhYmxlIC0tIHRvIGl0cyBmaXJzdCBjb250ZW50XG5cdFx0XHRcdC8vIDIuIENvcHkgYWN0aW9ucyB0byB0aGUgZmlyc3QgZm9ybSBvZiB0aGUgU3ViU2VjdGlvbidzIGNvbnRlbnRcblx0XHRcdFx0Ly8gMy4gRGVsZXRlIHNpZGVDb250ZW50IC8gYWN0aW9ucyBhdCB0aGUgKGludmFsaWQpIG1hbmlmZXN0IGxldmVsXG5cblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RGb3JtKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm0sIGl0IGFsd2F5cyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZm9ybSwgYXMgdGhlIGZvcm0gaW5oZXJpdHMgdGhlIElEIG9mIHRoZSBTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRmaXJzdEZvcm0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJTZWN0aW9uLmNvbnRlbnRbMF0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpcnN0Rm9ybSAmJiAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Zmlyc3RGb3JtLmFjdGlvbnMgPSAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucztcblx0XHRcdFx0XHQoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYXZhdGFyIHdoZW4gdGhlIGhlYWRlciBpcyBpbiBleHBhbmRlZCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdHNob3dDb250ZW50OiBnZXRTaG93SGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGhhc0NvbnRlbnQ6IGhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhdmF0YXI6IGdldEF2YXRhcihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VjdGlvbnM6IHNlY3Rpb25zLFxuXHRcdGZvb3RlckFjdGlvbnM6IGZvb3RlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRoZWFkZXJDb21tYW5kQWN0aW9uczogaGVhZGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRmb290ZXJDb21tYW5kQWN0aW9uczogZm9vdGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRzaG93QW5jaG9yQmFyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd0FuY2hvckJhcigpLFxuXHRcdHVzZUljb25UYWJCYXI6IG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKClcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkRBLE1BQU1BLGFBQWEsR0FBRyxDQUFDQyxlQUEyQixFQUFFQyxRQUFnQixLQUFhO0lBQUE7SUFDaEYsT0FBTyx3QkFBQUQsZUFBZSxDQUFDRSxFQUFFLHdEQUFsQixvQkFBb0JDLFFBQVEsRUFBRSwrQkFBSUgsZUFBZSxDQUFDSSxLQUFLLDBEQUFyQixzQkFBdUJELFFBQVEsRUFBRSxLQUFJRixRQUFRO0VBQ3ZGLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTSSwyQkFBMkIsQ0FDMUNDLGdCQUFrQyxFQUNsQ0MsZUFBd0MsRUFDcEI7SUFBQTtJQUNwQixNQUFNQyx1QkFBdUIsR0FBR0MsMEJBQTBCLEVBQUU7SUFDNUQsTUFBTUMsWUFBWSw0QkFBR0osZ0JBQWdCLENBQUNLLGFBQWEsRUFBRSxDQUFDQyxXQUFXLG9GQUE1QyxzQkFBOENDLEVBQUUsMkRBQWhELHVCQUFrREMsWUFBWTtJQUNuRixNQUFNQyxzQkFBc0IsR0FBR0wsWUFBWSxHQUFHTSxpQkFBaUIsQ0FBQ04sWUFBWSxFQUFFSixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzFHLE1BQU1XLDRCQUE0QixHQUFHQyxrQ0FBa0MsQ0FBQ1osZ0JBQWdCLENBQUM7SUFDekYsSUFBSWEsMEJBQWtELEdBQUcsRUFBRTtJQUMzRCxJQUFJRiw0QkFBNEIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUM1QztNQUNBLElBQUlDLENBQUMsR0FBRyxDQUFDO01BQ1RkLGVBQWUsQ0FBQ2UsT0FBTyxDQUFDLFVBQVVDLElBQUksRUFBRTtRQUN2QztRQUNBLE9BQU9SLHNCQUFzQixDQUFDSyxNQUFNLEdBQUdDLENBQUMsSUFBSU4sc0JBQXNCLENBQUNNLENBQUMsQ0FBQyxDQUFDRyxPQUFPLEtBQUssT0FBTyxFQUFFO1VBQzFGTCwwQkFBMEIsQ0FBQ00sSUFBSSxDQUFDVixzQkFBc0IsQ0FBQ00sQ0FBQyxDQUFDLENBQUM7VUFDMURBLENBQUMsRUFBRTtRQUNKO1FBQ0EsSUFDQ04sc0JBQXNCLENBQUNLLE1BQU0sR0FBR0MsQ0FBQyxLQUNoQ0UsSUFBSSxDQUFDRyxHQUFHLEtBQUtYLHNCQUFzQixDQUFDTSxDQUFDLENBQUMsQ0FBQ0ssR0FBRztRQUMxQztRQUNBSCxJQUFJLENBQUNHLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDSixJQUFJLENBQUNHLEdBQUcsQ0FBQ0UsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUM3Q2Isc0JBQXNCLENBQUNNLENBQUMsQ0FBQyxDQUFDSyxHQUFHLENBQUNDLEtBQUssQ0FBQ1osc0JBQXNCLENBQUNNLENBQUMsQ0FBQyxDQUFDSyxHQUFHLENBQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUMxRjtVQUNEVCwwQkFBMEIsQ0FBQ00sSUFBSSxDQUFDVixzQkFBc0IsQ0FBQ00sQ0FBQyxDQUFDLENBQUM7VUFDMURBLENBQUMsRUFBRTtRQUNKLENBQUMsTUFBTTtVQUNOSiw0QkFBNEIsQ0FBQ0ssT0FBTyxDQUFDLFVBQVVPLFVBQVUsRUFBRTtZQUMxRCxJQUFJTixJQUFJLENBQUNHLEdBQUcsS0FBS0csVUFBVSxDQUFDSCxHQUFHLEVBQUU7Y0FDaENQLDBCQUEwQixDQUFDTSxJQUFJLENBQUNJLFVBQVUsQ0FBQztZQUM1QztVQUNELENBQUMsQ0FBQztRQUNIO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQyxNQUFNO01BQ05WLDBCQUEwQixHQUFHSixzQkFBc0I7SUFDcEQ7SUFDQSxNQUFNZSxhQUFnQyxHQUFHO01BQ3hDQyxFQUFFLEVBQUV2Qix1QkFBdUI7TUFDM0JrQixHQUFHLEVBQUUsdUJBQXVCO01BQzVCTSxLQUFLLEVBQUUsbURBQW1EO01BQzFEUixPQUFPLEVBQUVTLGlCQUFpQixDQUFDcEIsRUFBRSxDQUFDcUIsVUFBVSxDQUFDO01BQ3pDQyxXQUFXLEVBQUVoQjtJQUNkLENBQUM7SUFDRCxPQUFPVyxhQUFhO0VBQ3JCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTUEsU0FBU00seUJBQXlCLENBQUM5QixnQkFBa0MsRUFBdUI7SUFBQTtJQUMzRixNQUFNK0IsVUFBVSxHQUFHL0IsZ0JBQWdCLENBQUNLLGFBQWEsRUFBRTtJQUNuRCxNQUFNMkIsa0JBQXVDLEdBQzVDLDBCQUFBRCxVQUFVLENBQUN6QixXQUFXLG9GQUF0QixzQkFBd0JDLEVBQUUscUZBQTFCLHVCQUE0QjBCLE1BQU0sMkRBQWxDLHVCQUFvQ0MsR0FBRyxDQUFFeEMsZUFBMkIsSUFDbkV5Qyx3QkFBd0IsQ0FBQ3pDLGVBQWUsRUFBRU0sZ0JBQWdCLENBQUMsQ0FDM0QsS0FBSSxFQUFFO0lBQ1IsT0FBT2dDLGtCQUFrQjtFQUMxQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNHLHdCQUF3QixDQUFDQyxLQUFpQixFQUFFcEMsZ0JBQWtDLEVBQXFCO0lBQUE7SUFDM0csTUFBTXFDLFNBQVMsR0FBR0MsWUFBWSxDQUFDRixLQUFLLENBQUM7SUFDckMsTUFBTUcsT0FBMEIsR0FBRztNQUNsQ2QsRUFBRSxFQUFFWSxTQUFTO01BQ2JqQixHQUFHLEVBQUUzQixhQUFhLENBQUMyQyxLQUFLLEVBQUVDLFNBQVMsQ0FBQztNQUNwQ1gsS0FBSyxFQUFFVSxLQUFLLENBQUN0QyxLQUFLLEdBQUc2QixpQkFBaUIsQ0FBQ2EsMkJBQTJCLENBQUNKLEtBQUssQ0FBQ3RDLEtBQUssQ0FBQyxDQUFDLEdBQUcyQyxTQUFTO01BQzVGQyxTQUFTLEVBQUUsQ0FBQyxDQUFDTixLQUFLLENBQUN0QyxLQUFLO01BQ3hCb0IsT0FBTyxFQUFFUyxpQkFBaUIsQ0FBQ2dCLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDSiwyQkFBMkIsdUJBQUNKLEtBQUssQ0FBQzlCLFdBQVcsZ0ZBQWpCLG1CQUFtQkMsRUFBRSxvRkFBckIsc0JBQXVCc0MsTUFBTSwyREFBN0IsdUJBQStCQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDbkhqQixXQUFXLEVBQUVuQixpQkFBaUIsQ0FBQyxDQUFDMEIsS0FBSyxDQUFDLEVBQUVwQyxnQkFBZ0I7SUFDekQsQ0FBQztJQUNELE9BQU91QyxPQUFPO0VBQ2Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTUSx1QkFBdUIsQ0FDL0JDLGdCQUFxRCxFQUNyRGhELGdCQUFrQyxFQUNRO0lBQzFDLE1BQU1pRCxRQUFpRCxHQUFHLENBQUMsQ0FBQztJQUM1REMsTUFBTSxDQUFDQyxJQUFJLENBQUNILGdCQUFnQixDQUFDLENBQUNoQyxPQUFPLENBQUVvQyxrQkFBa0IsSUFBSztNQUM3REgsUUFBUSxDQUFDRyxrQkFBa0IsQ0FBQyxHQUFHQyxzQkFBc0IsQ0FBQ0wsZ0JBQWdCLENBQUNJLGtCQUFrQixDQUFDLEVBQUVBLGtCQUFrQixFQUFFcEQsZ0JBQWdCLENBQUM7SUFDbEksQ0FBQyxDQUFDO0lBQ0YsT0FBT2lELFFBQVE7RUFDaEI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNJLHNCQUFzQixDQUM5QkMsdUJBQXdDLEVBQ3hDQyxVQUFrQixFQUNsQnZELGdCQUFrQyxFQUNSO0lBQzFCLE1BQU13RCxlQUFlLEdBQUdGLHVCQUF1QixDQUFDN0IsRUFBRSxJQUFJZ0Msa0JBQWtCLENBQUNGLFVBQVUsQ0FBQztJQUNwRixJQUFJRyxRQUE4QixHQUFHSix1QkFBdUIsQ0FBQ0ksUUFBUTtJQUNyRSxJQUFJLENBQUNBLFFBQVEsRUFBRTtNQUNkQSxRQUFRLEdBQUc7UUFDVkMsU0FBUyxFQUFFQyxTQUFTLENBQUNDO01BQ3RCLENBQUM7SUFDRjtJQUNBLElBQUlDLG1CQUF1RDtJQUMzRCxJQUFJLENBQUNSLHVCQUF1QixDQUFDekIsV0FBVyxFQUFFO01BQ3pDO01BQ0E7TUFDQWlDLG1CQUFtQixHQUFHO1FBQ3JCLENBQUNQLFVBQVUsR0FBRztVQUNiLEdBQUdELHVCQUF1QjtVQUMxQkksUUFBUSxFQUFFakIsU0FBUztVQUNuQnZCLE9BQU8sRUFBRTtRQUNWO01BQ0QsQ0FBQztJQUNGLENBQUMsTUFBTTtNQUNONEMsbUJBQW1CLEdBQUdSLHVCQUF1QixDQUFDekIsV0FBVztJQUMxRDtJQUNBLE1BQU1BLFdBQVcsR0FBR2tDLHVCQUF1QixDQUFDRCxtQkFBbUIsRUFBRTlELGdCQUFnQixDQUFDO0lBRWxGLE1BQU1nRSxhQUFzQyxHQUFHO01BQzlDdkMsRUFBRSxFQUFFK0IsZUFBZTtNQUNuQnBDLEdBQUcsRUFBRW1DLFVBQVU7TUFDZjdCLEtBQUssRUFBRTRCLHVCQUF1QixDQUFDNUIsS0FBSztNQUNwQ2dCLFNBQVMsRUFBRSxDQUFDLENBQUNZLHVCQUF1QixDQUFDNUIsS0FBSztNQUMxQ1IsT0FBTyxFQUFFb0MsdUJBQXVCLENBQUNwQyxPQUFPLEtBQUt1QixTQUFTLEdBQUdhLHVCQUF1QixDQUFDcEMsT0FBTyxHQUFHLE1BQU07TUFDakd3QyxRQUFRLEVBQUVBLFFBQVE7TUFDbEI3QixXQUFXLEVBQUVBO0lBQ2QsQ0FBQztJQUNELE9BQU9tQyxhQUFhO0VBQ3JCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLE1BQU1DLGdCQUFnQixHQUFHLFVBQVVqRSxnQkFBa0MsRUFBa0I7SUFDN0YsTUFBTWtFLHdCQUFzQyxHQUFHQyx1QkFBdUIsQ0FBQ25FLGdCQUFnQixDQUFDO0lBQ3hGLE1BQU1vRSxlQUFlLEdBQUdwRSxnQkFBZ0IsQ0FBQ3FFLGtCQUFrQixFQUFFO0lBQzdELE1BQU1DLGVBQWUsR0FBR0Msc0JBQXNCLENBQzdDSCxlQUFlLENBQUNILGdCQUFnQixFQUFFLEVBQ2xDakUsZ0JBQWdCLEVBQ2hCa0Usd0JBQXdCLEVBQ3hCekIsU0FBUyxFQUNUQSxTQUFTLEVBQ1QrQixzQkFBc0IsQ0FBQ3hFLGdCQUFnQixDQUFDLENBQ3hDO0lBQ0QsTUFBTXlFLHFCQUF5QyxHQUFHO01BQ2pEQyxXQUFXLEVBQUVDLFlBQVksQ0FBQ0MsU0FBUztNQUNuQ0MsT0FBTyxFQUFFRixZQUFZLENBQUNDLFNBQVM7TUFDL0IxRCxPQUFPLEVBQUV5RCxZQUFZLENBQUNDLFNBQVM7TUFDL0JFLDhCQUE4QixFQUFFSCxZQUFZLENBQUNDLFNBQVM7TUFDdERHLE9BQU8sRUFBRUosWUFBWSxDQUFDQztJQUN2QixDQUFDO0lBQ0QsTUFBTUksYUFBYSxHQUFHQyxvQkFBb0IsQ0FBQ2Ysd0JBQXdCLEVBQUVJLGVBQWUsQ0FBQ1ksT0FBTyxFQUFFVCxxQkFBcUIsQ0FBQztJQUNwSCxPQUFPO01BQ05TLE9BQU8sRUFBRUMsc0JBQXNCLENBQUNILGFBQWEsQ0FBQztNQUM5Q0ksY0FBYyxFQUFFZCxlQUFlLENBQUNjO0lBQ2pDLENBQUM7RUFDRixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUMsZ0JBQWdCLEdBQUcsVUFBVXJGLGdCQUFrQyxFQUFrQjtJQUM3RixNQUFNb0UsZUFBZSxHQUFHcEUsZ0JBQWdCLENBQUNxRSxrQkFBa0IsRUFBRTtJQUM3RCxNQUFNaUIsd0JBQXNDLEdBQUdDLHVCQUF1QixDQUFDbkIsZUFBZSxDQUFDb0IsWUFBWSxFQUFFLEVBQUV4RixnQkFBZ0IsQ0FBQztJQUN4SCxNQUFNc0UsZUFBZSxHQUFHQyxzQkFBc0IsQ0FBQ0gsZUFBZSxDQUFDaUIsZ0JBQWdCLEVBQUUsRUFBRXJGLGdCQUFnQixFQUFFc0Ysd0JBQXdCLENBQUM7SUFFOUgsTUFBTWIscUJBQXlDLEdBQUc7TUFDakRDLFdBQVcsRUFBRUMsWUFBWSxDQUFDQyxTQUFTO01BQ25DQyxPQUFPLEVBQUVGLFlBQVksQ0FBQ0MsU0FBUztNQUMvQjFELE9BQU8sRUFBRXlELFlBQVksQ0FBQ0MsU0FBUztNQUMvQkUsOEJBQThCLEVBQUVILFlBQVksQ0FBQ0MsU0FBUztNQUN0REcsT0FBTyxFQUFFSixZQUFZLENBQUNDO0lBQ3ZCLENBQUM7SUFDRCxNQUFNYSxhQUFhLEdBQUdSLG9CQUFvQixDQUFDSyx3QkFBd0IsRUFBRWhCLGVBQWUsQ0FBQ1ksT0FBTyxFQUFFVCxxQkFBcUIsQ0FBQztJQUNwSCxPQUFPO01BQ05TLE9BQU8sRUFBRU8sYUFBYTtNQUN0QkwsY0FBYyxFQUFFZCxlQUFlLENBQUNjO0lBQ2pDLENBQUM7RUFDRixDQUFDO0VBQUM7RUFFRixTQUFTTSwyQkFBMkIsQ0FBQ0MsVUFBdUMsRUFBc0I7SUFBQTtJQUNqRyxPQUFRQSxVQUFVLGFBQVZBLFVBQVUsd0NBQVZBLFVBQVUsQ0FBRUMsWUFBWSxrREFBeEIsc0JBQTBCQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUdGLFVBQVUsQ0FBQ0MsWUFBWSxDQUFDQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUdwRCxTQUFTO0VBQzVHO0VBRUEsU0FBU3FELDJCQUEyQixDQUNuQ0MsMkJBQXdELEVBQ3hEQyx1QkFBMkMsRUFDakM7SUFBQTtJQUNWLE9BQ0NELDJCQUEyQixDQUFDN0UsT0FBTyxLQUFLLE1BQU0sS0FDOUM2RSwyQkFBMkIsYUFBM0JBLDJCQUEyQixnREFBM0JBLDJCQUEyQixDQUFFSCxZQUFZLDBEQUF6QyxzQkFBMkNDLGNBQWMsS0FDekQsQ0FBQUcsdUJBQXVCLGFBQXZCQSx1QkFBdUIsdUJBQXZCQSx1QkFBdUIsQ0FBRUMsSUFBSSxNQUFLLE9BQU8sSUFDekMsQ0FBQUQsdUJBQXVCLGFBQXZCQSx1QkFBdUIsZ0RBQXZCQSx1QkFBdUIsQ0FBRUUsT0FBTywwREFBaEMsc0JBQWtDRCxJQUFJLE1BQUssV0FBVztFQUV4RDtFQUVBLFNBQVNFLHFDQUFxQyxDQUM3Q2xELFFBQTZCLEVBQzdCOEMsMkJBQXdELEVBQ3hEQyx1QkFBMkMsRUFDM0NJLGFBQXFCLEVBQ2Q7SUFDUCxJQUFJTiwyQkFBMkIsQ0FBQ0MsMkJBQTJCLEVBQUVDLHVCQUF1QixDQUFDLEVBQUU7TUFDdEYsTUFBTUsseUJBQW9ELEdBQUdMLHVCQUF1QixDQUFDRSxPQUFPO01BQzVGLElBQUksRUFBRUUsYUFBYSxLQUFLLE1BQU0sSUFBSW5ELFFBQVEsQ0FBQ25DLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2RHVGLHlCQUF5QixDQUFDQyxZQUFZLEdBQUcsTUFBTTtNQUNoRDtNQUNBLElBQUlGLGFBQWEsS0FBSyxNQUFNLEVBQUU7UUFDN0JDLHlCQUF5QixDQUFDRSx1QkFBdUIsR0FBRyxLQUFLO01BQzFEO0lBQ0Q7RUFDRDtFQUVBLFNBQVNDLHFDQUFxQyxDQUFDYixVQUF1QyxFQUFFUyxhQUFxQixFQUFRO0lBQUE7SUFDcEgsSUFBSSxDQUFBVCxVQUFVLGFBQVZBLFVBQVUsOENBQVZBLFVBQVUsQ0FBRWMsT0FBTyx3REFBbkIsb0JBQXFCM0YsTUFBTSxNQUFLLENBQUMsRUFBRTtNQUFBO01BQ3RDLE1BQU00RixZQUFZLEdBQUcsa0JBQUVmLFVBQVUsQ0FBQ2MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFpQ2IsWUFBWSxrREFBbkUsY0FBcUVDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDMUdLLE9BQU87TUFDVCxJQUFJUSxZQUFZLENBQUNULElBQUksS0FBSyxXQUFXLEVBQUU7UUFDdENTLFlBQVksQ0FBQ0osWUFBWSxHQUFHLE1BQU07UUFDbEMsSUFBSUYsYUFBYSxLQUFLLE1BQU0sRUFBRTtVQUM3Qk0sWUFBWSxDQUFDSCx1QkFBdUIsR0FBRyxLQUFLO1FBQzdDO01BQ0Q7SUFDRDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0ksMkNBQTJDLENBQ25EMUQsUUFBNkIsRUFDN0JWLE9BQTBCLEVBQzFCNkQsYUFBcUIsRUFDZDtJQUNQLElBQUlMLDJCQUF3RDtJQUM1RCxJQUFJQyx1QkFBMkM7SUFDL0MsTUFBTW5FLFdBQVcsR0FBR1UsT0FBTyxDQUFDVixXQUFXO0lBQ3ZDLElBQUlBLFdBQVcsQ0FBQ2YsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUM3QmlGLDJCQUEyQixHQUFHbEUsV0FBVyxDQUFDLENBQUMsQ0FBZ0M7TUFDM0UsUUFBUUEsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDb0UsSUFBSTtRQUMxQixLQUFLLG1CQUFtQjtVQUN2QkQsdUJBQXVCLEdBQUdOLDJCQUEyQixDQUFDSywyQkFBMkIsQ0FBQztVQUNsRkkscUNBQXFDLENBQUNsRCxRQUFRLEVBQUU4QywyQkFBMkIsRUFBRUMsdUJBQXVCLEVBQUVJLGFBQWEsQ0FBQztVQUNwSDtRQUNELEtBQUssT0FBTztVQUNYSSxxQ0FBcUMsQ0FBQ1QsMkJBQTJCLEVBQUVLLGFBQWEsQ0FBQztVQUNqRjtRQUNEO1VBQ0M7TUFBTTtNQUVSO0lBQ0Q7SUFDQVEsK0JBQStCLENBQUMvRSxXQUFXLENBQUM7RUFDN0M7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMrRSwrQkFBK0IsQ0FBQy9FLFdBQW1DLEVBQUU7SUFDN0UsSUFBSWtFLDJCQUF3RDtJQUM1RDtJQUNBbEUsV0FBVyxDQUFDYixPQUFPLENBQUUyRSxVQUFVLElBQUs7TUFBQTtNQUNuQ0ksMkJBQTJCLEdBQUdKLFVBQXlDO01BQ3ZFLDhCQUFJSSwyQkFBMkIsNkVBQTNCLHVCQUE2QkgsWUFBWSxtREFBekMsdUJBQTJDQyxjQUFjLEVBQUU7UUFBQTtRQUM5RCwwQkFBQUUsMkJBQTJCLHFGQUEzQix1QkFBNkJILFlBQVksMkRBQXpDLHVCQUEyQ0MsY0FBYyxDQUFDN0UsT0FBTyxDQUFFNkYsbUJBQW1CLElBQUs7VUFDMUYsSUFBSUEsbUJBQW1CLENBQUNaLElBQUksS0FBS2EsaUJBQWlCLENBQUNDLEtBQUssRUFBRTtZQUN6REYsbUJBQW1CLENBQUNYLE9BQU8sQ0FBQ0ssdUJBQXVCLEdBQUcsS0FBSztVQUM1RDtRQUNELENBQUMsQ0FBQztNQUNIO01BQ0E7TUFDQSw4QkFBSVIsMkJBQTJCLG1EQUEzQix1QkFBNkJVLE9BQU8sRUFBRTtRQUN6Q1YsMkJBQTJCLENBQUNVLE9BQU8sQ0FBQ3pGLE9BQU8sQ0FBRWdHLGFBQWEsSUFBSztVQUFBO1VBQzlELGtCQUFDQSxhQUFhLENBQWlDcEIsWUFBWSxtREFBM0QsZUFBNkRDLGNBQWMsQ0FBQzdFLE9BQU8sQ0FBRTZGLG1CQUFtQixJQUFLO1lBQzVHLElBQUlBLG1CQUFtQixDQUFDWixJQUFJLEtBQUthLGlCQUFpQixDQUFDQyxLQUFLLEVBQUU7Y0FDekRGLG1CQUFtQixDQUFDWCxPQUFPLENBQUNLLHVCQUF1QixHQUFHLEtBQUs7WUFDNUQ7VUFDRCxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUM7TUFDSDtJQUNELENBQUMsQ0FBQztFQUNIO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVPLE1BQU1VLFdBQVcsR0FBRyxVQUFVakgsZ0JBQWtDLEVBQXVCO0lBQzdGLE1BQU1vRSxlQUFlLEdBQUdwRSxnQkFBZ0IsQ0FBQ3FFLGtCQUFrQixFQUFFO0lBQzdELE1BQU1wQixRQUFRLEdBQUdnQyxvQkFBb0IsQ0FDcENuRCx5QkFBeUIsQ0FBQzlCLGdCQUFnQixDQUFDLEVBQzNDK0MsdUJBQXVCLENBQUNxQixlQUFlLENBQUM2QyxXQUFXLEVBQUUsRUFBRWpILGdCQUFnQixDQUFDLEVBQ3hFO01BQ0MwQixLQUFLLEVBQUVpRCxZQUFZLENBQUNDLFNBQVM7TUFDN0IxRCxPQUFPLEVBQUV5RCxZQUFZLENBQUNDLFNBQVM7TUFDL0IvQyxXQUFXLEVBQUU7UUFDWnFELE9BQU8sRUFBRVAsWUFBWSxDQUFDdUMsS0FBSztRQUMzQnhGLEtBQUssRUFBRWlELFlBQVksQ0FBQ0MsU0FBUztRQUM3QnVDLFdBQVcsRUFBRXhDLFlBQVksQ0FBQ0MsU0FBUztRQUNuQ3dDLDJCQUEyQixFQUFFekMsWUFBWSxDQUFDQztNQUMzQztJQUNELENBQUMsQ0FDRDtJQUNEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBM0IsUUFBUSxDQUFDakMsT0FBTyxDQUFDLFVBQVV1QixPQUFPLEVBQUU7TUFBQTtNQUNuQ29FLDJDQUEyQyxDQUFDMUQsUUFBUSxFQUFFVixPQUFPLEVBQUU2QixlQUFlLENBQUNpRCxnQkFBZ0IsRUFBRSxDQUFDO01BQ2xHLHdCQUFBOUUsT0FBTyxDQUFDVixXQUFXLHlEQUFuQixxQkFBcUJiLE9BQU8sQ0FBQyxVQUFVMkUsVUFBVSxFQUFFO1FBQUE7UUFDbERBLFVBQVUsQ0FBQ2pFLEtBQUssR0FBR2lFLFVBQVUsQ0FBQ2pFLEtBQUssS0FBSyxXQUFXLEdBQUdlLFNBQVMsR0FBR2tELFVBQVUsQ0FBQ2pFLEtBQUs7UUFDbEYsSUFBSWlFLFVBQVUsQ0FBQ00sSUFBSSxLQUFLLE9BQU8sRUFBRTtVQUFBO1VBQ2hDLHdCQUFBTixVQUFVLENBQUNjLE9BQU8seURBQWxCLHFCQUFvQnpGLE9BQU8sQ0FBRXlGLE9BQU8sSUFBSztZQUN4Q0EsT0FBTyxDQUFDVywyQkFBMkIsR0FBR3pCLFVBQVUsQ0FBQ3lCLDJCQUEyQjtVQUM3RSxDQUFDLENBQUM7UUFDSDtRQUNBLElBQUl6QixVQUFVLENBQUNNLElBQUksS0FBSyxPQUFPLDRCQUFJTixVQUFVLENBQUNjLE9BQU8saURBQWxCLHFCQUFvQjNGLE1BQU0sRUFBRTtVQUFBO1VBQzlELE1BQU13RyxTQUFTLEdBQUczQixVQUFVLENBQUNjLE9BQU8sQ0FBQ2MsSUFBSSxDQUN2Q0MsT0FBTyxJQUFNQSxPQUFPLENBQW9CdkIsSUFBSSxLQUFLd0IsY0FBYyxDQUFDQyxJQUFJLENBQ25EOztVQUVuQjtVQUNBO1VBQ0E7O1VBRUEsSUFBSS9CLFVBQVUsQ0FBQ3dCLFdBQVcsRUFBRTtZQUMzQixJQUFJRyxTQUFTLEVBQUU7Y0FDZDtjQUNBQSxTQUFTLENBQUNILFdBQVcsR0FBR3hCLFVBQVUsQ0FBQ3dCLFdBQVc7WUFDL0MsQ0FBQyxNQUFNO2NBQ054QixVQUFVLENBQUNjLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ1UsV0FBVyxHQUFHeEIsVUFBVSxDQUFDd0IsV0FBVztZQUMzRDtZQUNBeEIsVUFBVSxDQUFDd0IsV0FBVyxHQUFHMUUsU0FBUztVQUNuQztVQUVBLElBQUk2RSxTQUFTLGdCQUFLM0IsVUFBVSxDQUFvQlQsT0FBTyxxQ0FBdEMsU0FBd0NwRSxNQUFNLEVBQUU7WUFDaEV3RyxTQUFTLENBQUNwQyxPQUFPLEdBQUlTLFVBQVUsQ0FBb0JULE9BQU87WUFDekRTLFVBQVUsQ0FBb0JULE9BQU8sR0FBRyxFQUFFO1VBQzVDO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUM7SUFDRixPQUFPakMsUUFBUTtFQUNoQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTUEsU0FBUzBFLGdCQUFnQixDQUFDM0gsZ0JBQWtDLEVBQVc7SUFBQTtJQUN0RSxNQUFNb0UsZUFBZSxHQUFHcEUsZ0JBQWdCLENBQUNxRSxrQkFBa0IsRUFBRTtJQUM3RCxPQUNDLENBQUMsMkJBQUFyRSxnQkFBZ0IsQ0FBQ0ssYUFBYSxFQUFFLENBQUNDLFdBQVcscUZBQTVDLHVCQUE4Q0MsRUFBRSwyREFBaEQsdUJBQWtEQyxZQUFZLEtBQUksRUFBRSxFQUFFTSxNQUFNLEdBQUcsQ0FBQyxJQUNqRm9DLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDaUIsZUFBZSxDQUFDd0QsZUFBZSxFQUFFLENBQUMsQ0FBQzlHLE1BQU0sR0FBRyxDQUFDO0VBRTNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMrRyw4QkFBOEIsQ0FBQzdILGdCQUFrQyxFQUFpQztJQUMxRyxNQUFNb0UsZUFBZSxHQUFHcEUsZ0JBQWdCLENBQUNxRSxrQkFBa0IsRUFBRTtJQUM3RCxPQUFPeUQsTUFBTSxDQUNaLENBQUNILGdCQUFnQixDQUFDM0gsZ0JBQWdCLENBQUMsRUFDbkMrSCxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQ2ZELE1BQU0sQ0FBQ2xGLEtBQUssQ0FBQ3dCLGVBQWUsQ0FBQzRELGdCQUFnQixFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRXBGLEdBQUcsQ0FBQ3BDLEVBQUUsQ0FBQ3FCLFVBQVUsQ0FBQyxDQUFDLENBQzVGO0VBQ0Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTXFHLG9CQUFvQixHQUFHLFVBQVVqSSxnQkFBa0MsRUFBb0M7SUFDbkgsT0FBTzJCLGlCQUFpQixDQUFDa0csOEJBQThCLENBQUM3SCxnQkFBZ0IsQ0FBQyxDQUFDO0VBQzNFLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNa0ksdUJBQXVCLEdBQUcsVUFBVWxJLGdCQUFrQyxFQUFvQztJQUN0SCxPQUFPMkIsaUJBQWlCLENBQUNnQixHQUFHLENBQUNrRiw4QkFBOEIsQ0FBQzdILGdCQUFnQixDQUFDLENBQUMsQ0FBQztFQUNoRixDQUFDO0VBQUM7RUFFSyxNQUFNbUksV0FBVyxHQUFHLFVBQVVuSSxnQkFBa0MsRUFBd0I7SUFBQTtJQUM5RixNQUFNb0UsZUFBZSxHQUFHcEUsZ0JBQWdCLENBQUNxRSxrQkFBa0IsRUFBRTtJQUM3RCxJQUFJN0MsYUFBNEM7SUFDaEQsTUFBTU8sVUFBc0IsR0FBRy9CLGdCQUFnQixDQUFDSyxhQUFhLEVBQUU7O0lBRS9EO0lBQ0EsTUFBTUQsWUFBWSxHQUFHNkUsb0JBQW9CLENBQ3hDbUQsOEJBQThCLENBQUNwSSxnQkFBZ0IsQ0FBQyxFQUNoRHFJLDJCQUEyQixDQUFDakUsZUFBZSxDQUFDd0QsZUFBZSxFQUFFLENBQUMsQ0FDOUQ7O0lBRUQ7SUFDQSxNQUFNNUMsYUFBYSxHQUFHZixnQkFBZ0IsQ0FBQ2pFLGdCQUFnQixDQUFDOztJQUV4RDtJQUNBLE1BQU15RixhQUFhLEdBQUdKLGdCQUFnQixDQUFDckYsZ0JBQWdCLENBQUM7SUFFeEQsSUFBSW9FLGVBQWUsQ0FBQzRELGdCQUFnQixFQUFFLEtBQUssMEJBQUFqRyxVQUFVLENBQUN6QixXQUFXLENBQUNDLEVBQUUsbURBQXpCLHVCQUEyQkMsWUFBWSw4QkFBSXVCLFVBQVUsQ0FBQ3pCLFdBQVcsQ0FBQ0MsRUFBRSxtREFBekIsdUJBQTJCK0gsVUFBVSxDQUFDLEVBQUU7TUFDN0g5RyxhQUFhLEdBQUd6QiwyQkFBMkIsQ0FBQ0MsZ0JBQWdCLEVBQUVJLFlBQVksQ0FBQztJQUM1RTtJQUVBLE1BQU02QyxRQUFRLEdBQUdnRSxXQUFXLENBQUNqSCxnQkFBZ0IsQ0FBQztJQUU5QyxPQUFPO01BQ051SSxRQUFRLEVBQUVDLFlBQVksQ0FBQ0MsVUFBVTtNQUNqQ0MsTUFBTSxFQUFFO1FBQ1B4SCxPQUFPLEVBQUVrRCxlQUFlLENBQUN1RSx1QkFBdUIsRUFBRTtRQUNsRHBHLE9BQU8sRUFBRWYsYUFBYTtRQUN0Qm9ILE1BQU0sRUFBRXhJLFlBQVk7UUFDcEI4RSxPQUFPLEVBQUVGLGFBQWEsQ0FBQ0UsT0FBTztRQUM5QjJELFdBQVcsRUFBRVosb0JBQW9CLENBQUNqSSxnQkFBZ0IsQ0FBQztRQUNuRDhJLFVBQVUsRUFBRW5CLGdCQUFnQixDQUFDM0gsZ0JBQWdCLENBQUM7UUFDOUMrSSxNQUFNLEVBQUVDLFNBQVMsQ0FBQ2hKLGdCQUFnQixDQUFDO1FBQ25DMEIsS0FBSyxFQUFFO1VBQ051SCxvQkFBb0IsRUFBRWYsdUJBQXVCLENBQUNsSSxnQkFBZ0I7UUFDL0Q7TUFDRCxDQUFDO01BQ0RpRCxRQUFRLEVBQUVBLFFBQVE7TUFDbEJ3QyxhQUFhLEVBQUVBLGFBQWEsQ0FBQ1AsT0FBTztNQUNwQ2dFLG9CQUFvQixFQUFFbEUsYUFBYSxDQUFDSSxjQUFjO01BQ2xEK0Qsb0JBQW9CLEVBQUUxRCxhQUFhLENBQUNMLGNBQWM7TUFDbERnRSxhQUFhLEVBQUVoRixlQUFlLENBQUNpRixnQkFBZ0IsRUFBRTtNQUNqREMsYUFBYSxFQUFFbEYsZUFBZSxDQUFDa0YsYUFBYTtJQUM3QyxDQUFDO0VBQ0YsQ0FBQztFQUFDO0VBQUE7QUFBQSJ9
481
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRTZWN0aW9uS2V5IiwiZmFjZXREZWZpbml0aW9uIiwiZmFsbGJhY2siLCJJRCIsInRvU3RyaW5nIiwiTGFiZWwiLCJjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiYWxsSGVhZGVyRmFjZXRzIiwiZWRpdGFibGVIZWFkZXJTZWN0aW9uSUQiLCJnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCIsImhlYWRlckZhY2V0cyIsImdldEVudGl0eVR5cGUiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGVhZGVyRmFjZXRzIiwiaGVhZGVyZmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZVN1YlNlY3Rpb25zIiwiY3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyIsImNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMiLCJhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucyIsImxlbmd0aCIsImkiLCJmb3JFYWNoIiwiaXRlbSIsInZpc2libGUiLCJwdXNoIiwia2V5Iiwic2xpY2UiLCJsYXN0SW5kZXhPZiIsImN1c3RvbUl0ZW0iLCJoZWFkZXJTZWN0aW9uIiwiaWQiLCJ0aXRsZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiSXNFZGl0YWJsZSIsInN1YlNlY3Rpb25zIiwiZ2V0U2VjdGlvbnNGcm9tQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJvYmplY3RQYWdlU2VjdGlvbnMiLCJGYWNldHMiLCJtYXAiLCJnZXRTZWN0aW9uRnJvbUFubm90YXRpb24iLCJmYWNldCIsInNlY3Rpb25JRCIsImdldFNlY3Rpb25JRCIsInNlY3Rpb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJ1bmRlZmluZWQiLCJzaG93VGl0bGUiLCJub3QiLCJlcXVhbCIsIkhpZGRlbiIsInZhbHVlT2YiLCJnZXRTZWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0U2VjdGlvbnMiLCJzZWN0aW9ucyIsIk9iamVjdCIsImtleXMiLCJtYW5pZmVzdFNlY3Rpb25LZXkiLCJnZXRTZWN0aW9uRnJvbU1hbmlmZXN0IiwiY3VzdG9tU2VjdGlvbkRlZmluaXRpb24iLCJzZWN0aW9uS2V5IiwiY3VzdG9tU2VjdGlvbklEIiwiZ2V0Q3VzdG9tU2VjdGlvbklEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsIm1hbmlmZXN0U3ViU2VjdGlvbnMiLCJjcmVhdGVDdXN0b21TdWJTZWN0aW9ucyIsImN1c3RvbVNlY3Rpb24iLCJnZXRIZWFkZXJBY3Rpb25zIiwiYUFubm90YXRpb25IZWFkZXJBY3Rpb25zIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJtYW5pZmVzdEFjdGlvbnMiLCJnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IiwiZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyIsImFjdGlvbk92ZXJ3cml0ZUNvbmZpZyIsImlzTmF2aWdhYmxlIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZW5hYmxlZCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImNvbW1hbmQiLCJoZWFkZXJBY3Rpb25zIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJhY3Rpb25zIiwicmVtb3ZlRHVwbGljYXRlQWN0aW9ucyIsImNvbW1hbmRBY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucyIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwiZ2V0Vmlld0xldmVsIiwiZm9vdGVyQWN0aW9ucyIsIl9nZXRTdWJTZWN0aW9uVmlzdWFsaXphdGlvbiIsInN1YlNlY3Rpb24iLCJwcmVzZW50YXRpb24iLCJ2aXN1YWxpemF0aW9ucyIsIl9pc0ZhY2V0SGFzTm9uUmVzcG9uc2l2ZVRhYmxlVmlzaWJsZSIsImRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiIsInN1YlNlY3Rpb25WaXN1YWxpemF0aW9uIiwidHlwZSIsImNvbnRyb2wiLCJfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlVmlzdWFsaXphdGlvbkluZm9ybWF0aW9uIiwic2VjdGlvbkxheW91dCIsInRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24iLCJyb3dDb3VudE1vZGUiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsIl9zZXROb25SZXNwb25zaXZlVGFibGVXaXRoTWl4RmFjZXRzSW5mb3JtYXRpb24iLCJjb250ZW50IiwidGFibGVDb250cm9sIiwiX3NldE5vblJlc3BvbnNpdmVUYWJsZVN1YlNlY3Rpb25Db250cm9sQ29uZmlndXJhdGlvbiIsIl9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMiLCJzaW5nbGVWaXN1YWxpemF0aW9uIiwiVmlzdWFsaXphdGlvblR5cGUiLCJUYWJsZSIsInNpbmdsZUNvbnRlbnQiLCJnZXRTZWN0aW9ucyIsIm1lcmdlIiwic2lkZUNvbnRlbnQiLCJvYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQiLCJnZXRTZWN0aW9uTGF5b3V0IiwiZmlyc3RGb3JtIiwiZmluZCIsImVsZW1lbnQiLCJTdWJTZWN0aW9uVHlwZSIsIkZvcm0iLCJoYXNIZWFkZXJDb250ZW50IiwiZ2V0SGVhZGVyRmFjZXRzIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uIiwiaWZFbHNlIiwiY29uc3RhbnQiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd0hlYWRlckNvbnRlbnQiLCJnZXRFeHBhbmRlZEltYWdlVmlzaWJsZSIsImNvbnZlcnRQYWdlIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwiSGVhZGVySW5mbyIsInRlbXBsYXRlIiwiVGVtcGxhdGVUeXBlIiwiT2JqZWN0UGFnZSIsImhlYWRlciIsImdldFNob3dPYmplY3RQYWdlSGVhZGVyIiwiZmFjZXRzIiwic2hvd0NvbnRlbnQiLCJoYXNDb250ZW50IiwiYXZhdGFyIiwiZ2V0QXZhdGFyIiwiZXhwYW5kZWRJbWFnZVZpc2libGUiLCJoZWFkZXJDb21tYW5kQWN0aW9ucyIsImZvb3RlckNvbW1hbmRBY3Rpb25zIiwic2hvd0FuY2hvckJhciIsImdldFNob3dBbmNob3JCYXIiLCJ1c2VJY29uVGFiQmFyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBGYWNldFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlQWN0aW9uLCBDb21iaW5lZEFjdGlvbiwgQ3VzdG9tQWN0aW9uLCBPdmVycmlkZVR5cGVBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0LCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7XG5cdGdldEZvb3RlckRlZmF1bHRBY3Rpb25zLFxuXHRnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyxcblx0Z2V0SGlkZGVuSGVhZGVyQWN0aW9uc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiwgaWZFbHNlLCBub3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9BdmF0YXJcIjtcbmltcG9ydCB7IGdldEF2YXRhciB9IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHsgZ2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zLCBnZXRIZWFkZXJGYWNldHNGcm9tTWFuaWZlc3QgfSBmcm9tIFwiLi4vY29udHJvbHMvT2JqZWN0UGFnZS9IZWFkZXJGYWNldFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21PYmplY3RQYWdlU2VjdGlvbixcblx0RGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRGb3JtU3ViU2VjdGlvbixcblx0T2JqZWN0UGFnZVNlY3Rpb24sXG5cdE9iamVjdFBhZ2VTdWJTZWN0aW9uXG59IGZyb20gXCIuLi9jb250cm9scy9PYmplY3RQYWdlL1N1YlNlY3Rpb25cIjtcbmltcG9ydCB7XG5cdGNyZWF0ZUN1c3RvbUhlYWRlckZhY2V0U3ViU2VjdGlvbnMsXG5cdGNyZWF0ZUN1c3RvbVN1YlNlY3Rpb25zLFxuXHRjcmVhdGVTdWJTZWN0aW9ucyxcblx0U3ViU2VjdGlvblR5cGVcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL09iamVjdFBhZ2UvU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZVJlY29yZCwgUG9zaXRpb24gfSBmcm9tIFwiLi4vaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzLCBPdmVycmlkZVR5cGUsIFBsYWNlbWVudCB9IGZyb20gXCIuLi9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tU2VjdGlvbklELCBnZXRFZGl0YWJsZUhlYWRlclNlY3Rpb25JRCwgZ2V0U2VjdGlvbklEIH0gZnJvbSBcIi4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RTZWN0aW9uLCBNYW5pZmVzdFN1YlNlY3Rpb24gfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGVUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VEZWZpbml0aW9uIH0gZnJvbSBcIi4uL1RlbXBsYXRlQ29udmVydGVyXCI7XG5cbmV4cG9ydCB0eXBlIE9iamVjdFBhZ2VEZWZpbml0aW9uID0gUGFnZURlZmluaXRpb24gJiB7XG5cdGhlYWRlcjoge1xuXHRcdHZpc2libGU6IGJvb2xlYW47XG5cdFx0c2VjdGlvbj86IE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdGZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W107XG5cdFx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRcdHNob3dDb250ZW50OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0XHRoYXNDb250ZW50OiBib29sZWFuO1xuXHRcdGF2YXRhcj86IEF2YXRhcjtcblx0XHR0aXRsZToge1xuXHRcdFx0ZXhwYW5kZWRJbWFnZVZpc2libGU6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRcdH07XG5cdH07XG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdO1xuXHRmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGhlYWRlckNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHRmb290ZXJDb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0c2hvd0FuY2hvckJhcjogYm9vbGVhbjtcblx0dXNlSWNvblRhYkJhcjogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGdldFNlY3Rpb25LZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzZWN0aW9uIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdGFibGUgaGVhZGVyIHBhcnQ7IGl0IGlzIG9ubHkgdmlzaWJsZSBpbiBlZGl0IG1vZGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWxsSGVhZGVyRmFjZXRzIFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBlZGl0YWJsZSBoZWFkZXIgcGFydHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVkaXRhYmxlSGVhZGVyU2VjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YWxsSGVhZGVyRmFjZXRzOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXVxuKTogT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCA9IGdldEVkaXRhYmxlSGVhZGVyU2VjdGlvbklEKCk7XG5cdGNvbnN0IGhlYWRlckZhY2V0cyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzO1xuXHRjb25zdCBoZWFkZXJmYWNldFN1YlNlY3Rpb25zID0gaGVhZGVyRmFjZXRzID8gY3JlYXRlU3ViU2VjdGlvbnMoaGVhZGVyRmFjZXRzLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSA6IFtdO1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXRTdWJTZWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdID0gW107XG5cdGlmIChjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmxlbmd0aCA+IDApIHtcblx0XHQvLyBtZXJnZSBhbm5vdGF0aW9uIGJhc2VkIGhlYWRlciBmYWNldHMgYW5kIGN1c3RvbSBoZWFkZXIgZmFjZXRzIGluIHRoZSByaWdodCBvcmRlclxuXHRcdGxldCBpID0gMDtcblx0XHRhbGxIZWFkZXJGYWNldHMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0Ly8gaGlkZGVuIGhlYWRlciBmYWNldHMgYXJlIG5vdCBpbmNsdWRlZCBpbiBhbGxIZWFkZXJGYWNldHMgYXJyYXkgPT4gYWRkIHRoZW0gYW55d2F5XG5cdFx0XHR3aGlsZSAoaGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmIGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0udmlzaWJsZSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdGFsbEhlYWRlckZhY2V0c1N1YlNlY3Rpb25zLnB1c2goaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXSk7XG5cdFx0XHRcdGkrKztcblx0XHRcdH1cblx0XHRcdGlmIChcblx0XHRcdFx0aGVhZGVyZmFjZXRTdWJTZWN0aW9ucy5sZW5ndGggPiBpICYmXG5cdFx0XHRcdChpdGVtLmtleSA9PT0gaGVhZGVyZmFjZXRTdWJTZWN0aW9uc1tpXS5rZXkgfHxcblx0XHRcdFx0XHQvLyBmb3IgaGVhZGVyIGZhY2V0cyB3aXRoIG5vIGlkIHRoZSBrZXlzIG9mIGhlYWRlciBmYWNldCBhbmQgc3Vic2VjdGlvbiBhcmUgZGlmZmVyZW50ID0+IGNoZWNrIG9ubHkgdGhlIGxhc3QgcGFydFxuXHRcdFx0XHRcdGl0ZW0ua2V5LnNsaWNlKGl0ZW0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSA9PT1cblx0XHRcdFx0XHRcdGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5LnNsaWNlKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0ua2V5Lmxhc3RJbmRleE9mKFwiOjpcIikgKyAyKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGhlYWRlcmZhY2V0U3ViU2VjdGlvbnNbaV0pO1xuXHRcdFx0XHRpKys7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXN0b21IZWFkZXJGYWNldFN1YlNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGN1c3RvbUl0ZW0pIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5rZXkgPT09IGN1c3RvbUl0ZW0ua2V5KSB7XG5cdFx0XHRcdFx0XHRhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9ucy5wdXNoKGN1c3RvbUl0ZW0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0YWxsSGVhZGVyRmFjZXRzU3ViU2VjdGlvbnMgPSBoZWFkZXJmYWNldFN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IGhlYWRlclNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uID0ge1xuXHRcdGlkOiBlZGl0YWJsZUhlYWRlclNlY3Rpb25JRCxcblx0XHRrZXk6IFwiRWRpdGFibGVIZWFkZXJDb250ZW50XCIsXG5cdFx0dGl0bGU6IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX09CSkVDVF9QQUdFX0hFQURFUl9TRUNUSU9OfVwiLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpLFxuXHRcdHN1YlNlY3Rpb25zOiBhbGxIZWFkZXJGYWNldHNTdWJTZWN0aW9uc1xuXHR9O1xuXHRyZXR1cm4gaGVhZGVyU2VjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVmaW5pdGlvbiBmb3IgYSBzZWN0aW9uIGJhc2VkIG9uIHRoZSBGYWNldCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQWxsIHNlY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25zRnJvbUFubm90YXRpb24oY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9iamVjdFBhZ2VTZWN0aW9uczogT2JqZWN0UGFnZVNlY3Rpb25bXSA9XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cz8ubWFwKChmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpID0+XG5cdFx0XHRnZXRTZWN0aW9uRnJvbUFubm90YXRpb24oZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdCkgfHwgW107XG5cdHJldHVybiBvYmplY3RQYWdlU2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFubm90YXRpb24gYmFzZWQgc2VjdGlvbi5cbiAqXG4gKiBAcGFyYW0gZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tQW5ub3RhdGlvbihmYWNldDogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IE9iamVjdFBhZ2VTZWN0aW9uIHtcblx0Y29uc3Qgc2VjdGlvbklEID0gZ2V0U2VjdGlvbklEKGZhY2V0KTtcblx0Y29uc3Qgc2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IHNlY3Rpb25JRCxcblx0XHRrZXk6IGdldFNlY3Rpb25LZXkoZmFjZXQsIHNlY3Rpb25JRCksXG5cdFx0dGl0bGU6IGZhY2V0LkxhYmVsID8gY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0LkxhYmVsKSkgOiB1bmRlZmluZWQsXG5cdFx0c2hvd1RpdGxlOiAhIWZhY2V0LkxhYmVsLFxuXHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmFjZXQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0c3ViU2VjdGlvbnM6IGNyZWF0ZVN1YlNlY3Rpb25zKFtmYWNldF0sIGNvbnZlcnRlckNvbnRleHQpXG5cdH07XG5cdHJldHVybiBzZWN0aW9uO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgc2VjdGlvbiBkZWZpbml0aW9ucyBiYXNlZCBvbiB0aGUgbWFuaWZlc3QgZGVmaW5pdGlvbnMuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0U2VjdGlvbnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIHNlY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdFNlY3Rpb25zOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24+IHtcblx0Y29uc3Qgc2VjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbU9iamVjdFBhZ2VTZWN0aW9uPiA9IHt9O1xuXHRPYmplY3Qua2V5cyhtYW5pZmVzdFNlY3Rpb25zKS5mb3JFYWNoKChtYW5pZmVzdFNlY3Rpb25LZXkpID0+IHtcblx0XHRzZWN0aW9uc1ttYW5pZmVzdFNlY3Rpb25LZXldID0gZ2V0U2VjdGlvbkZyb21NYW5pZmVzdChtYW5pZmVzdFNlY3Rpb25zW21hbmlmZXN0U2VjdGlvbktleV0sIG1hbmlmZXN0U2VjdGlvbktleSwgY29udmVydGVyQ29udGV4dCk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QtYmFzZWQgY3VzdG9tIHNlY3Rpb24uXG4gKlxuICogQHBhcmFtIGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uXG4gKiBAcGFyYW0gc2VjdGlvbktleVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGN1c3RvbSBzZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFNlY3Rpb25Gcm9tTWFuaWZlc3QoXG5cdGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uOiBNYW5pZmVzdFNlY3Rpb24sXG5cdHNlY3Rpb25LZXk6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24ge1xuXHRjb25zdCBjdXN0b21TZWN0aW9uSUQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5pZCB8fCBnZXRDdXN0b21TZWN0aW9uSUQoc2VjdGlvbktleSk7XG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdGxldCBtYW5pZmVzdFN1YlNlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdFN1YlNlY3Rpb24+O1xuXHRpZiAoIWN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zKSB7XG5cdFx0Ly8gSWYgdGhlcmUgaXMgbm8gc3ViU2VjdGlvbiBkZWZpbmVkLCB3ZSBhZGQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1c3RvbSBzZWN0aW9uIGFzIHN1YnNlY3Rpb25zXG5cdFx0Ly8gYW5kIG1ha2Ugc3VyZSB0byBzZXQgdGhlIHZpc2liaWxpdHkgdG8gJ3RydWUnLCBhcyB0aGUgYWN0dWFsIHZpc2liaWxpdHkgaXMgaGFuZGxlZCBieSB0aGUgc2VjdGlvbiBpdHNlbGZcblx0XHRtYW5pZmVzdFN1YlNlY3Rpb25zID0ge1xuXHRcdFx0W3NlY3Rpb25LZXldOiB7XG5cdFx0XHRcdC4uLmN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLFxuXHRcdFx0XHRwb3NpdGlvbjogdW5kZWZpbmVkLFxuXHRcdFx0XHR2aXNpYmxlOiBcInRydWVcIlxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0bWFuaWZlc3RTdWJTZWN0aW9ucyA9IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnN1YlNlY3Rpb25zO1xuXHR9XG5cdGNvbnN0IHN1YlNlY3Rpb25zID0gY3JlYXRlQ3VzdG9tU3ViU2VjdGlvbnMobWFuaWZlc3RTdWJTZWN0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgY3VzdG9tU2VjdGlvbjogQ3VzdG9tT2JqZWN0UGFnZVNlY3Rpb24gPSB7XG5cdFx0aWQ6IGN1c3RvbVNlY3Rpb25JRCxcblx0XHRrZXk6IHNlY3Rpb25LZXksXG5cdFx0dGl0bGU6IGN1c3RvbVNlY3Rpb25EZWZpbml0aW9uLnRpdGxlLFxuXHRcdHNob3dUaXRsZTogISFjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi50aXRsZSxcblx0XHR2aXNpYmxlOiBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBjdXN0b21TZWN0aW9uRGVmaW5pdGlvbi52aXNpYmxlIDogXCJ0cnVlXCIsXG5cdFx0cG9zaXRpb246IHBvc2l0aW9uLFxuXHRcdHN1YlNlY3Rpb25zOiBzdWJTZWN0aW9ucyBhcyBhbnlcblx0fTtcblx0cmV0dXJuIGN1c3RvbVNlY3Rpb247XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGhlYWRlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGhlYWRlclxuICovXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRcdG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkhlYWRlckFjdGlvbnMsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdHVuZGVmaW5lZCxcblx0XHRnZXRIaWRkZW5IZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpXG5cdCk7XG5cdGNvbnN0IGFjdGlvbk92ZXJ3cml0ZUNvbmZpZzogT3ZlcnJpZGVUeXBlQWN0aW9uID0ge1xuXHRcdGlzTmF2aWdhYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzaWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0Y29tbWFuZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9O1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoYUFubm90YXRpb25IZWFkZXJBY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiByZW1vdmVEdXBsaWNhdGVBY3Rpb25zKGhlYWRlckFjdGlvbnMpLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBtYW5pZmVzdEFjdGlvbnMuY29tbWFuZEFjdGlvbnNcblx0fTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBPYmplY3RQYWdlIGZvb3RlciBhY3Rpb25zIChib3RoIHRoZSBkZWZhdWx0IG9uZXMgYW5kIHRoZSBjdXN0b20gb25lcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhpcyBPYmplY3RQYWdlIGZvb3RlclxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBhQW5ub3RhdGlvbkZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGdldEZvb3RlckRlZmF1bHRBY3Rpb25zKG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEZvb3RlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCwgYUFubm90YXRpb25Gb290ZXJBY3Rpb25zKTtcblxuXHRjb25zdCBhY3Rpb25PdmVyd3JpdGVDb25maWc6IE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0XHRpc05hdmlnYWJsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGluc2VydEN1c3RvbUVsZW1lbnRzKGFBbm5vdGF0aW9uRm9vdGVyQWN0aW9ucywgbWFuaWZlc3RBY3Rpb25zLmFjdGlvbnMsIGFjdGlvbk92ZXJ3cml0ZUNvbmZpZyk7XG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogZm9vdGVyQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogbWFuaWZlc3RBY3Rpb25zLmNvbW1hbmRBY3Rpb25zXG5cdH07XG59O1xuXG5mdW5jdGlvbiBfZ2V0U3ViU2VjdGlvblZpc3VhbGl6YXRpb24oc3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKTogVGFibGVWaXN1YWxpemF0aW9uIHtcblx0cmV0dXJuIChzdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdID8gc3ViU2VjdGlvbi5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbMF0gOiB1bmRlZmluZWQpIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcbn1cblxuZnVuY3Rpb24gX2lzRmFjZXRIYXNOb25SZXNwb25zaXZlVGFibGVWaXNpYmxlKFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiICYmXG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uPy5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zICYmXG5cdFx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb24/LnR5cGUgPT09IFwiVGFibGVcIiAmJlxuXHRcdHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uPy5jb250cm9sPy50eXBlICE9PSBcIlJlc3BvbnNpdmVUYWJsZVwiXG5cdCk7XG59XG5cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24oXG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb246IERhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbixcblx0c3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0c2VjdGlvbkxheW91dDogc3RyaW5nXG4pOiB2b2lkIHtcblx0aWYgKF9pc0ZhY2V0SGFzTm9uUmVzcG9uc2l2ZVRhYmxlVmlzaWJsZShkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uKSkge1xuXHRcdGNvbnN0IHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb246IFRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24gPSBzdWJTZWN0aW9uVmlzdWFsaXphdGlvbi5jb250cm9sO1xuXHRcdGlmICghKHNlY3Rpb25MYXlvdXQgPT09IFwiUGFnZVwiICYmIHNlY3Rpb25zLmxlbmd0aCA+IDEpKSB7XG5cdFx0XHR0YWJsZUNvbnRyb2xDb25maWd1cmF0aW9uLnJvd0NvdW50TW9kZSA9IFwiQXV0b1wiO1xuXHRcdH1cblx0XHRpZiAoc2VjdGlvbkxheW91dCAhPT0gXCJUYWJzXCIpIHtcblx0XHRcdHRhYmxlQ29udHJvbENvbmZpZ3VyYXRpb24udXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gX3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbihzdWJTZWN0aW9uOiBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQ6IHN0cmluZyk6IHZvaWQge1xuXHRpZiAoc3ViU2VjdGlvbj8uY29udGVudD8ubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3QgdGFibGVDb250cm9sID0gKChzdWJTZWN0aW9uLmNvbnRlbnRbMF0gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uKS5wcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIFRhYmxlVmlzdWFsaXphdGlvbilcblx0XHRcdC5jb250cm9sO1xuXHRcdGlmICh0YWJsZUNvbnRyb2wudHlwZSAhPT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0dGFibGVDb250cm9sLnJvd0NvdW50TW9kZSA9IFwiQXV0b1wiO1xuXHRcdFx0aWYgKHNlY3Rpb25MYXlvdXQgIT09IFwiVGFic1wiKSB7XG5cdFx0XHRcdHRhYmxlQ29udHJvbC51c2VDb25kZW5zZWRUYWJsZUxheW91dCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFNldCB0aGUgTm9uUmVzcG9uc2l2ZSBUYWJsZSAoZ3JpZCwgdHJlZSwgYW5hbHl0aWNhbCkgZGlzcGxheSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gc2VjdGlvbnMgVGhlIE9iamVjdFBhZ2Ugc2VjdGlvbnNcbiAqIEBwYXJhbSBzZWN0aW9uIFRoZSBjdXJyZW50IE9iamVjdFBhZ2Ugc2VjdGlvbiBwcm9jZXNzZWRcbiAqIEBwYXJhbSBzZWN0aW9uTGF5b3V0XG4gKi9cbmZ1bmN0aW9uIF9zZXROb25SZXNwb25zaXZlVGFibGVTdWJTZWN0aW9uQ29udHJvbENvbmZpZ3VyYXRpb24oXG5cdHNlY3Rpb25zOiBPYmplY3RQYWdlU2VjdGlvbltdLFxuXHRzZWN0aW9uOiBPYmplY3RQYWdlU2VjdGlvbixcblx0c2VjdGlvbkxheW91dDogc3RyaW5nXG4pOiB2b2lkIHtcblx0bGV0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHRsZXQgc3ViU2VjdGlvblZpc3VhbGl6YXRpb246IFRhYmxlVmlzdWFsaXphdGlvbjtcblx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBzZWN0aW9uLnN1YlNlY3Rpb25zO1xuXHRpZiAoc3ViU2VjdGlvbnMubGVuZ3RoID09PSAxKSB7XG5cdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF0gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHRcdHN3aXRjaCAoc3ViU2VjdGlvbnNbMF0udHlwZSkge1xuXHRcdFx0Y2FzZSBcIkRhdGFWaXN1YWxpemF0aW9uXCI6XG5cdFx0XHRcdHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uID0gX2dldFN1YlNlY3Rpb25WaXN1YWxpemF0aW9uKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbik7XG5cdFx0XHRcdF9zZXROb25SZXNwb25zaXZlVGFibGVWaXN1YWxpemF0aW9uSW5mb3JtYXRpb24oXG5cdFx0XHRcdFx0c2VjdGlvbnMsXG5cdFx0XHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb25WaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHNlY3Rpb25MYXlvdXRcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTWl4ZWRcIjpcblx0XHRcdFx0X3NldE5vblJlc3BvbnNpdmVUYWJsZVdpdGhNaXhGYWNldHNJbmZvcm1hdGlvbihkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24sIHNlY3Rpb25MYXlvdXQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblx0X3JlbW92ZUNvbmRlbnNlZEZyb21TdWJTZWN0aW9ucyhzdWJTZWN0aW9ucyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBjb25kZW5zZSBsYXlvdXQgbW9kZSBmcm9tIHRoZSBzdWJzZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YlNlY3Rpb25zIHdoZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjb25kZW5zZWQgbGF5b3V0XG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVDb25kZW5zZWRGcm9tU3ViU2VjdGlvbnMoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pIHtcblx0bGV0IGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbjogRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHQvLyBXZSBjaGVjayBpbiBlYWNoIHN1YnNlY3Rpb24gaWYgdGhlcmUgaXMgdmlzdWFsaXphdGlvbnNcblx0c3ViU2VjdGlvbnMuZm9yRWFjaCgoc3ViU2VjdGlvbikgPT4ge1xuXHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uO1xuXHRcdGlmIChkYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24/LnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8ucHJlc2VudGF0aW9uPy52aXN1YWxpemF0aW9ucy5mb3JFYWNoKChzaW5nbGVWaXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0c2luZ2xlVmlzdWFsaXphdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBUaGVuIHdlIGNoZWNrIHRoZSBjb250ZW50IG9mIHRoZSBzdWJzZWN0aW9uLCBhbmQgaW4gZWFjaCBjb250ZW50IHdlIGNoZWNrIGlmIHRoZXJlIGlzIGEgdGFibGUgdG8gc2V0IGl0cyBjb25kZW5zZWQgbGF5b3V0IHRvIGZhbHNlXG5cdFx0aWYgKGRhdGFWaXN1YWxpemF0aW9uU3ViU2VjdGlvbj8uY29udGVudCkge1xuXHRcdFx0ZGF0YVZpc3VhbGl6YXRpb25TdWJTZWN0aW9uLmNvbnRlbnQuZm9yRWFjaCgoc2luZ2xlQ29udGVudCkgPT4ge1xuXHRcdFx0XHQoc2luZ2xlQ29udGVudCBhcyBEYXRhVmlzdWFsaXphdGlvblN1YlNlY3Rpb24pLnByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgoc2luZ2xlVmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRcdGlmIChzaW5nbGVWaXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0XHRzaW5nbGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn1cbi8qKlxuICogUmV0cmlldmVzIGFuZCBtZXJnZXMgdGhlIE9iamVjdFBhZ2Ugc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgYW5ub3RhdGlvbiBhbmQgaW4gdGhlIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VjdGlvbnMuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFNlY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBPYmplY3RQYWdlU2VjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgc2VjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRnZXRTZWN0aW9uc0Zyb21Bbm5vdGF0aW9uKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldFNlY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRTZWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHR7XG5cdFx0XHR0aXRsZTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0XHRzdWJTZWN0aW9uczoge1xuXHRcdFx0XHRhY3Rpb25zOiBPdmVycmlkZVR5cGUubWVyZ2UsXG5cdFx0XHRcdHRpdGxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdFx0XHRzaWRlQ29udGVudDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRcdFx0b2JqZWN0UGFnZUxhenlMb2FkZXJFbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xuXHQvLyBMZXZlbCBBZGp1c3RtZW50IGZvciBcIk1peGVkXCIgQ29sbGVjdGlvbiBGYWNldHM6XG5cdC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0Ly8gVGhlIG1hbmlmZXN0IGRlZmluaXRpb24gb2YgY3VzdG9tIHNpZGUgY29udGVudHMgYW5kIGFjdGlvbnMgc3RpbGwgbmVlZHMgdG8gYmUgYWxpZ25lZCBmb3IgXCJNaXhlZFwiIGNvbGxlY3Rpb24gZmFjZXRzOlxuXHQvLyBDb2xsZWN0aW9uIGZhY2V0cyBjb250YWluaW5nIHRhYmxlcyBnYWluIGFuIGV4dHJhIHJlZmVyZW5jZSBmYWNldCBhcyBhIHRhYmxlIHdyYXBwZXIgdG8gZW5zdXJlLCB0aGF0IHRoZSB0YWJsZSBpcyBhbHdheXNcblx0Ly8gcGxhY2VkIGluIGFuIG93biBpbmRpdmlkdWFsIE9iamVjdCBQYWdlIEJsb2NrOyB0aGlzIGFkZGl0aW9uYWwgaGllcmFyY2h5IGxldmVsIGlzIHVua25vd24gdG8gYXBwIGRldmVsb3BlcnMsIHdoaWNoIGFyZVxuXHQvLyBkZWZpbmluZyB0aGUgc2lkZSBjb250ZW50IGFuZCBhY3Rpb25zIGluIHRoZSBtYW5pZmVzdCBhdCBjb2xsZWN0aW9uIGZhY2V0IGxldmVsOyBub3csIHNpbmNlIHRoZSBzaWRlQ29udGVudCBhbHdheXMgbmVlZHNcblx0Ly8gdG8gYmUgYXNzaWduZWQgdG8gYSBibG9jaywgYW5kIGFjdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgYXNzaWduZWQgdG8gYSBmb3JtLFxuXHQvLyB3ZSBuZWVkIHRvIG1vdmUgdGhlIHNpZGVDb250ZW50IGFuZCBhY3Rpb25zIGZyb20gYSBtaXhlZCBjb2xsZWN0aW9uIGZhY2V0IHRvIGl0cyBjb250ZW50LlxuXHQvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdHNlY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKHNlY3Rpb24pIHtcblx0XHRfc2V0Tm9uUmVzcG9uc2l2ZVRhYmxlU3ViU2VjdGlvbkNvbnRyb2xDb25maWd1cmF0aW9uKHNlY3Rpb25zLCBzZWN0aW9uLCBtYW5pZmVzdFdyYXBwZXIuZ2V0U2VjdGlvbkxheW91dCgpKTtcblx0XHRzZWN0aW9uLnN1YlNlY3Rpb25zPy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWN0aW9uKSB7XG5cdFx0XHRzdWJTZWN0aW9uLnRpdGxlID0gc3ViU2VjdGlvbi50aXRsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IHVuZGVmaW5lZCA6IHN1YlNlY3Rpb24udGl0bGU7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIpIHtcblx0XHRcdFx0c3ViU2VjdGlvbi5jb250ZW50Py5mb3JFYWNoKChjb250ZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29udGVudC5vYmplY3RQYWdlTGF6eUxvYWRlckVuYWJsZWQgPSBzdWJTZWN0aW9uLm9iamVjdFBhZ2VMYXp5TG9hZGVyRW5hYmxlZDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc3ViU2VjdGlvbi50eXBlID09PSBcIk1peGVkXCIgJiYgc3ViU2VjdGlvbi5jb250ZW50Py5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlyc3RGb3JtID0gc3ViU2VjdGlvbi5jb250ZW50LmZpbmQoXG5cdFx0XHRcdFx0KGVsZW1lbnQpID0+IChlbGVtZW50IGFzIEZvcm1TdWJTZWN0aW9uKS50eXBlID09PSBTdWJTZWN0aW9uVHlwZS5Gb3JtXG5cdFx0XHRcdCkgYXMgRm9ybVN1YlNlY3Rpb247XG5cblx0XHRcdFx0Ly8gMS4gQ29weSBzaWRlQ29udGVudCB0byB0aGUgU3ViU2VjdGlvbidzIGZpcnN0IGZvcm07IG9yIC0tIGlmIHVuYXZhaWxhYmxlIC0tIHRvIGl0cyBmaXJzdCBjb250ZW50XG5cdFx0XHRcdC8vIDIuIENvcHkgYWN0aW9ucyB0byB0aGUgZmlyc3QgZm9ybSBvZiB0aGUgU3ViU2VjdGlvbidzIGNvbnRlbnRcblx0XHRcdFx0Ly8gMy4gRGVsZXRlIHNpZGVDb250ZW50IC8gYWN0aW9ucyBhdCB0aGUgKGludmFsaWQpIG1hbmlmZXN0IGxldmVsXG5cblx0XHRcdFx0aWYgKHN1YlNlY3Rpb24uc2lkZUNvbnRlbnQpIHtcblx0XHRcdFx0XHRpZiAoZmlyc3RGb3JtKSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm0sIGl0IGFsd2F5cyBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZm9ybSwgYXMgdGhlIGZvcm0gaW5oZXJpdHMgdGhlIElEIG9mIHRoZSBTdWJTZWN0aW9uXG5cdFx0XHRcdFx0XHRmaXJzdEZvcm0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJTZWN0aW9uLmNvbnRlbnRbMF0uc2lkZUNvbnRlbnQgPSBzdWJTZWN0aW9uLnNpZGVDb250ZW50O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzdWJTZWN0aW9uLnNpZGVDb250ZW50ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpcnN0Rm9ybSAmJiAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Zmlyc3RGb3JtLmFjdGlvbnMgPSAoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucztcblx0XHRcdFx0XHQoc3ViU2VjdGlvbiBhcyBGb3JtU3ViU2VjdGlvbikuYWN0aW9ucyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRyZXR1cm4gc2VjdGlvbnM7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIE9iamVjdFBhZ2UgaGFzIGhlYWRlciBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbiBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gaGFzSGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogYm9vbGVhbiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiAoXG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLmFubm90YXRpb25zPy5VST8uSGVhZGVyRmFjZXRzIHx8IFtdKS5sZW5ndGggPiAwIHx8XG5cdFx0T2JqZWN0LmtleXMobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckZhY2V0cygpKS5sZW5ndGggPiAwXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgaGVhZGVyIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0U2hvd0hlYWRlckNvbnRlbnRFeHByZXNzaW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0IWhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0Y29uc3RhbnQoZmFsc2UpLFxuXHRcdGlmRWxzZShlcXVhbChtYW5pZmVzdFdyYXBwZXIuaXNIZWFkZXJFZGl0YWJsZSgpLCBmYWxzZSksIGNvbnN0YW50KHRydWUpLCBub3QoVUkuSXNFZGl0YWJsZSkpXG5cdCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgYmluZGluZyBleHByZXNzaW9uIHRvIGV2YWx1YXRlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBoZWFkZXIgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0U2hvd0hlYWRlckNvbnRlbnQgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldFNob3dIZWFkZXJDb250ZW50RXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0KSk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgYXZhdGFyIHdoZW4gdGhlIGhlYWRlciBpcyBpbiBleHBhbmRlZCBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGVsZXRlIGJ1dHRvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kZWRJbWFnZVZpc2libGUgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChnZXRTaG93SGVhZGVyQ29udGVudEV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogT2JqZWN0UGFnZURlZmluaXRpb24ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRsZXQgaGVhZGVyU2VjdGlvbjogT2JqZWN0UGFnZVNlY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGNvbnN0IGVudGl0eVR5cGU6IEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgaGVhZGVyIGZhY2V0cyAoZnJvbSBhbm5vdGF0aW9ucyAmIGN1c3RvbSlcblx0Y29uc3QgaGVhZGVyRmFjZXRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0SGVhZGVyRmFjZXRzRnJvbUFubm90YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyRmFjZXRzKCkpXG5cdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgaGVhZGVyIGFjdGlvbnNcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIHBhZ2UgZm9vdGVyIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyQWN0aW9ucyA9IGdldEZvb3RlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0aWYgKG1hbmlmZXN0V3JhcHBlci5pc0hlYWRlckVkaXRhYmxlKCkgJiYgKGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckZhY2V0cyB8fCBlbnRpdHlUeXBlLmFubm90YXRpb25zLlVJPy5IZWFkZXJJbmZvKSkge1xuXHRcdGhlYWRlclNlY3Rpb24gPSBjcmVhdGVFZGl0YWJsZUhlYWRlclNlY3Rpb24oY29udmVydGVyQ29udGV4dCwgaGVhZGVyRmFjZXRzKTtcblx0fVxuXG5cdGNvbnN0IHNlY3Rpb25zID0gZ2V0U2VjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cblx0cmV0dXJuIHtcblx0XHR0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2UsXG5cdFx0aGVhZGVyOiB7XG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIoKSxcblx0XHRcdHNlY3Rpb246IGhlYWRlclNlY3Rpb24sXG5cdFx0XHRmYWNldHM6IGhlYWRlckZhY2V0cyxcblx0XHRcdGFjdGlvbnM6IGhlYWRlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRcdHNob3dDb250ZW50OiBnZXRTaG93SGVhZGVyQ29udGVudChjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGhhc0NvbnRlbnQ6IGhhc0hlYWRlckNvbnRlbnQoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRhdmF0YXI6IGdldEF2YXRhcihjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdGV4cGFuZGVkSW1hZ2VWaXNpYmxlOiBnZXRFeHBhbmRlZEltYWdlVmlzaWJsZShjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VjdGlvbnM6IHNlY3Rpb25zLFxuXHRcdGZvb3RlckFjdGlvbnM6IGZvb3RlckFjdGlvbnMuYWN0aW9ucyxcblx0XHRoZWFkZXJDb21tYW5kQWN0aW9uczogaGVhZGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRmb290ZXJDb21tYW5kQWN0aW9uczogZm9vdGVyQWN0aW9ucy5jb21tYW5kQWN0aW9ucyxcblx0XHRzaG93QW5jaG9yQmFyOiBtYW5pZmVzdFdyYXBwZXIuZ2V0U2hvd0FuY2hvckJhcigpLFxuXHRcdHVzZUljb25UYWJCYXI6IG1hbmlmZXN0V3JhcHBlci51c2VJY29uVGFiQmFyKClcblx0fTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkRBLE1BQU1BLGFBQWEsR0FBRyxDQUFDQyxlQUEyQixFQUFFQyxRQUFnQixLQUFhO0lBQUE7SUFDaEYsT0FBTyx3QkFBQUQsZUFBZSxDQUFDRSxFQUFFLHdEQUFsQixvQkFBb0JDLFFBQVEsRUFBRSwrQkFBSUgsZUFBZSxDQUFDSSxLQUFLLDBEQUFyQixzQkFBdUJELFFBQVEsRUFBRSxLQUFJRixRQUFRO0VBQ3ZGLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTSSwyQkFBMkIsQ0FDMUNDLGdCQUFrQyxFQUNsQ0MsZUFBd0MsRUFDcEI7SUFBQTtJQUNwQixNQUFNQyx1QkFBdUIsR0FBR0MsMEJBQTBCLEVBQUU7SUFDNUQsTUFBTUMsWUFBWSw0QkFBR0osZ0JBQWdCLENBQUNLLGFBQWEsRUFBRSxDQUFDQyxXQUFXLG9GQUE1QyxzQkFBOENDLEVBQUUsMkRBQWhELHVCQUFrREMsWUFBWTtJQUNuRixNQUFNQyxzQkFBc0IsR0FBR0wsWUFBWSxHQUFHTSxpQkFBaUIsQ0FBQ04sWUFBWSxFQUFFSixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQzFHLE1BQU1XLDRCQUE0QixHQUFHQyxrQ0FBa0MsQ0FBQ1osZ0JBQWdCLENBQUM7SUFDekYsSUFBSWEsMEJBQWtELEdBQUcsRUFBRTtJQUMzRCxJQUFJRiw0QkFBNEIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUM1QztNQUNBLElBQUlDLENBQUMsR0FBRyxDQUFDO01BQ1RkLGVBQWUsQ0FBQ2UsT0FBTyxDQUFDLFVBQVVDLElBQUksRUFBRTtRQUN2QztRQUNBLE9BQU9SLHNCQUFzQixDQUFDSyxNQUFNLEdBQUdDLENB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