@sapui5/sap.fe.core 1.102.3 → 1.105.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 (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingExpression", "sap/fe/core/templating/DataModelPathHelper", "../helpers/BindingHelper", "../ManifestSettings"], function (Action, ConfigurableObject, Key, BindingExpression, DataModelPathHelper, BindingHelper, ManifestSettings) {
5
+ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/DataModelPathHelper", "../helpers/BindingHelper", "../ManifestSettings"], function (Action, ConfigurableObject, Key, BindingToolkit, DataModelPathHelper, BindingHelper, ManifestSettings) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -11,14 +11,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
11
11
  var singletonPathVisitor = BindingHelper.singletonPathVisitor;
12
12
  var Draft = BindingHelper.Draft;
13
13
  var isPathDeletable = DataModelPathHelper.isPathDeletable;
14
- var not = BindingExpression.not;
15
- var ifElse = BindingExpression.ifElse;
16
- var fn = BindingExpression.fn;
17
- var equal = BindingExpression.equal;
18
- var constant = BindingExpression.constant;
19
- var compileBinding = BindingExpression.compileBinding;
20
- var annotationExpression = BindingExpression.annotationExpression;
21
- var and = BindingExpression.and;
14
+ var not = BindingToolkit.not;
15
+ var ifElse = BindingToolkit.ifElse;
16
+ var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
17
+ var fn = BindingToolkit.fn;
18
+ var equal = BindingToolkit.equal;
19
+ var constant = BindingToolkit.constant;
20
+ var compileExpression = BindingToolkit.compileExpression;
21
+ var and = BindingToolkit.and;
22
22
  var KeyHelper = Key.KeyHelper;
23
23
  var Placement = ConfigurableObject.Placement;
24
24
  var getSemanticObjectMapping = Action.getSemanticObjectMapping;
@@ -31,9 +31,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
31
31
  * - Not statically hidden
32
32
  * - Either linked to an Unbound action or to an action which has an OperationAvailable that is not set to false statically.
33
33
  *
34
- * @param {EntityType} entityType The current entity type
35
- * @param {boolean} bDetermining The flag which denotes whether or not the action is a determining action
36
- * @returns {DataFieldForActionTypes[]} An array of DataField for action respecting the input parameter 'bDetermining'
34
+ * @param entityType The current entity type
35
+ * @param bDetermining The flag which denotes whether or not the action is a determining action
36
+ * @returns An array of DataField for action respecting the input parameter 'bDetermining'
37
37
  */
38
38
  function getIdentificationDataFieldForActions(entityType, bDetermining) {
39
39
  var _entityType$annotatio, _entityType$annotatio2, _entityType$annotatio3;
@@ -57,9 +57,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
57
57
  * They must be
58
58
  * - Not statically hidden.
59
59
  *
60
- * @param {EntityType} entityType The current entitytype
61
- * @param {boolean} bDetermining Whether or not the action should be determining
62
- * @returns {DataFieldForIntentBasedNavigationTypes[]} An array of data field for action respecting the bDetermining property.
60
+ * @param entityType The current entitytype
61
+ * @param bDetermining Whether or not the action should be determining
62
+ * @returns An array of data field for action respecting the bDetermining property.
63
63
  */
64
64
 
65
65
 
@@ -85,9 +85,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
85
85
  /**
86
86
  * Method to determine the 'visible' property binding for the Delete button on an object page.
87
87
  *
88
- * @param {ConverterContext} converterContext Instance of the converter context.
89
- * @param {PropertyAnnotationValue<boolean> | undefined} deleteHidden The value of the UI.DeleteHidden annotation on the entity set / type.
90
- * @returns {Expression<boolean>} The binding expression for the 'visible' property of the Delete button.
88
+ * @param converterContext Instance of the converter context.
89
+ * @param deleteHidden The value of the UI.DeleteHidden annotation on the entity set / type.
90
+ * @returns The binding expression for the 'visible' property of the Delete button.
91
91
  */
92
92
 
93
93
  function getDeleteButtonVisibility(converterContext, deleteHidden) {
@@ -97,7 +97,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
97
97
  }),
98
98
  // Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
99
99
  // For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
100
- deleteHiddenExpression = annotationExpression(deleteHidden, visitedNavigationPaths, undefined, function (path) {
100
+ deleteHiddenExpression = getExpressionFromAnnotation(deleteHidden, visitedNavigationPaths, undefined, function (path) {
101
101
  return singletonPathVisitor(path, converterContext.getConvertedTypes(), []);
102
102
  }),
103
103
  manifestWrapper = converterContext.getManifestWrapper(),
@@ -115,9 +115,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
115
115
  /**
116
116
  * Method to determine the 'enabled' property binding for the Delete button on an object page.
117
117
  *
118
- * @param {PropertyAnnotationValue<boolean>|undefined} isDeletable The delete restriction configured
119
- * @param {Expression<boolean>} isParentDeletable The delete restriction configured on the parent entity
120
- * @returns {Expression<boolean>} The binding expression for the 'enabled' property of the Delete button
118
+ * @param isDeletable The delete restriction configured
119
+ * @param isParentDeletable The delete restriction configured on the parent entity
120
+ * @returns The binding expression for the 'enabled' property of the Delete button
121
121
  */
122
122
 
123
123
 
@@ -129,9 +129,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
129
129
  /**
130
130
  * Method to determine the 'visible' property binding for the Edit button on an object page.
131
131
  *
132
- * @param {ConverterContext} converterContext Instance of the converter context.
133
- * @param {PropertyAnnotationValue<boolean> | undefined} updateHidden The value of the UI.UpdateHidden annotation on the entity set / type.
134
- * @returns {Expression<boolean>} The binding expression for the 'visible' property of the Edit button.
132
+ * @param converterContext Instance of the converter context.
133
+ * @param updateHidden The value of the UI.UpdateHidden annotation on the entity set / type.
134
+ * @returns The binding expression for the 'visible' property of the Edit button.
135
135
  */
136
136
 
137
137
 
@@ -148,7 +148,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
148
148
  }),
149
149
  // Set absolute binding path for Singleton references, otherwise the configured annotation path itself.
150
150
  // For e.g. /com.sap.namespace.EntityContainer/Singleton/Property to /Singleton/Property
151
- updateHiddenExpression = annotationExpression(updateHidden, visitedNavigationPaths, undefined, function (path) {
151
+ updateHiddenExpression = getExpressionFromAnnotation(updateHidden, visitedNavigationPaths, undefined, function (path) {
152
152
  return singletonPathVisitor(path, converterContext.getConvertedTypes(), visitedNavigationPaths);
153
153
  }),
154
154
  notEditableExpression = not(UI.IsEditable); // If UI.UpdateHidden annotation on entity set or type is either not defined or explicitly set to false,
@@ -162,8 +162,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
162
162
  /**
163
163
  * Method to determine the 'enabled' property binding for the Edit button on an object page.
164
164
  *
165
- * @param {ConverterContext} converterContext Instance of the converter context.
166
- * @returns {Expression<boolean>} The binding expression for the 'enabled' property of the Edit button.
165
+ * @param converterContext Instance of the converter context.
166
+ * @returns The binding expression for the 'enabled' property of the Edit button.
167
167
  */
168
168
 
169
169
 
@@ -188,31 +188,20 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
188
188
  }
189
189
 
190
190
  if (editActionName) {
191
- var _converterContext$get, _converterContext$get2;
191
+ var _editAction$annotatio, _editAction$annotatio2;
192
192
 
193
- var editActionAnnotationPath = converterContext.getAbsoluteAnnotationPath(editActionName),
194
- editActions = (_converterContext$get = converterContext.getEntityTypeAnnotation(editActionAnnotationPath)) === null || _converterContext$get === void 0 ? void 0 : (_converterContext$get2 = _converterContext$get.annotation) === null || _converterContext$get2 === void 0 ? void 0 : _converterContext$get2.actions;
193
+ var editActionAnnotationPath = converterContext.getAbsoluteAnnotationPath(editActionName);
194
+ var editAction = converterContext.getEntityTypeAnnotation(editActionAnnotationPath).annotation;
195
195
 
196
- if (editActions !== null && editActions !== void 0 && editActions.length) {
197
- var _editAction$annotatio, _editAction$annotatio2;
198
-
199
- var editAction = editActions[0];
200
-
201
- if ((editAction === null || editAction === void 0 ? void 0 : (_editAction$annotatio = editAction.annotations) === null || _editAction$annotatio === void 0 ? void 0 : (_editAction$annotatio2 = _editAction$annotatio.Core) === null || _editAction$annotatio2 === void 0 ? void 0 : _editAction$annotatio2.OperationAvailable) === null) {
202
- return "{= ${#" + editActionName + "} ? true : false }";
203
- } else {
204
- return getEnabledForAnnotationAction(converterContext, editAction);
205
- }
196
+ if ((editAction === null || editAction === void 0 ? void 0 : (_editAction$annotatio = editAction.annotations) === null || _editAction$annotatio === void 0 ? void 0 : (_editAction$annotatio2 = _editAction$annotatio.Core) === null || _editAction$annotatio2 === void 0 ? void 0 : _editAction$annotatio2.OperationAvailable) === null) {
197
+ return "{= ${#" + editActionName + "} ? true : false }";
198
+ } else {
199
+ return getEnabledForAnnotationAction(converterContext, editAction);
206
200
  }
207
201
  }
208
202
 
209
- return true;
203
+ return "true";
210
204
  }
211
- /**
212
- * @param converterContext
213
- * @returns {BaseAction[]}
214
- */
215
-
216
205
 
217
206
  _exports.getEditButtonEnabled = getEditButtonEnabled;
218
207
 
@@ -232,7 +221,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
232
221
  return singletonPathVisitor(path, converterContext.getConvertedTypes(), navigationPaths);
233
222
  }
234
223
  }),
235
- bParentEntitySetDeletable = isParentDeletable ? compileBinding(isParentDeletable) : isParentDeletable,
224
+ bParentEntitySetDeletable = isParentDeletable ? compileExpression(isParentDeletable) : isParentDeletable,
236
225
  headerDataFieldForActions = getIdentificationDataFieldForActions(converterContext.getEntityType(), false); // Initialize actions and start with draft actions if available since they should appear in the first
237
226
  // leftmost position in the actions area of the OP header
238
227
  // This is more like a placeholder than a single action, since this controls not only the templating of
@@ -258,7 +247,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
258
247
  type: ActionType.DataFieldForAction,
259
248
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
260
249
  key: KeyHelper.generateKeyFromDataField(dataField),
261
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : _dataField$annotation2.Hidden), true))),
250
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : _dataField$annotation2.Hidden), true))),
262
251
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
263
252
  isNavigable: true
264
253
  });
@@ -271,7 +260,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
271
260
  headerActions.push({
272
261
  type: ActionType.Primary,
273
262
  key: "EditAction",
274
- visible: compileBinding(getEditButtonVisibility(converterContext, updateHidden)),
263
+ visible: compileExpression(getEditButtonVisibility(converterContext, updateHidden)),
275
264
  enabled: getEditButtonEnabled(converterContext)
276
265
  });
277
266
  } // Then the delete action if we're not statically not deletable
@@ -284,8 +273,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
284
273
  headerActions.push({
285
274
  type: ActionType.Secondary,
286
275
  key: "DeleteAction",
287
- visible: compileBinding(getDeleteButtonVisibility(converterContext, deleteHidden)),
288
- enabled: compileBinding(getDeleteButtonEnabled(oEntityDeleteRestrictions === null || oEntityDeleteRestrictions === void 0 ? void 0 : oEntityDeleteRestrictions.Deletable, isParentDeletable)),
276
+ visible: compileExpression(getDeleteButtonVisibility(converterContext, deleteHidden)),
277
+ enabled: compileExpression(getDeleteButtonEnabled(oEntityDeleteRestrictions === null || oEntityDeleteRestrictions === void 0 ? void 0 : oEntityDeleteRestrictions.Deletable, isParentDeletable)),
289
278
  parentEntityDeleteEnabled: bParentEntitySetDeletable
290
279
  });
291
280
  }
@@ -301,9 +290,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
301
290
  };
302
291
 
303
292
  if (((_dataField$RequiresCo = dataField.RequiresContext) === null || _dataField$RequiresCo === void 0 ? void 0 : _dataField$RequiresCo.valueOf()) === true) {
304
- throw new Error("RequiresContext property should not be true for header IBN action : " + dataField.Label);
293
+ throw new Error("RequiresContext property should not be true for header IBN action : ".concat(dataField.Label));
305
294
  } else if (((_dataField$Inline = dataField.Inline) === null || _dataField$Inline === void 0 ? void 0 : _dataField$Inline.valueOf()) === true) {
306
- throw new Error("Inline property should not be true for header IBN action : " + dataField.Label);
295
+ throw new Error("Inline property should not be true for header IBN action : ".concat(dataField.Label));
307
296
  }
308
297
 
309
298
  headerActions.push({
@@ -311,14 +300,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
311
300
  text: (_dataField$Label = dataField.Label) === null || _dataField$Label === void 0 ? void 0 : _dataField$Label.toString(),
312
301
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
313
302
  buttonType: ButtonType.Ghost,
314
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation3 = dataField.annotations) === null || _dataField$annotation3 === void 0 ? void 0 : (_dataField$annotation4 = _dataField$annotation3.UI) === null || _dataField$annotation4 === void 0 ? void 0 : (_dataField$annotation5 = _dataField$annotation4.Hidden) === null || _dataField$annotation5 === void 0 ? void 0 : _dataField$annotation5.valueOf()), true))),
315
- enabled: dataField.NavigationAvailable !== undefined ? compileBinding(equal(annotationExpression((_dataField$Navigation = dataField.NavigationAvailable) === null || _dataField$Navigation === void 0 ? void 0 : _dataField$Navigation.valueOf()), true)) : true,
303
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation3 = dataField.annotations) === null || _dataField$annotation3 === void 0 ? void 0 : (_dataField$annotation4 = _dataField$annotation3.UI) === null || _dataField$annotation4 === void 0 ? void 0 : (_dataField$annotation5 = _dataField$annotation4.Hidden) === null || _dataField$annotation5 === void 0 ? void 0 : _dataField$annotation5.valueOf()), true))),
304
+ enabled: dataField.NavigationAvailable !== undefined ? compileExpression(equal(getExpressionFromAnnotation((_dataField$Navigation = dataField.NavigationAvailable) === null || _dataField$Navigation === void 0 ? void 0 : _dataField$Navigation.valueOf()), true)) : true,
316
305
  key: KeyHelper.generateKeyFromDataField(dataField),
317
306
  isNavigable: true,
318
- press: compileBinding(fn("._intentBasedNavigation.navigate", [annotationExpression(dataField.SemanticObject), annotationExpression(dataField.Action), oNavigationParams])),
319
- customData: compileBinding({
320
- semanticObject: annotationExpression(dataField.SemanticObject),
321
- action: annotationExpression(dataField.Action)
307
+ press: compileExpression(fn("._intentBasedNavigation.navigate", [getExpressionFromAnnotation(dataField.SemanticObject), getExpressionFromAnnotation(dataField.Action), oNavigationParams])),
308
+ customData: compileExpression({
309
+ semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
310
+ action: getExpressionFromAnnotation(dataField.Action)
322
311
  })
323
312
  });
324
313
  }); // Finally the non critical DataFieldForActions
@@ -332,18 +321,13 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
332
321
  type: ActionType.DataFieldForAction,
333
322
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
334
323
  key: KeyHelper.generateKeyFromDataField(dataField),
335
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation6 = dataField.annotations) === null || _dataField$annotation6 === void 0 ? void 0 : (_dataField$annotation7 = _dataField$annotation6.UI) === null || _dataField$annotation7 === void 0 ? void 0 : _dataField$annotation7.Hidden), true))),
324
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation6 = dataField.annotations) === null || _dataField$annotation6 === void 0 ? void 0 : (_dataField$annotation7 = _dataField$annotation6.UI) === null || _dataField$annotation7 === void 0 ? void 0 : _dataField$annotation7.Hidden), true))),
336
325
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
337
326
  isNavigable: true
338
327
  });
339
328
  });
340
329
  return headerActions;
341
330
  }
342
- /**
343
- * @param converterContext
344
- * @returns {BaseAction[]}
345
- */
346
-
347
331
 
348
332
  _exports.getHeaderDefaultActions = getHeaderDefaultActions;
349
333
 
@@ -363,12 +347,6 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
363
347
  };
364
348
  });
365
349
  }
366
- /**
367
- * @param viewLevel
368
- * @param converterContext
369
- * @returns {BaseAction[]}
370
- */
371
-
372
350
 
373
351
  _exports.getHiddenHeaderActions = getHiddenHeaderActions;
374
352
 
@@ -395,7 +373,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
395
373
  type: ActionType.DataFieldForAction,
396
374
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
397
375
  key: KeyHelper.generateKeyFromDataField(dataField),
398
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation8 = dataField.annotations) === null || _dataField$annotation8 === void 0 ? void 0 : (_dataField$annotation9 = _dataField$annotation8.UI) === null || _dataField$annotation9 === void 0 ? void 0 : _dataField$annotation9.Hidden), true))),
376
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation8 = dataField.annotations) === null || _dataField$annotation8 === void 0 ? void 0 : (_dataField$annotation9 = _dataField$annotation8.UI) === null || _dataField$annotation9 === void 0 ? void 0 : _dataField$annotation9.Hidden), true))),
399
377
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
400
378
  isNavigable: true
401
379
  };
@@ -426,7 +404,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
426
404
  type: ActionType.DataFieldForAction,
427
405
  annotationPath: converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName),
428
406
  key: KeyHelper.generateKeyFromDataField(dataField),
429
- visible: compileBinding(not(equal(annotationExpression((_dataField$annotation10 = dataField.annotations) === null || _dataField$annotation10 === void 0 ? void 0 : (_dataField$annotation11 = _dataField$annotation10.UI) === null || _dataField$annotation11 === void 0 ? void 0 : _dataField$annotation11.Hidden), true))),
407
+ visible: compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation10 = dataField.annotations) === null || _dataField$annotation10 === void 0 ? void 0 : (_dataField$annotation11 = _dataField$annotation10.UI) === null || _dataField$annotation11 === void 0 ? void 0 : _dataField$annotation11.Hidden), true))),
430
408
  enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
431
409
  isNavigable: true
432
410
  });
@@ -448,4 +426,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
448
426
  _exports.getFooterDefaultActions = getFooterDefaultActions;
449
427
  return _exports;
450
428
  }, false);
451
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiYW5ub3RhdGlvbkV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJwYXRoIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0V3JhcHBlciIsImdldE1hbmlmZXN0V3JhcHBlciIsInZpZXdMZXZlbCIsImdldFZpZXdMZXZlbCIsImVkaXRhYmxlRXhwcmVzc2lvbiIsIklzRWRpdGFibGUiLCJub3QiLCJpZkVsc2UiLCJhbmQiLCJlcXVhbCIsImdldERlbGV0ZUJ1dHRvbkVuYWJsZWQiLCJpc0RlbGV0YWJsZSIsImlzUGFyZW50RGVsZXRhYmxlIiwiY29uc3RhbnQiLCJnZXRFZGl0QnV0dG9uVmlzaWJpbGl0eSIsInVwZGF0ZUhpZGRlbiIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsInVwZGF0ZUhpZGRlbkV4cHJlc3Npb24iLCJub3RFZGl0YWJsZUV4cHJlc3Npb24iLCJyZXN1bHRhbnRFeHByZXNzaW9uIiwiRHJhZnQiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImlzRHJhZnRSb290IiwiaXNTdGlja3kiLCJTZXNzaW9uIiwiU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImVkaXRBY3Rpb25OYW1lIiwiRWRpdEFjdGlvbiIsImVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJlZGl0QWN0aW9ucyIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsImFjdGlvbnMiLCJsZW5ndGgiLCJlZGl0QWN0aW9uIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRIZWFkZXJEZWZhdWx0QWN0aW9ucyIsImdldEVudGl0eVR5cGUiLCJvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsIm9EcmFmdFJvb3QiLCJvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zIiwiQ2FwYWJpbGl0aWVzIiwiRGVsZXRlUmVzdHJpY3Rpb25zIiwiYlVwZGF0ZUhpZGRlbiIsIlVwZGF0ZUhpZGRlbiIsImlzUGF0aERlbGV0YWJsZSIsInBhdGhWaXNpdG9yIiwibmF2aWdhdGlvblBhdGhzIiwiYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSIsImNvbXBpbGVCaW5kaW5nIiwiaGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyIsImhlYWRlckFjdGlvbnMiLCJwdXNoIiwidHlwZSIsIkFjdGlvblR5cGUiLCJEcmFmdEFjdGlvbnMiLCJrZXkiLCJkYXRhRmllbGQiLCJpbmRleE9mIiwiQ3JpdGljYWxpdHkiLCJmb3JFYWNoIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwidmlzaWJsZSIsImVuYWJsZWQiLCJpc05hdmlnYWJsZSIsIlByaW1hcnkiLCJEZWxldGFibGUiLCJEZWxldGVIaWRkZW4iLCJTZWNvbmRhcnkiLCJwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkIiwiaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyIsIm9OYXZpZ2F0aW9uUGFyYW1zIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiTWFwcGluZyIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIlJlcXVpcmVzQ29udGV4dCIsIkVycm9yIiwiTGFiZWwiLCJJbmxpbmUiLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJ0ZXh0IiwidG9TdHJpbmciLCJidXR0b25UeXBlIiwiQnV0dG9uVHlwZSIsIkdob3N0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsInByZXNzIiwiZm4iLCJTZW1hbnRpY09iamVjdCIsIkFjdGlvbiIsImN1c3RvbURhdGEiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldEhpZGRlbkhlYWRlckFjdGlvbnMiLCJoaWRkZW5BY3Rpb25zIiwiRGVmYXVsdCIsImdldEZvb3RlckRlZmF1bHRBY3Rpb25zIiwic0VudGl0eVNldERyYWZ0Um9vdCIsInRlcm0iLCJiQ29uZGl0aW9uU2F2ZSIsIlNhdmVBY3Rpb24iLCJiQ29uZGl0aW9uQXBwbHkiLCJiQ29uZGl0aW9uQ2FuY2VsIiwiRGlzY2FyZEFjdGlvbiIsImZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnMiLCJmb290ZXJBY3Rpb25zIiwiZW50aXR5VHlwZU5hbWUiLCJEZWZhdWx0QXBwbHkiLCJwb3NpdGlvbiIsInBsYWNlbWVudCIsIlBsYWNlbWVudCIsIkVuZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FB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QVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcywgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXMsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRBbm5vdGF0aW9uQWN0aW9uLFxuXHRCYXNlQWN0aW9uLFxuXHRCdXR0b25UeXBlLFxuXHRnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbixcblx0Z2V0U2VtYW50aWNPYmplY3RNYXBwaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRhbm5vdGF0aW9uRXhwcmVzc2lvbixcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGNvbXBpbGVCaW5kaW5nLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdEV4cHJlc3Npb24sXG5cdGZuLFxuXHRpZkVsc2UsXG5cdG5vdFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nRXhwcmVzc2lvblwiO1xuaW1wb3J0IHsgaXNQYXRoRGVsZXRhYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IERyYWZ0LCBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIHRoZSBkYXRhIGZpZWxkIGZvciBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvblxuICogVGhleSBtdXN0IGJlXG4gKiAtIE5vdCBzdGF0aWNhbGx5IGhpZGRlblxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSB7RW50aXR5VHlwZX0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHkgdHlwZVxuICogQHBhcmFtIHtib29sZWFufSBiRGV0ZXJtaW5pbmcgVGhlIGZsYWcgd2hpY2ggZGVub3RlcyB3aGV0aGVyIG9yIG5vdCB0aGUgYWN0aW9uIGlzIGEgZGV0ZXJtaW5pbmcgYWN0aW9uXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdiRGV0ZXJtaW5pbmcnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgYkRldGVybWluaW5nOiBib29sZWFuKTogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJlxuXHRcdFx0XHQhIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nID09PSBiRGV0ZXJtaW5pbmcgJiZcblx0XHRcdFx0KCFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIHtFbnRpdHlUeXBlfSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eXR5cGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYkRldGVybWluaW5nIFdoZXRoZXIgb3Igbm90IHRoZSBhY3Rpb24gc2hvdWxkIGJlIGRldGVybWluaW5nXG4gKiBAcmV0dXJucyB7RGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXX0gQW4gYXJyYXkgb2YgZGF0YSBmaWVsZCBmb3IgYWN0aW9uIHJlc3BlY3RpbmcgdGhlIGJEZXRlcm1pbmluZyBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGJEZXRlcm1pbmluZzogYm9vbGVhbik6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgJiZcblx0XHRcdFx0ISFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZyA9PT0gYkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuY29uc3QgSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMgPSBbXG5cdFwiVUkuQ3JpdGljYWxpdHlUeXBlL1ZlcnlQb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5TmVnYXRpdmVcIlxuXTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB7UHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWR9IGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZGVsZXRlSGlkZGVuOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZFxuKTogRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzID0gZGF0YU1vZGVsT2JqZWN0UGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcy5tYXAoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSksXG5cdFx0Ly8gU2V0IGFic29sdXRlIGJpbmRpbmcgcGF0aCBmb3IgU2luZ2xldG9uIHJlZmVyZW5jZXMsIG90aGVyd2lzZSB0aGUgY29uZmlndXJlZCBhbm5vdGF0aW9uIHBhdGggaXRzZWxmLlxuXHRcdC8vIEZvciBlLmcuIC9jb20uc2FwLm5hbWVzcGFjZS5FbnRpdHlDb250YWluZXIvU2luZ2xldG9uL1Byb3BlcnR5IHRvIC9TaW5nbGV0b24vUHJvcGVydHlcblx0XHRkZWxldGVIaWRkZW5FeHByZXNzaW9uOiBFeHByZXNzaW9uPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0gYW5ub3RhdGlvbkV4cHJlc3Npb24oXG5cdFx0XHRkZWxldGVIaWRkZW4sXG5cdFx0XHR2aXNpdGVkTmF2aWdhdGlvblBhdGhzLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KHBhdGg6IHN0cmluZykgPT4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSlcblx0XHQpLFxuXHRcdG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCksXG5cdFx0dmlld0xldmVsID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdMZXZlbCgpLFxuXHRcdC8vIERlbGV0ZSBidXR0b24gaXMgdmlzaWJsZVxuXHRcdC8vIEluIE9QIFx0XHQtLT4gIHdoZW4gbm90IGluIGVkaXQgbW9kZVxuXHRcdC8vIEluIHN1Yi1PUCBcdC0tPiAgd2hlbiBpbiBlZGl0IG1vZGVcblx0XHRlZGl0YWJsZUV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSB2aWV3TGV2ZWwgPiAxID8gVUkuSXNFZGl0YWJsZSA6IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gZWRpdGFibGVFeHByZXNzaW9uLlxuXHQvLyBlbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRkZWxldGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCBkZWxldGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwoZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+fHVuZGVmaW5lZH0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0ge0V4cHJlc3Npb248Ym9vbGVhbj59IGlzUGFyZW50RGVsZXRhYmxlIFRoZSBkZWxldGUgcmVzdHJpY3Rpb24gY29uZmlndXJlZCBvbiB0aGUgcGFyZW50IGVudGl0eVxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQoXG5cdGlzRGVsZXRhYmxlOiBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxCb29sZWFuPiB8IHVuZGVmaW5lZCxcblx0aXNQYXJlbnREZWxldGFibGU6IEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gaWZFbHNlKFxuXHRcdGlzUGFyZW50RGVsZXRhYmxlICE9PSB1bmRlZmluZWQsXG5cdFx0aXNQYXJlbnREZWxldGFibGUsXG5cdFx0aWZFbHNlKGlzRGVsZXRhYmxlICE9PSB1bmRlZmluZWQsIGVxdWFsKGlzRGVsZXRhYmxlLCB0cnVlKSwgY29uc3RhbnQodHJ1ZSkpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGJpbmRpbmcgZm9yIHRoZSBFZGl0IGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0NvbnZlcnRlckNvbnRleHR9IGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPiB8IHVuZGVmaW5lZH0gdXBkYXRlSGlkZGVuIFRoZSB2YWx1ZSBvZiB0aGUgVUkuVXBkYXRlSGlkZGVuIGFubm90YXRpb24gb24gdGhlIGVudGl0eSBzZXQgLyB0eXBlLlxuICogQHJldHVybnMge0V4cHJlc3Npb248Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHVwZGF0ZUhpZGRlbjogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4gfCB1bmRlZmluZWRcbik6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGJJc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbiB8IHVuZGVmaW5lZD4gPSBhbm5vdGF0aW9uRXhwcmVzc2lvbihcblx0XHRcdHVwZGF0ZUhpZGRlbixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0KSxcblx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb246IEV4cHJlc3Npb248Ym9vbGVhbj4gPSBub3QoVUkuSXNFZGl0YWJsZSk7XG5cblx0Ly8gSWYgVUkuVXBkYXRlSGlkZGVuIGFubm90YXRpb24gb24gZW50aXR5IHNldCBvciB0eXBlIGlzIGVpdGhlciBub3QgZGVmaW5lZCBvciBleHBsaWNpdGx5IHNldCB0byBmYWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBpbiBkaXNwbGF5IG1vZGUuXG5cdC8vIGVsc2UsXG5cdC8vIEVkaXQgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGluIGRpc3BsYXkgbW9kZS5cblx0Y29uc3QgcmVzdWx0YW50RXhwcmVzc2lvbjogRXhwcmVzc2lvbjxib29sZWFuPiA9IGlmRWxzZShcblx0XHR1cGRhdGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCB1cGRhdGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKG5vdEVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwodXBkYXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xuXHRyZXR1cm4gaWZFbHNlKGJJc0RyYWZ0Um9vdCwgYW5kKHJlc3VsdGFudEV4cHJlc3Npb24sIERyYWZ0Lkhhc05vRHJhZnRGb3JDdXJyZW50VXNlciksIHJlc3VsdGFudEV4cHJlc3Npb24pO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRWRpdCBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHtDb252ZXJ0ZXJDb250ZXh0fSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uPGJvb2xlYW4+fSBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBFZGl0IGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25FbmFibGVkKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCaW5kaW5nRXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCksXG5cdFx0aXNEcmFmdFJvb3QgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ID8gdHJ1ZSA6IGZhbHNlLFxuXHRcdGlzU3RpY2t5ID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdGxldCBlZGl0QWN0aW9uTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpZiAoaXNEcmFmdFJvb3QpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9IGVsc2UgaWYgKGlzU3RpY2t5KSB7XG5cdFx0ZWRpdEFjdGlvbk5hbWUgPSBlbnRpdHlTZXQ/LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LkVkaXRBY3Rpb24gYXMgc3RyaW5nO1xuXHR9XG5cdGlmIChlZGl0QWN0aW9uTmFtZSkge1xuXHRcdGNvbnN0IGVkaXRBY3Rpb25Bbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChlZGl0QWN0aW9uTmFtZSBhcyBzdHJpbmcpLFxuXHRcdFx0ZWRpdEFjdGlvbnMgPSAoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uIGFzIGFueSk/LmFjdGlvbnM7XG5cdFx0aWYgKGVkaXRBY3Rpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGVkaXRBY3Rpb24gPSBlZGl0QWN0aW9uc1swXTtcblx0XHRcdGlmIChlZGl0QWN0aW9uPy5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGVkaXRBY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMge0Jhc2VBY3Rpb25bXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRvRHJhZnRSb290ID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5EZWxldGVSZXN0cmljdGlvbnMsXG5cdFx0YlVwZGF0ZUhpZGRlbiA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0fSksXG5cdFx0YlBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUJpbmRpbmcoaXNQYXJlbnREZWxldGFibGUpIDogaXNQYXJlbnREZWxldGFibGUsXG5cdFx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdC8vIEluaXRpYWxpemUgYWN0aW9ucyBhbmQgc3RhcnQgd2l0aCBkcmFmdCBhY3Rpb25zIGlmIGF2YWlsYWJsZSBzaW5jZSB0aGV5IHNob3VsZCBhcHBlYXIgaW4gdGhlIGZpcnN0XG5cdC8vIGxlZnRtb3N0IHBvc2l0aW9uIGluIHRoZSBhY3Rpb25zIGFyZWEgb2YgdGhlIE9QIGhlYWRlclxuXHQvLyBUaGlzIGlzIG1vcmUgbGlrZSBhIHBsYWNlaG9sZGVyIHRoYW4gYSBzaW5nbGUgYWN0aW9uLCBzaW5jZSB0aGlzIGNvbnRyb2xzIG5vdCBvbmx5IHRoZSB0ZW1wbGF0aW5nIG9mXG5cdC8vIHRoZSBidXR0b24gZm9yIHN3aXRjaGluZyBiZXR3ZWVuIGRyYWZ0IGFuZCBhY3RpdmUgZG9jdW1lbnQgdmVyc2lvbnMgYnV0IGFsc28gdGhlIGNvbnRyb2xzIGZvclxuXHQvLyB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBmcmFnbWVudC5cblx0Y29uc3QgaGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChvRHJhZnRSb290Py5FZGl0QWN0aW9uICYmIGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRyYWZ0QWN0aW9ucywga2V5OiBcIkRyYWZ0QWN0aW9uc1wiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHQvLyBUaGVuIHRoZSBlZGl0IGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKChvRHJhZnRSb290Py5FZGl0QWN0aW9uIHx8IG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5FZGl0QWN0aW9uKSAmJiBiVXBkYXRlSGlkZGVuICE9PSB0cnVlKSB7XG5cdFx0Y29uc3QgdXBkYXRlSGlkZGVuID0gKFxuXHRcdFx0ZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlblxuXHRcdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW5cblx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksXG5cdFx0XHRrZXk6IFwiRWRpdEFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KVxuXHRcdH0pO1xuXHR9XG5cdC8vIFRoZW4gdGhlIGRlbGV0ZSBhY3Rpb24gaWYgd2UncmUgbm90IHN0YXRpY2FsbHkgbm90IGRlbGV0YWJsZVxuXHRpZiAoXG5cdFx0KGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdChvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zPy5EZWxldGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2UgJiYgYlBhcmVudEVudGl0eVNldERlbGV0YWJsZSAhPT0gXCJmYWxzZVwiKVxuXHQpIHtcblx0XHRjb25zdCBkZWxldGVIaWRkZW4gPSAoXG5cdFx0XHRlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW4/LnZhbHVlT2YoKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdD8gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuXG5cdFx0XHRcdDogZW50aXR5VHlwZT8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlblxuXHRcdCkgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj47XG5cdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkRlbGV0ZUFjdGlvblwiLFxuXHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcoZ2V0RGVsZXRlQnV0dG9uVmlzaWJpbGl0eShjb252ZXJ0ZXJDb250ZXh0LCBkZWxldGVIaWRkZW4pKSxcblx0XHRcdGVuYWJsZWQ6IGNvbXBpbGVCaW5kaW5nKGdldERlbGV0ZUJ1dHRvbkVuYWJsZWQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlLCBpc1BhcmVudERlbGV0YWJsZSkpLFxuXHRcdFx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZDogYlBhcmVudEVudGl0eVNldERlbGV0YWJsZVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3QgaGVhZGVyRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9ySUJOQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblBhcmFtcyA9IHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBkYXRhRmllbGQuTWFwcGluZyA/IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhkYXRhRmllbGQuTWFwcGluZykgOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKGRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJSZXF1aXJlc0NvbnRleHQgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6IFwiICsgZGF0YUZpZWxkLkxhYmVsKTtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YUZpZWxkLklubGluZT8udmFsdWVPZigpID09PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIklubGluZSBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHRydWUgZm9yIGhlYWRlciBJQk4gYWN0aW9uIDogXCIgKyBkYXRhRmllbGQuTGFiZWwpO1xuXHRcdFx0fVxuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0YnV0dG9uVHlwZTogQnV0dG9uVHlwZS5HaG9zdCxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUJpbmRpbmcobm90KGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDpcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdFx0XHQ/IGNvbXBpbGVCaW5kaW5nKGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkpLCB0cnVlKSlcblx0XHRcdFx0XHRcdDogdHJ1ZSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlLFxuXHRcdFx0XHRwcmVzczogY29tcGlsZUJpbmRpbmcoXG5cdFx0XHRcdFx0Zm4oXCIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZVwiLCBbXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblBhcmFtc1xuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGN1c3RvbURhdGE6IGNvbXBpbGVCaW5kaW5nKHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0KSxcblx0XHRcdFx0XHRhY3Rpb246IGFubm90YXRpb25FeHByZXNzaW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdH0pXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXHQvLyBGaW5hbGx5IHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufVxuXG4vKipcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyB7QmFzZUFjdGlvbltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SGlkZGVuSGVhZGVyQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBoaWRkZW5BY3Rpb25zID0gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiBpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0fSkgfHwgW10pIGFzIERhdGFGaWVsZEZvckFjdGlvblR5cGVzW107XG5cdHJldHVybiBoaWRkZW5BY3Rpb25zLm1hcCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpXG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHZpZXdMZXZlbFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIHtCYXNlQWN0aW9uW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyh2aWV3TGV2ZWw6IG51bWJlciwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkLCAvL2ZvciBzdGlja3kgYXBwXG5cdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9XG5cdFx0XHRlbnRpdHlTZXQgJiYgKGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8udGVybSB8fCBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LnRlcm0pLFxuXHRcdGJDb25kaXRpb25TYXZlID1cblx0XHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiIHx8XG5cdFx0XHQob1N0aWNreVNlc3Npb25TdXBwb3J0ZWQgJiYgb1N0aWNreVNlc3Npb25TdXBwb3J0ZWQ/LlNhdmVBY3Rpb24pLFxuXHRcdGJDb25kaXRpb25BcHBseSA9IHZpZXdMZXZlbCA+IDEsXG5cdFx0YkNvbmRpdGlvbkNhbmNlbCA9XG5cdFx0XHRzRW50aXR5U2V0RHJhZnRSb290ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIiB8fFxuXHRcdFx0KG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkICYmIG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5EaXNjYXJkQWN0aW9uKTtcblxuXHQvLyBSZXRyaWV2ZSBhbGwgZGV0ZXJtaW5pbmcgYWN0aW9uc1xuXHRjb25zdCBmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zID0gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLCB0cnVlKTtcblxuXHQvLyBGaXJzdCBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGNvbnN0IGZvb3RlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSA9IGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0Lm1hcCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVCaW5kaW5nKG5vdChlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4pLCB0cnVlKSkpLFxuXHRcdFx0XHRlbmFibGVkOiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0KSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWVcblx0XHRcdH07XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgc2F2ZSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChlbnRpdHlTZXQ/LmVudGl0eVR5cGVOYW1lID09PSBlbnRpdHlUeXBlPy5mdWxseVF1YWxpZmllZE5hbWUgJiYgYkNvbmRpdGlvblNhdmUpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLlByaW1hcnksIGtleTogXCJTYXZlQWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBhcHBseSBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQXBwbHkpIHtcblx0XHRmb290ZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHRBcHBseSwga2V5OiBcIkFwcGx5QWN0aW9uXCIgfSk7XG5cdH1cblxuXHQvLyBUaGVuIHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlQmluZGluZyhub3QoZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cbiJdfQ==
429
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMiLCJlbnRpdHlUeXBlIiwiYkRldGVybWluaW5nIiwiYW5ub3RhdGlvbnMiLCJVSSIsIklkZW50aWZpY2F0aW9uIiwiZmlsdGVyIiwiaWRlbnRpZmljYXRpb25EYXRhRmllbGQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiJFR5cGUiLCJEZXRlcm1pbmluZyIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zIiwiSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMiLCJnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5IiwiY29udmVydGVyQ29udGV4dCIsImRlbGV0ZUhpZGRlbiIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJkZWxldGVIaWRkZW5FeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwicGF0aCIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFdyYXBwZXIiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJ2aWV3TGV2ZWwiLCJnZXRWaWV3TGV2ZWwiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJJc0VkaXRhYmxlIiwibm90IiwiaWZFbHNlIiwiYW5kIiwiZXF1YWwiLCJnZXREZWxldGVCdXR0b25FbmFibGVkIiwiaXNEZWxldGFibGUiLCJpc1BhcmVudERlbGV0YWJsZSIsImNvbnN0YW50IiwiZ2V0RWRpdEJ1dHRvblZpc2liaWxpdHkiLCJ1cGRhdGVIaWRkZW4iLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJiSXNEcmFmdFJvb3QiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJ1cGRhdGVIaWRkZW5FeHByZXNzaW9uIiwibm90RWRpdGFibGVFeHByZXNzaW9uIiwicmVzdWx0YW50RXhwcmVzc2lvbiIsIkRyYWZ0IiwiSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWQiLCJpc0RyYWZ0Um9vdCIsImlzU3RpY2t5IiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJlZGl0QWN0aW9uTmFtZSIsIkVkaXRBY3Rpb24iLCJlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGgiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZWRpdEFjdGlvbiIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiZ2V0SGVhZGVyRGVmYXVsdEFjdGlvbnMiLCJnZXRFbnRpdHlUeXBlIiwib1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJvRHJhZnRSb290Iiwib0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkRlbGV0ZVJlc3RyaWN0aW9ucyIsImJVcGRhdGVIaWRkZW4iLCJVcGRhdGVIaWRkZW4iLCJpc1BhdGhEZWxldGFibGUiLCJwYXRoVmlzaXRvciIsIm5hdmlnYXRpb25QYXRocyIsImJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnMiLCJoZWFkZXJBY3Rpb25zIiwicHVzaCIsInR5cGUiLCJBY3Rpb25UeXBlIiwiRHJhZnRBY3Rpb25zIiwia2V5IiwiZGF0YUZpZWxkIiwiaW5kZXhPZiIsIkNyaXRpY2FsaXR5IiwiZm9yRWFjaCIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsInZpc2libGUiLCJlbmFibGVkIiwiaXNOYXZpZ2FibGUiLCJQcmltYXJ5IiwiRGVsZXRhYmxlIiwiRGVsZXRlSGlkZGVuIiwiU2Vjb25kYXJ5IiwicGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZCIsImhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMiLCJvTmF2aWdhdGlvblBhcmFtcyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIk1hcHBpbmciLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJSZXF1aXJlc0NvbnRleHQiLCJFcnJvciIsIkxhYmVsIiwiSW5saW5lIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwidGV4dCIsInRvU3RyaW5nIiwiYnV0dG9uVHlwZSIsIkJ1dHRvblR5cGUiLCJHaG9zdCIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJwcmVzcyIsImZuIiwiU2VtYW50aWNPYmplY3QiLCJBY3Rpb24iLCJjdXN0b21EYXRhIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJnZXRIaWRkZW5IZWFkZXJBY3Rpb25zIiwiaGlkZGVuQWN0aW9ucyIsIkRlZmF1bHQiLCJnZXRGb290ZXJEZWZhdWx0QWN0aW9ucyIsInNFbnRpdHlTZXREcmFmdFJvb3QiLCJ0ZXJtIiwiYkNvbmRpdGlvblNhdmUiLCJTYXZlQWN0aW9uIiwiYkNvbmRpdGlvbkFwcGx5IiwiYkNvbmRpdGlvbkNhbmNlbCIsIkRpc2NhcmRBY3Rpb24iLCJmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zIiwiZm9vdGVyQWN0aW9ucyIsImVudGl0eVR5cGVOYW1lIiwiRGVmYXVsdEFwcGx5IiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJFbmQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkhlYWRlckFuZEZvb3RlckFjdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUsIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFGaWVsZEZvckFjdGlvblR5cGVzLCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkFjdGlvbiwgQmFzZUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uLCBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBjb25zdGFudCwgZXF1YWwsIGZuLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sIGlmRWxzZSwgbm90IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzUGF0aERlbGV0YWJsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IERyYWZ0LCBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwiLi4vaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIHRoZSBkYXRhIGZpZWxkIGZvciBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvblxuICogVGhleSBtdXN0IGJlXG4gKiAtIE5vdCBzdGF0aWNhbGx5IGhpZGRlblxuICogLSBFaXRoZXIgbGlua2VkIHRvIGFuIFVuYm91bmQgYWN0aW9uIG9yIHRvIGFuIGFjdGlvbiB3aGljaCBoYXMgYW4gT3BlcmF0aW9uQXZhaWxhYmxlIHRoYXQgaXMgbm90IHNldCB0byBmYWxzZSBzdGF0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IGVudGl0eSB0eXBlXG4gKiBAcGFyYW0gYkRldGVybWluaW5nIFRoZSBmbGFnIHdoaWNoIGRlbm90ZXMgd2hldGhlciBvciBub3QgdGhlIGFjdGlvbiBpcyBhIGRldGVybWluaW5nIGFjdGlvblxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgRGF0YUZpZWxkIGZvciBhY3Rpb24gcmVzcGVjdGluZyB0aGUgaW5wdXQgcGFyYW1ldGVyICdiRGV0ZXJtaW5pbmcnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvckFjdGlvbnMoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgYkRldGVybWluaW5nOiBib29sZWFuKTogRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXSB7XG5cdHJldHVybiAoZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LklkZW50aWZpY2F0aW9uPy5maWx0ZXIoKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkKSA9PiB7XG5cdFx0aWYgKGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlkZW50aWZpY2F0aW9uRGF0YUZpZWxkPy4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJlxuXHRcdFx0XHQhIWlkZW50aWZpY2F0aW9uRGF0YUZpZWxkLkRldGVybWluaW5nID09PSBiRGV0ZXJtaW5pbmcgJiZcblx0XHRcdFx0KCFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kIHx8XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9yQWN0aW9uVHlwZXNbXTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBhbGwgdGhlIElCTiBhY3Rpb25zIGZvciB0aGUgaWRlbnRpZmljYXRpb24gYW5ub3RhdGlvbi5cbiAqIFRoZXkgbXVzdCBiZVxuICogLSBOb3Qgc3RhdGljYWxseSBoaWRkZW4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5dHlwZVxuICogQHBhcmFtIGJEZXRlcm1pbmluZyBXaGV0aGVyIG9yIG5vdCB0aGUgYWN0aW9uIHNob3VsZCBiZSBkZXRlcm1pbmluZ1xuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZGF0YSBmaWVsZCBmb3IgYWN0aW9uIHJlc3BlY3RpbmcgdGhlIGJEZXRlcm1pbmluZyBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0SWRlbnRpZmljYXRpb25EYXRhRmllbGRGb3JJQk5BY3Rpb25zKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGJEZXRlcm1pbmluZzogYm9vbGVhbik6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblR5cGVzW10ge1xuXHRyZXR1cm4gKGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5JZGVudGlmaWNhdGlvbj8uZmlsdGVyKChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZCkgPT4ge1xuXHRcdGlmIChpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRpZGVudGlmaWNhdGlvbkRhdGFGaWVsZD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgJiZcblx0XHRcdFx0ISFpZGVudGlmaWNhdGlvbkRhdGFGaWVsZC5EZXRlcm1pbmluZyA9PT0gYkRldGVybWluaW5nXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KSB8fCBbXSkgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uVHlwZXNbXTtcbn1cblxuY29uc3QgSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMgPSBbXG5cdFwiVUkuQ3JpdGljYWxpdHlUeXBlL1ZlcnlQb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9Qb3NpdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiLFxuXHRcIlVJLkNyaXRpY2FsaXR5VHlwZS9WZXJ5TmVnYXRpdmVcIlxuXTtcblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gYW4gb2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgSW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIGRlbGV0ZUhpZGRlbiBUaGUgdmFsdWUgb2YgdGhlIFVJLkRlbGV0ZUhpZGRlbiBhbm5vdGF0aW9uIG9uIHRoZSBlbnRpdHkgc2V0IC8gdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAndmlzaWJsZScgcHJvcGVydHkgb2YgdGhlIERlbGV0ZSBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkZWxldGVIaWRkZW46IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCksXG5cdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyA9IGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMubWFwKChuYXZQcm9wKSA9PiBuYXZQcm9wLm5hbWUpLFxuXHRcdC8vIFNldCBhYnNvbHV0ZSBiaW5kaW5nIHBhdGggZm9yIFNpbmdsZXRvbiByZWZlcmVuY2VzLCBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWQgYW5ub3RhdGlvbiBwYXRoIGl0c2VsZi5cblx0XHQvLyBGb3IgZS5nLiAvY29tLnNhcC5uYW1lc3BhY2UuRW50aXR5Q29udGFpbmVyL1NpbmdsZXRvbi9Qcm9wZXJ0eSB0byAvU2luZ2xldG9uL1Byb3BlcnR5XG5cdFx0ZGVsZXRlSGlkZGVuRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4gfCB1bmRlZmluZWQ+ID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0ZGVsZXRlSGlkZGVuLFxuXHRcdFx0dmlzaXRlZE5hdmlnYXRpb25QYXRocyxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVkVHlwZXMoKSwgW10pXG5cdFx0KSxcblx0XHRtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLFxuXHRcdHZpZXdMZXZlbCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3TGV2ZWwoKSxcblx0XHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGVcblx0XHQvLyBJbiBPUCBcdFx0LS0+ICB3aGVuIG5vdCBpbiBlZGl0IG1vZGVcblx0XHQvLyBJbiBzdWItT1AgXHQtLT4gIHdoZW4gaW4gZWRpdCBtb2RlXG5cdFx0ZWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSB2aWV3TGV2ZWwgPiAxID8gVUkuSXNFZGl0YWJsZSA6IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5EZWxldGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gZWRpdGFibGVFeHByZXNzaW9uLlxuXHQvLyBlbHNlLFxuXHQvLyBEZWxldGUgYnV0dG9uIGlzIHZpc2libGUgYmFzZWQgb24gYm90aCBhbm5vdGF0aW9uIHBhdGggYW5kIGVkaXRhYmxlRXhwcmVzc2lvbi5cblx0cmV0dXJuIGlmRWxzZShcblx0XHRkZWxldGVIaWRkZW4gPT09IHVuZGVmaW5lZCB8fCBkZWxldGVIaWRkZW4udmFsdWVPZigpID09PSBmYWxzZSxcblx0XHRlZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0YW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZXF1YWwoZGVsZXRlSGlkZGVuRXhwcmVzc2lvbiwgZmFsc2UpKVxuXHQpO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBiaW5kaW5nIGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gaXNEZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkXG4gKiBAcGFyYW0gaXNQYXJlbnREZWxldGFibGUgVGhlIGRlbGV0ZSByZXN0cmljdGlvbiBjb25maWd1cmVkIG9uIHRoZSBwYXJlbnQgZW50aXR5XG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBEZWxldGUgYnV0dG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVCdXR0b25FbmFibGVkKFxuXHRpc0RlbGV0YWJsZTogUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Qm9vbGVhbj4gfCB1bmRlZmluZWQsXG5cdGlzUGFyZW50RGVsZXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aXNQYXJlbnREZWxldGFibGUgIT09IHVuZGVmaW5lZCxcblx0XHRpc1BhcmVudERlbGV0YWJsZSxcblx0XHRpZkVsc2UoaXNEZWxldGFibGUgIT09IHVuZGVmaW5lZCwgZXF1YWwoaXNEZWxldGFibGUsIHRydWUpLCBjb25zdGFudCh0cnVlKSlcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAndmlzaWJsZScgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEBwYXJhbSB1cGRhdGVIaWRkZW4gVGhlIHZhbHVlIG9mIHRoZSBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiB0aGUgZW50aXR5IHNldCAvIHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IG9mIHRoZSBFZGl0IGJ1dHRvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR1cGRhdGVIaWRkZW46IFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+IHwgdW5kZWZpbmVkXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGJJc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLFxuXHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMgPSBkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcCkgPT4gbmF2UHJvcC5uYW1lKSxcblx0XHQvLyBTZXQgYWJzb2x1dGUgYmluZGluZyBwYXRoIGZvciBTaW5nbGV0b24gcmVmZXJlbmNlcywgb3RoZXJ3aXNlIHRoZSBjb25maWd1cmVkIGFubm90YXRpb24gcGF0aCBpdHNlbGYuXG5cdFx0Ly8gRm9yIGUuZy4gL2NvbS5zYXAubmFtZXNwYWNlLkVudGl0eUNvbnRhaW5lci9TaW5nbGV0b24vUHJvcGVydHkgdG8gL1NpbmdsZXRvbi9Qcm9wZXJ0eVxuXHRcdHVwZGF0ZUhpZGRlbkV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuIHwgdW5kZWZpbmVkPiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdHVwZGF0ZUhpZGRlbixcblx0XHRcdHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQocGF0aDogc3RyaW5nKSA9PiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMpXG5cdFx0KSxcblx0XHRub3RFZGl0YWJsZUV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblxuXHQvLyBJZiBVSS5VcGRhdGVIaWRkZW4gYW5ub3RhdGlvbiBvbiBlbnRpdHkgc2V0IG9yIHR5cGUgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlLFxuXHQvLyBFZGl0IGJ1dHRvbiBpcyB2aXNpYmxlIGluIGRpc3BsYXkgbW9kZS5cblx0Ly8gZWxzZSxcblx0Ly8gRWRpdCBidXR0b24gaXMgdmlzaWJsZSBiYXNlZCBvbiBib3RoIGFubm90YXRpb24gcGF0aCBhbmQgaW4gZGlzcGxheSBtb2RlLlxuXHRjb25zdCByZXN1bHRhbnRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBpZkVsc2UoXG5cdFx0dXBkYXRlSGlkZGVuID09PSB1bmRlZmluZWQgfHwgdXBkYXRlSGlkZGVuLnZhbHVlT2YoKSA9PT0gZmFsc2UsXG5cdFx0bm90RWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdGFuZChub3RFZGl0YWJsZUV4cHJlc3Npb24sIGVxdWFsKHVwZGF0ZUhpZGRlbkV4cHJlc3Npb24sIGZhbHNlKSlcblx0KTtcblx0cmV0dXJuIGlmRWxzZShiSXNEcmFmdFJvb3QsIGFuZChyZXN1bHRhbnRFeHByZXNzaW9uLCBEcmFmdC5IYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIpLCByZXN1bHRhbnRFeHByZXNzaW9uKTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgYmluZGluZyBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IEluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIEVkaXQgYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSxcblx0XHRpc0RyYWZ0Um9vdCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgPyB0cnVlIDogZmFsc2UsXG5cdFx0aXNTdGlja3kgPSBlbnRpdHlTZXQgJiYgZW50aXR5U2V0LmFubm90YXRpb25zLlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0bGV0IGVkaXRBY3Rpb25OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmIChpc0RyYWZ0Um9vdCkge1xuXHRcdGVkaXRBY3Rpb25OYW1lID0gZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH0gZWxzZSBpZiAoaXNTdGlja3kpIHtcblx0XHRlZGl0QWN0aW9uTmFtZSA9IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbiBhcyBzdHJpbmc7XG5cdH1cblx0aWYgKGVkaXRBY3Rpb25OYW1lKSB7XG5cdFx0Y29uc3QgZWRpdEFjdGlvbkFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKGVkaXRBY3Rpb25OYW1lKTtcblx0XHRjb25zdCBlZGl0QWN0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihlZGl0QWN0aW9uQW5ub3RhdGlvblBhdGgpLmFubm90YXRpb247XG5cdFx0aWYgKGVkaXRBY3Rpb24/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBcIns9ICR7I1wiICsgZWRpdEFjdGlvbk5hbWUgKyBcIn0gPyB0cnVlIDogZmFsc2UgfVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZWRpdEFjdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBcInRydWVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckRlZmF1bHRBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpLFxuXHRcdGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSxcblx0XHRvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQsIC8vZm9yIHN0aWNreSBhcHBcblx0XHRvRHJhZnRSb290ID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCxcblx0XHRvRW50aXR5RGVsZXRlUmVzdHJpY3Rpb25zID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5EZWxldGVSZXN0cmljdGlvbnMsXG5cdFx0YlVwZGF0ZUhpZGRlbiA9IGVudGl0eVNldCAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpLFxuXHRcdGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSxcblx0XHRpc1BhcmVudERlbGV0YWJsZSA9IGlzUGF0aERlbGV0YWJsZShkYXRhTW9kZWxPYmplY3RQYXRoLCB7XG5cdFx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdFx0fSksXG5cdFx0YlBhcmVudEVudGl0eVNldERlbGV0YWJsZSA9IGlzUGFyZW50RGVsZXRhYmxlID8gY29tcGlsZUV4cHJlc3Npb24oaXNQYXJlbnREZWxldGFibGUpIDogaXNQYXJlbnREZWxldGFibGUsXG5cdFx0aGVhZGVyRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgZmFsc2UpO1xuXG5cdC8vIEluaXRpYWxpemUgYWN0aW9ucyBhbmQgc3RhcnQgd2l0aCBkcmFmdCBhY3Rpb25zIGlmIGF2YWlsYWJsZSBzaW5jZSB0aGV5IHNob3VsZCBhcHBlYXIgaW4gdGhlIGZpcnN0XG5cdC8vIGxlZnRtb3N0IHBvc2l0aW9uIGluIHRoZSBhY3Rpb25zIGFyZWEgb2YgdGhlIE9QIGhlYWRlclxuXHQvLyBUaGlzIGlzIG1vcmUgbGlrZSBhIHBsYWNlaG9sZGVyIHRoYW4gYSBzaW5nbGUgYWN0aW9uLCBzaW5jZSB0aGlzIGNvbnRyb2xzIG5vdCBvbmx5IHRoZSB0ZW1wbGF0aW5nIG9mXG5cdC8vIHRoZSBidXR0b24gZm9yIHN3aXRjaGluZyBiZXR3ZWVuIGRyYWZ0IGFuZCBhY3RpdmUgZG9jdW1lbnQgdmVyc2lvbnMgYnV0IGFsc28gdGhlIGNvbnRyb2xzIGZvclxuXHQvLyB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBmcmFnbWVudC5cblx0Y29uc3QgaGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdID0gW107XG5cdGlmIChvRHJhZnRSb290Py5FZGl0QWN0aW9uICYmIGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goeyB0eXBlOiBBY3Rpb25UeXBlLkRyYWZ0QWN0aW9ucywga2V5OiBcIkRyYWZ0QWN0aW9uc1wiIH0pO1xuXHR9XG5cblx0Ly8gVGhlbiBhZGQgdGhlIFwiQ3JpdGljYWxcIiBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGhlYWRlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA+IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0Ly8gVGhlbiB0aGUgZWRpdCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmICgob0RyYWZ0Um9vdD8uRWRpdEFjdGlvbiB8fCBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRWRpdEFjdGlvbikgJiYgYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdGNvbnN0IHVwZGF0ZUhpZGRlbiA9IChcblx0XHRcdGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBlbnRpdHlTZXQ/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW5cblx0XHRcdFx0OiBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuXG5cdFx0KSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPjtcblx0XHRoZWFkZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0dHlwZTogQWN0aW9uVHlwZS5QcmltYXJ5LFxuXHRcdFx0a2V5OiBcIkVkaXRBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGdldEVkaXRCdXR0b25WaXNpYmlsaXR5KGNvbnZlcnRlckNvbnRleHQsIHVwZGF0ZUhpZGRlbikpLFxuXHRcdFx0ZW5hYmxlZDogZ2V0RWRpdEJ1dHRvbkVuYWJsZWQoY29udmVydGVyQ29udGV4dClcblx0XHR9KTtcblx0fVxuXHQvLyBUaGVuIHRoZSBkZWxldGUgYWN0aW9uIGlmIHdlJ3JlIG5vdCBzdGF0aWNhbGx5IG5vdCBkZWxldGFibGVcblx0aWYgKFxuXHRcdChiUGFyZW50RW50aXR5U2V0RGVsZXRhYmxlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIikgfHxcblx0XHQob0VudGl0eURlbGV0ZVJlc3RyaWN0aW9ucz8uRGVsZXRhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlICYmIGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGUgIT09IFwiZmFsc2VcIilcblx0KSB7XG5cdFx0Y29uc3QgZGVsZXRlSGlkZGVuID0gKFxuXHRcdFx0ZW50aXR5U2V0Py5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuPy52YWx1ZU9mKCkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGVudGl0eVNldD8uYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlblxuXHRcdFx0XHQ6IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5EZWxldGVIaWRkZW5cblx0XHQpIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPGJvb2xlYW4+O1xuXHRcdGhlYWRlckFjdGlvbnMucHVzaCh7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLlNlY29uZGFyeSxcblx0XHRcdGtleTogXCJEZWxldGVBY3Rpb25cIixcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGdldERlbGV0ZUJ1dHRvblZpc2liaWxpdHkoY29udmVydGVyQ29udGV4dCwgZGVsZXRlSGlkZGVuKSksXG5cdFx0XHRlbmFibGVkOiBjb21waWxlRXhwcmVzc2lvbihnZXREZWxldGVCdXR0b25FbmFibGVkKG9FbnRpdHlEZWxldGVSZXN0cmljdGlvbnM/LkRlbGV0YWJsZSwgaXNQYXJlbnREZWxldGFibGUpKSxcblx0XHRcdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ6IGJQYXJlbnRFbnRpdHlTZXREZWxldGFibGVcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGhlYWRlckRhdGFGaWVsZEZvcklCTkFjdGlvbnMgPSBnZXRJZGVudGlmaWNhdGlvbkRhdGFGaWVsZEZvcklCTkFjdGlvbnMoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGZhbHNlKTtcblxuXHRoZWFkZXJEYXRhRmllbGRGb3JJQk5BY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25QYXJhbXMgPSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogZGF0YUZpZWxkLk1hcHBpbmcgPyBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcoZGF0YUZpZWxkLk1hcHBpbmcpIDogW11cblx0XHRcdH07XG5cblx0XHRcdGlmIChkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0Py52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlc0NvbnRleHQgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fSBlbHNlIGlmIChkYXRhRmllbGQuSW5saW5lPy52YWx1ZU9mKCkgPT09IHRydWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbmxpbmUgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB0cnVlIGZvciBoZWFkZXIgSUJOIGFjdGlvbiA6ICR7ZGF0YUZpZWxkLkxhYmVsfWApO1xuXHRcdFx0fVxuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdHRleHQ6IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0YnV0dG9uVHlwZTogQnV0dG9uVHlwZS5HaG9zdCxcblx0XHRcdFx0dmlzaWJsZTogY29tcGlsZUV4cHJlc3Npb24obm90KGVxdWFsKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6XG5cdFx0XHRcdFx0ZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLk5hdmlnYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSksIHRydWUpKVxuXHRcdFx0XHRcdFx0OiB0cnVlLFxuXHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0aXNOYXZpZ2FibGU6IHRydWUsXG5cdFx0XHRcdHByZXNzOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRmbihcIi5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlXCIsIFtcblx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdFx0XHRcdFx0b05hdmlnYXRpb25QYXJhbXNcblx0XHRcdFx0XHRdKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjdXN0b21EYXRhOiBjb21waWxlRXhwcmVzc2lvbih7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihkYXRhRmllbGQuU2VtYW50aWNPYmplY3QpLFxuXHRcdFx0XHRcdGFjdGlvbjogZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5BY3Rpb24pXG5cdFx0XHRcdH0pXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXHQvLyBGaW5hbGx5IHRoZSBub24gY3JpdGljYWwgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRoZWFkZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPT09IC0xO1xuXHRcdH0pXG5cdFx0LmZvckVhY2goKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0aGVhZGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0fSBhcyBBbm5vdGF0aW9uQWN0aW9uKTtcblx0XHR9KTtcblxuXHRyZXR1cm4gaGVhZGVyQWN0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhpZGRlbkhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEJhc2VBY3Rpb25bXSB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3QgaGlkZGVuQWN0aW9ucyA9IChlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uSWRlbnRpZmljYXRpb24/LmZpbHRlcigoaWRlbnRpZmljYXRpb25EYXRhRmllbGQpID0+IHtcblx0XHRyZXR1cm4gaWRlbnRpZmljYXRpb25EYXRhRmllbGQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH0pIHx8IFtdKSBhcyBEYXRhRmllbGRGb3JBY3Rpb25UeXBlc1tdO1xuXHRyZXR1cm4gaGlkZGVuQWN0aW9ucy5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKVxuXHRcdH07XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9vdGVyRGVmYXVsdEFjdGlvbnModmlld0xldmVsOiBudW1iZXIsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkID0gZW50aXR5U2V0ICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucz8uU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCwgLy9mb3Igc3RpY2t5IGFwcFxuXHRcdHNFbnRpdHlTZXREcmFmdFJvb3QgPVxuXHRcdFx0ZW50aXR5U2V0ICYmIChlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3Q/LnRlcm0gfHwgZW50aXR5U2V0LmFubm90YXRpb25zPy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy50ZXJtKSxcblx0XHRiQ29uZGl0aW9uU2F2ZSA9XG5cdFx0XHRzRW50aXR5U2V0RHJhZnRSb290ID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIiB8fFxuXHRcdFx0KG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkICYmIG9TdGlja3lTZXNzaW9uU3VwcG9ydGVkPy5TYXZlQWN0aW9uKSxcblx0XHRiQ29uZGl0aW9uQXBwbHkgPSB2aWV3TGV2ZWwgPiAxLFxuXHRcdGJDb25kaXRpb25DYW5jZWwgPVxuXHRcdFx0c0VudGl0eVNldERyYWZ0Um9vdCA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIgfHxcblx0XHRcdChvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCAmJiBvU3RpY2t5U2Vzc2lvblN1cHBvcnRlZD8uRGlzY2FyZEFjdGlvbik7XG5cblx0Ly8gUmV0cmlldmUgYWxsIGRldGVybWluaW5nIGFjdGlvbnNcblx0Y29uc3QgZm9vdGVyRGF0YUZpZWxkRm9yQWN0aW9ucyA9IGdldElkZW50aWZpY2F0aW9uRGF0YUZpZWxkRm9yQWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgdHJ1ZSk7XG5cblx0Ly8gRmlyc3QgYWRkIHRoZSBcIkNyaXRpY2FsXCIgRGF0YUZpZWxkRm9yQWN0aW9uc1xuXHRjb25zdCBmb290ZXJBY3Rpb25zOiBCYXNlQWN0aW9uW10gPSBmb290ZXJEYXRhRmllbGRGb3JBY3Rpb25zXG5cdFx0LmZpbHRlcigoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gSU1QT1JUQU5UX0NSSVRJQ0FMSVRJRVMuaW5kZXhPZihkYXRhRmllbGQ/LkNyaXRpY2FsaXR5IGFzIHN0cmluZykgPiAtMTtcblx0XHR9KVxuXHRcdC5tYXAoKGRhdGFGaWVsZCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdGtleTogS2V5SGVscGVyLmdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZChkYXRhRmllbGQpLFxuXHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbiksIHRydWUpKSksXG5cdFx0XHRcdGVuYWJsZWQ6IGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQpLFxuXHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0fTtcblx0XHR9KTtcblxuXHQvLyBUaGVuIHRoZSBzYXZlIGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGVudGl0eVNldD8uZW50aXR5VHlwZU5hbWUgPT09IGVudGl0eVR5cGU/LmZ1bGx5UXVhbGlmaWVkTmFtZSAmJiBiQ29uZGl0aW9uU2F2ZSkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuUHJpbWFyeSwga2V5OiBcIlNhdmVBY3Rpb25cIiB9KTtcblx0fVxuXG5cdC8vIFRoZW4gdGhlIGFwcGx5IGFjdGlvbiBpZiBpdCBleGlzdHNcblx0aWYgKGJDb25kaXRpb25BcHBseSkge1xuXHRcdGZvb3RlckFjdGlvbnMucHVzaCh7IHR5cGU6IEFjdGlvblR5cGUuRGVmYXVsdEFwcGx5LCBrZXk6IFwiQXBwbHlBY3Rpb25cIiB9KTtcblx0fVxuXG5cdC8vIFRoZW4gdGhlIG5vbiBjcml0aWNhbCBEYXRhRmllbGRGb3JBY3Rpb25zXG5cdGZvb3RlckRhdGFGaWVsZEZvckFjdGlvbnNcblx0XHQuZmlsdGVyKChkYXRhRmllbGQpID0+IHtcblx0XHRcdHJldHVybiBJTVBPUlRBTlRfQ1JJVElDQUxJVElFUy5pbmRleE9mKGRhdGFGaWVsZD8uQ3JpdGljYWxpdHkgYXMgc3RyaW5nKSA9PT0gLTE7XG5cdFx0fSlcblx0XHQuZm9yRWFjaCgoZGF0YUZpZWxkKSA9PiB7XG5cdFx0XHRmb290ZXJBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuKSwgdHJ1ZSkpKSxcblx0XHRcdFx0ZW5hYmxlZDogZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oY29udmVydGVyQ29udGV4dCwgZGF0YUZpZWxkLkFjdGlvblRhcmdldCksXG5cdFx0XHRcdGlzTmF2aWdhYmxlOiB0cnVlXG5cdFx0XHR9IGFzIEFubm90YXRpb25BY3Rpb24pO1xuXHRcdH0pO1xuXG5cdC8vIFRoZW4gdGhlIGNhbmNlbCBhY3Rpb24gaWYgaXQgZXhpc3RzXG5cdGlmIChiQ29uZGl0aW9uQ2FuY2VsKSB7XG5cdFx0Zm9vdGVyQWN0aW9ucy5wdXNoKHtcblx0XHRcdHR5cGU6IEFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuXHRcdFx0a2V5OiBcIkNhbmNlbEFjdGlvblwiLFxuXHRcdFx0cG9zaXRpb246IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuRW5kIH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZm9vdGVyQWN0aW9ucztcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxvQ0FBVCxDQUE4Q0MsVUFBOUMsRUFBc0VDLFlBQXRFLEVBQXdIO0lBQUE7O0lBQzlILE9BQVEsMEJBQUFELFVBQVUsQ0FBQ0UsV0FBWCwwR0FBd0JDLEVBQXhCLDRHQUE0QkMsY0FBNUIsa0ZBQTRDQyxNQUE1QyxDQUFtRCxVQUFDQyx1QkFBRCxFQUE2QjtNQUFBOztNQUN2RixJQUFJLENBQUFBLHVCQUF1QixTQUF2QixJQUFBQSx1QkFBdUIsV0FBdkIscUNBQUFBLHVCQUF1QixDQUFFSixXQUF6QiwwR0FBc0NDLEVBQXRDLDRHQUEwQ0ksTUFBMUMsa0ZBQWtEQyxPQUFsRCxRQUFnRSxJQUFwRSxFQUEwRTtRQUFBOztRQUN6RSxJQUNDLENBQUFGLHVCQUF1QixTQUF2QixJQUFBQSx1QkFBdUIsV0FBdkIsWUFBQUEsdUJBQXVCLENBQUVHLEtBQXpCLE1BQW1DLCtDQUFuQyxJQUNBLENBQUMsQ0FBQ0gsdUJBQXVCLENBQUNJLFdBQTFC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