@sapui5/sap.fe.core 1.102.2 → 1.104.1

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 (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -11,7 +11,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
11
11
  *
12
12
  * @param aKeyNames The array of key names
13
13
  * @param oStartupParameters The startup parameters
14
- * @returns {any[]} An array of pairs {name, value} if all key values could be found in the startup parameters, undefined otherwise
14
+ * @returns An array of pairs \{name, value\} if all key values could be found in the startup parameters, undefined otherwise
15
15
  */
16
16
  _getKeysFromStartupParams: function (aKeyNames, oStartupParameters) {
17
17
  var bAllFound = true;
@@ -102,7 +102,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
102
102
  * @param oManifestRouting The app manifest routing section
103
103
  * @param oStartupParameters The startup parameters
104
104
  * @param oMetaModel The app metamodel
105
- * @returns {any} A page info if the page is reachable, undefined otherwise
105
+ * @returns A page info if the page is reachable, undefined otherwise
106
106
  */
107
107
  _getReachablePageInfoFromRoute: function (oRoute, oManifestRouting, oStartupParameters, oMetaModel) {
108
108
  var _oTarget$options, _oTarget$options$sett;
@@ -129,15 +129,15 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
129
129
  return undefined;
130
130
  }
131
131
 
132
- var sContextPath = oTarget.options.settings.contextPath || oTarget.options.settings.entitySet && "/" + oTarget.options.settings.entitySet;
133
- var oEntityType = sContextPath && oMetaModel.getObject("/$EntityContainer" + sContextPath + "/");
132
+ var sContextPath = oTarget.options.settings.contextPath || oTarget.options.settings.entitySet && "/".concat(oTarget.options.settings.entitySet);
133
+ var oEntityType = sContextPath && oMetaModel.getObject("/$EntityContainer".concat(sContextPath, "/"));
134
134
 
135
135
  if (!oEntityType) {
136
136
  return undefined;
137
137
  } // Get the semantic key values for the entity
138
138
 
139
139
 
140
- var aSemanticKeyNames = oMetaModel.getObject("/$EntityContainer" + sContextPath + "/@com.sap.vocabularies.Common.v1.SemanticKey");
140
+ var aSemanticKeyNames = oMetaModel.getObject("/$EntityContainer".concat(sContextPath, "/@com.sap.vocabularies.Common.v1.SemanticKey"));
141
141
  var aSemantickKeys = aSemanticKeyNames ? this._getKeysFromStartupParams(aSemanticKeyNames.map(function (semKey) {
142
142
  return semKey.$PropertyPath;
143
143
  }), oStartupParameters) : undefined; // Get the technical keys only if we couldn't find the semantic key values, and on first level OP
@@ -150,7 +150,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
150
150
  } // The startup parameters contain values for all semantic keys (or technical keys) --> we can store the page info in the corresponding level
151
151
 
152
152
 
153
- var draftMode = oMetaModel.getObject("/$EntityContainer" + sContextPath + "@com.sap.vocabularies.Common.v1.DraftRoot") || oMetaModel.getObject("/$EntityContainer" + sContextPath + "@com.sap.vocabularies.Common.v1.DraftNode") ? true : false;
153
+ var draftMode = oMetaModel.getObject("/$EntityContainer".concat(sContextPath, "@com.sap.vocabularies.Common.v1.DraftRoot")) || oMetaModel.getObject("/$EntityContainer".concat(sContextPath, "@com.sap.vocabularies.Common.v1.DraftNode")) ? true : false;
154
154
  return {
155
155
  pattern: sPattern,
156
156
  contextPath: sContextPath,
@@ -168,7 +168,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
168
168
  * @param oManifestRouting The routing information from the app manifest
169
169
  * @param oStartupParameters The startup parameters
170
170
  * @param oMetaModel The metamodel
171
- * @returns {any} The reachable pages
171
+ * @returns The reachable pages
172
172
  */
173
173
  _getReachablePages: function (oManifestRouting, oStartupParameters, oMetaModel) {
174
174
  var _this2 = this;
@@ -205,7 +205,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
205
205
  * @param oManifestRouting The routing information from the app manifest
206
206
  * @param oStartupParameters The startup parameters
207
207
  * @param oMetaModel The metamodel
208
- * @returns {any} An array of startup page infos
208
+ * @returns An array of startup page infos
209
209
  */
210
210
  _getStartupPagesFromStartupParams: function (oManifestRouting, oStartupParameters, oMetaModel) {
211
211
  // Find all pages that can be reached with the startup parameters
@@ -261,7 +261,7 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
261
261
  // and replace the parameters by the ID from the contexts
262
262
  var hash = aStartupPages[aStartupPages.length - 1].pattern;
263
263
  aContexts.forEach(function (oContext) {
264
- hash = hash.replace("(#)", "(" + oContext.getPath().split("(")[1]);
264
+ hash = hash.replace("(#)", "(".concat(oContext.getPath().split("(")[1]));
265
265
  });
266
266
  return {
267
267
  hash: hash
@@ -315,14 +315,14 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
315
315
  getCreateStartupHash: function (oStartupParameters, sContextPath, oRouter, oMetaModel) {
316
316
  var _this4 = this;
317
317
 
318
- return oMetaModel.requestObject(sContextPath + "@").then(function (oEntitySetAnnotations) {
318
+ return oMetaModel.requestObject("".concat(sContextPath, "@")).then(function (oEntitySetAnnotations) {
319
319
  var sMetaPath = "";
320
320
  var bCreatable = true;
321
321
 
322
322
  if (oEntitySetAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"] && oEntitySetAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"]["NewAction"]) {
323
- sMetaPath = sContextPath + "@com.sap.vocabularies.Common.v1.DraftRoot/NewAction@Org.OData.Core.V1.OperationAvailable";
323
+ sMetaPath = "".concat(sContextPath, "@com.sap.vocabularies.Common.v1.DraftRoot/NewAction@Org.OData.Core.V1.OperationAvailable");
324
324
  } else if (oEntitySetAnnotations["@com.sap.vocabularies.Session.v1.StickySessionSupported"] && oEntitySetAnnotations["@com.sap.vocabularies.Session.v1.StickySessionSupported"]["NewAction"]) {
325
- sMetaPath = sContextPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction@Org.OData.Core.V1.OperationAvailable";
325
+ sMetaPath = "".concat(sContextPath, "@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction@Org.OData.Core.V1.OperationAvailable");
326
326
  }
327
327
 
328
328
  if (sMetaPath) {
@@ -359,15 +359,15 @@ sap.ui.define(["sap/ui/model/Filter", "sap/ui/model/FilterOperator", "./ModelHel
359
359
  var sDefaultCreateHash = oStartupParameters && oStartupParameters.preferredMode ? oStartupParameters.preferredMode[0] : "create";
360
360
  var sHash = "";
361
361
  sDefaultCreateHash = sDefaultCreateHash.indexOf(":") !== -1 && sDefaultCreateHash.length > sDefaultCreateHash.indexOf(":") + 1 ? sDefaultCreateHash.substr(0, sDefaultCreateHash.indexOf(":")) : "create";
362
- sHash = sContextPath.substring(1) + "(...)?i-action=" + sDefaultCreateHash;
362
+ sHash = "".concat(sContextPath.substring(1), "(...)?i-action=").concat(sDefaultCreateHash);
363
363
 
364
364
  if (oRouter.getRouteInfoByHash(sHash)) {
365
365
  return sHash;
366
366
  } else {
367
- throw new Error("No route match for creating a new " + sContextPath.substring(1));
367
+ throw new Error("No route match for creating a new ".concat(sContextPath.substring(1)));
368
368
  }
369
369
  }
370
370
  };
371
371
  return AppStartupHelper;
372
372
  }, false);
373
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcFN0YXJ0dXBIZWxwZXIudHMiXSwibmFtZXMiOlsiQXBwU3RhcnR1cEhlbHBlciIsIl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMiLCJhS2V5TmFtZXMiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJiQWxsRm91bmQiLCJhS2V5cyIsIm1hcCIsIm5hbWUiLCJsZW5ndGgiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIl9jcmVhdGVGaWx0ZXJGcm9tS2V5cyIsImJEcmFmdE1vZGUiLCJvTWV0YU1vZGVsIiwiYkZpbHRlckNhc2VTZW5zaXRpdmUiLCJNb2RlbEhlbHBlciIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImJGaWx0ZXJPbkFjdGl2ZUVudGl0eSIsImFGaWx0ZXJzIiwia2V5IiwiRmlsdGVyIiwicGF0aCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZhbHVlMSIsImNhc2VTZW5zaXRpdmUiLCJvRHJhZnRGaWx0ZXIiLCJmaWx0ZXJzIiwiYW5kIiwicHVzaCIsIl9yZXF1ZXN0T2JqZWN0c0Zyb21QYXJhbWV0ZXJzIiwiYVN0YXJ0dXBQYWdlcyIsIm9Nb2RlbCIsImFDb250ZXh0UHJvbWlzZXMiLCJwYWdlSW5mbyIsInNlbWFudGljS2V5cyIsInRlY2huaWNhbEtleXMiLCJvRmlsdGVyIiwiZHJhZnRNb2RlIiwiZ2V0TWV0YU1vZGVsIiwib0xpc3RCaW5kIiwiYmluZExpc3QiLCJjb250ZXh0UGF0aCIsImpvaW4iLCJyZXF1ZXN0Q29udGV4dHMiLCJQcm9taXNlIiwiYWxsIiwiX2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlIiwib1JvdXRlIiwib01hbmlmZXN0Um91dGluZyIsInNQYXR0ZXJuIiwicGF0dGVybiIsInJlcGxhY2UiLCJzVGFyZ2V0TmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsIm9UYXJnZXQiLCJ0YXJnZXRzIiwiYVBhdHRlcm5TZWdtZW50cyIsInNwbGl0IiwicGFnZUxldmVsIiwib3B0aW9ucyIsInNldHRpbmdzIiwiYWxsb3dEZWVwTGlua2luZyIsInNDb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm9FbnRpdHlUeXBlIiwiZ2V0T2JqZWN0IiwiYVNlbWFudGljS2V5TmFtZXMiLCJhU2VtYW50aWNrS2V5cyIsInNlbUtleSIsIiRQcm9wZXJ0eVBhdGgiLCJhVGVjaG5pY2FsS2V5cyIsIl9nZXRSZWFjaGFibGVQYWdlcyIsImFSb3V0ZXMiLCJyb3V0ZXMiLCJtUGFnZXNCeUxldmVsIiwiZm9yRWFjaCIsIm9QYWdlSW5mbyIsImFSZWFjaGFibGVQYWdlcyIsImxldmVsIiwiX2dldFN0YXJ0dXBQYWdlc0Zyb21TdGFydHVwUGFyYW1zIiwicmVzdWx0IiwiY3VycmVudCIsImZpbmRSZWN1cnNpdmUiLCJhQ3VycmVudExldmVsUGFnZXMiLCJsYXN0UGFnZSIsIm5leHRQYWdlIiwiaW5kZXhPZiIsInBvcCIsInNsaWNlIiwiX2dldERlZXBMaW5rT2JqZWN0IiwiYUNvbnRleHRzIiwiY29udGV4dCIsImhhc2giLCJvQ29udGV4dCIsImdldFBhdGgiLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJhVmFsdWVzIiwiYUZvdW5kQ29udGV4dHMiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsIm9Sb3V0ZXIiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzTWV0YVBhdGgiLCJiQ3JlYXRhYmxlIiwiYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnNlcnRSZXN0cmljdGlvbnMiLCJJbnNlcnRhYmxlIiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJzRGVmYXVsdENyZWF0ZUhhc2giLCJwcmVmZXJyZWRNb2RlIiwic0hhc2giLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQXFCQSxNQUFNQSxnQkFBZ0IsR0FBRztBQUN4QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FB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QUFLLEdBQUcsRUFBWjtBQUVBRixNQUFBQSxrQkFBa0IsR0FDakJBLGtCQUFrQixDQUFDdkIsT0FBbkIsQ0FBMkIsR0FBM0IsTUFBb0MsQ0FBQyxDQUFyQyxJQUEwQ3VCLGtCQUFrQixDQUFDekcsTUFBbkIsR0FBNEJ5RyxrQkFBa0IsQ0FBQ3ZCLE9BQW5CLENBQTJCLEdBQTNCLElBQWtDLENBQXhHLEdBQ0d1QixrQkFBa0IsQ0FBQ0csTUFBbkIsQ0FBMEIsQ0FBMUIsRUFBNkJILGtCQUFrQixDQUFDdkIsT0FBbkIsQ0FBMkIsR0FBM0IsQ0FBN0IsQ0FESCxHQUVHLFFBSEo7QUFJQXlCLE1BQUFBLEtBQUssR0FBR2pELFlBQVksQ0FBQ21ELFNBQWIsQ0FBdUIsQ0FBdkIsSUFBNEIsaUJBQTVCLEdBQWdESixrQkFBeEQ7O0FBQ0EsVUFBSVIsT0FBTyxDQUFDYSxrQkFBUixDQUEyQkgsS0FBM0IsQ0FBSixFQUF1QztBQUN0QyxlQUFPQSxLQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ04sY0FBTSxJQUFJSSxLQUFKLENBQVUsdUNBQXVDckQsWUFBWSxDQUFDbUQsU0FBYixDQUF1QixDQUF2QixDQUFqRCxDQUFOO0FBQ0E7QUFDRDtBQXRZdUIsR0FBekI7U0F5WWVySCxnQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi9Nb2RlbEhlbHBlclwiO1xuXG50eXBlIFZhbHVlZEtleSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBQYWdlSW5mbyA9IHtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRkcmFmdE1vZGU6IEJvb2xlYW47XG5cdHRlY2huaWNhbEtleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHRzZW1hbnRpY0tleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHR0YXJnZXQ6IHN0cmluZztcblx0cGFnZUxldmVsOiBudW1iZXI7XG59O1xuXG5jb25zdCBBcHBTdGFydHVwSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2V0IG9mIGtleSB2YWx1ZXMgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhS2V5TmFtZXMgVGhlIGFycmF5IG9mIGtleSBuYW1lc1xuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMge2FueVtdfSBBbiBhcnJheSBvZiBwYWlycyB7bmFtZSwgdmFsdWV9IGlmIGFsbCBrZXkgdmFsdWVzIGNvdWxkIGJlIGZvdW5kIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdF9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXM6IGZ1bmN0aW9uKGFLZXlOYW1lczogc3RyaW5nW10sIG9TdGFydHVwUGFyYW1ldGVyczogYW55KTogVmFsdWVkS2V5W10gfCB1bmRlZmluZWQge1xuXHRcdGxldCBiQWxsRm91bmQgPSB0cnVlO1xuXHRcdGNvbnN0IGFLZXlzID0gYUtleU5hbWVzLm1hcChuYW1lID0+IHtcblx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbbmFtZV0gJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzW25hbWVdLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRyZXR1cm4geyBuYW1lLCB2YWx1ZTogb1N0YXJ0dXBQYXJhbWV0ZXJzW25hbWVdWzBdIGFzIHN0cmluZyB9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQSB1bmlxdWUga2V5IHZhbHVlIGNvdWxkbid0IGJlIGZvdW5kIGluIHRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0XHRcdFx0YkFsbEZvdW5kID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiB7IG5hbWUsIHZhbHVlOiBcIlwiIH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYkFsbEZvdW5kID8gYUtleXMgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBmaWx0ZXIgZnJvbSBhIGxpc3Qgb2Yga2V5IHZhbHVlcy5cblx0ICpcblx0ICogQHBhcmFtIGFLZXlzIEFycmF5IG9mIHNlbWFudGljIGtleXMgb3IgdGVjaG5pY2FsIGtleXMgKHdpdGggdmFsdWVzKVxuXHQgKiBAcGFyYW0gYkRyYWZ0TW9kZSBUcnVlIGlmIHRoZSBlbnRpdHkgc3VwcG9ydHMgZHJhZnQgbW9kZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBmaWx0ZXJcblx0ICovXG5cdF9jcmVhdGVGaWx0ZXJGcm9tS2V5czogZnVuY3Rpb24oYUtleXM6IFZhbHVlZEtleVtdLCBiRHJhZnRNb2RlOiBCb29sZWFuLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgYkZpbHRlckNhc2VTZW5zaXRpdmUgPSBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUob01ldGFNb2RlbCk7XG5cblx0XHRsZXQgYkZpbHRlck9uQWN0aXZlRW50aXR5ID0gZmFsc2U7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBhS2V5cy5tYXAoa2V5ID0+IHtcblx0XHRcdGlmIChrZXkubmFtZSA9PT0gXCJJc0FjdGl2ZUVudGl0eVwiKSB7XG5cdFx0XHRcdGJGaWx0ZXJPbkFjdGl2ZUVudGl0eSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IGtleS5uYW1lLFxuXHRcdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsXG5cdFx0XHRcdHZhbHVlMToga2V5LnZhbHVlLFxuXHRcdFx0XHRjYXNlU2Vuc2l0aXZlOiBiRmlsdGVyQ2FzZVNlbnNpdGl2ZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0aWYgKGJEcmFmdE1vZGUgJiYgIWJGaWx0ZXJPbkFjdGl2ZUVudGl0eSkge1xuXHRcdFx0Y29uc3Qgb0RyYWZ0RmlsdGVyID0gbmV3IEZpbHRlcih7XG5cdFx0XHRcdGZpbHRlcnM6IFtuZXcgRmlsdGVyKFwiSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBmYWxzZSksIG5ldyBGaWx0ZXIoXCJTaWJsaW5nRW50aXR5L0lzQWN0aXZlRW50aXR5XCIsIFwiRVFcIiwgbnVsbCldLFxuXHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHRcdGFGaWx0ZXJzLnB1c2gob0RyYWZ0RmlsdGVyKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IEZpbHRlcihhRmlsdGVycywgdHJ1ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIExvYWRzIGFsbCBjb250ZXh0cyBmb3IgYSBsaXN0IG9mIHBhZ2UgaW5mb3MuXG5cdCAqXG5cdCAqIEBwYXJhbSBhU3RhcnR1cFBhZ2VzIFRoZSBsaXN0IG9mIHBhZ2UgaW5mb3Ncblx0ICogQHBhcmFtIG9Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgZm9yIGFsbCBjb250ZXh0c1xuXHQgKi9cblx0X3JlcXVlc3RPYmplY3RzRnJvbVBhcmFtZXRlcnM6IGZ1bmN0aW9uKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8Q29udGV4dFtdW10+IHtcblx0XHQvLyBMb2FkIHRoZSByZXNwZWN0aXZlIG9iamVjdHMgZm9yIGFsbCBvYmplY3QgcGFnZXMgZm91bmQgaW4gYUV4dGVybmFsbHlOYXZpZ2FibGVQYWdlc1xuXHRcdGNvbnN0IGFDb250ZXh0UHJvbWlzZXMgPSBhU3RhcnR1cFBhZ2VzLm1hcChwYWdlSW5mbyA9PiB7XG5cdFx0XHRjb25zdCBhS2V5cyA9IHBhZ2VJbmZvLnNlbWFudGljS2V5cyB8fCBwYWdlSW5mby50ZWNobmljYWxLZXlzIHx8IFtdO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlciA9IHRoaXMuX2NyZWF0ZUZpbHRlckZyb21LZXlzKGFLZXlzLCBwYWdlSW5mby5kcmFmdE1vZGUsIG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cblx0XHRcdC8vIG9ubHkgcmVxdWVzdCBhIG1pbmltdW0gb2YgZmllbGRzIHRvIGJvb3N0IGJhY2tlbmQgcGVyZm9ybWFuY2Ugc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGV4aXN0c1xuXHRcdFx0Y29uc3Qgb0xpc3RCaW5kID0gb01vZGVsLmJpbmRMaXN0KHBhZ2VJbmZvLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb0ZpbHRlciwge1xuXHRcdFx0XHRcIiRzZWxlY3RcIjogYUtleXNcblx0XHRcdFx0XHQubWFwKGtleSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5Lm5hbWU7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIixcIilcblx0XHRcdH0gYXMgYW55KTtcblx0XHRcdHJldHVybiBvTGlzdEJpbmQucmVxdWVzdENvbnRleHRzKDAsIDIpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFDb250ZXh0UHJvbWlzZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgUGFnZUluZm8gZnJvbSBhIHJvdXRlIGlmIHRpJ3MgcmVhY2hhYmxlIGZyb20gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIG9Sb3V0ZSBUaGUgcm91dGVcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIGFwcCBtYW5pZmVzdCByb3V0aW5nIHNlY3Rpb25cblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBhcHAgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIHthbnl9IEEgcGFnZSBpbmZvIGlmIHRoZSBwYWdlIGlzIHJlYWNoYWJsZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlOiBmdW5jdGlvbihcblx0XHRvUm91dGU6IGFueSxcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBhbnksXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUGFnZUluZm8gfCB1bmRlZmluZWQge1xuXHRcdC8vIFJlbW92ZSB0cmFpbGluZyAnOj9xdWVyeTonIGFuZCAnLydcblx0XHRsZXQgc1BhdHRlcm46IHN0cmluZyA9IG9Sb3V0ZS5wYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcblxuXHRcdGlmICghc1BhdHRlcm4pIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7IC8vIElnbm9yZSBsZXZlbC0wIHJvdXRlcyAoTGlzdFJlcG9ydClcblx0XHR9XG5cblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoL1xcKFxce1teXFx9XSpcXH1cXCkvZywgXCIoIylcIik7IC8vIFJlcGxhY2Uga2V5cyB3aXRoICNcblxuXHRcdC8vIEdldCB0aGUgcmlnaHRtb3N0IHRhcmdldCBmb3IgdGhpcyByb3V0ZVxuXHRcdGNvbnN0IHNUYXJnZXROYW1lOiBzdHJpbmcgPSBBcnJheS5pc0FycmF5KG9Sb3V0ZS50YXJnZXQpID8gb1JvdXRlLnRhcmdldFtvUm91dGUudGFyZ2V0Lmxlbmd0aCAtIDFdIDogb1JvdXRlLnRhcmdldDtcblx0XHRjb25zdCBvVGFyZ2V0ID0gb01hbmlmZXN0Um91dGluZy50YXJnZXRzW3NUYXJnZXROYW1lXTtcblxuXHRcdGNvbnN0IGFQYXR0ZXJuU2VnbWVudHMgPSBzUGF0dGVybi5zcGxpdChcIi9cIik7XG5cdFx0Y29uc3QgcGFnZUxldmVsID0gYVBhdHRlcm5TZWdtZW50cy5sZW5ndGggLSAxO1xuXG5cdFx0aWYgKHBhZ2VMZXZlbCAhPT0gMCAmJiBvVGFyZ2V0Py5vcHRpb25zPy5zZXR0aW5ncz8uYWxsb3dEZWVwTGlua2luZyAhPT0gdHJ1ZSkge1xuXHRcdFx0Ly8gVGhlIGZpcnN0IGxldmVsIG9mIG9iamVjdCBwYWdlIGFsbG93cyBkZWVwIGxpbmtpbmcgYnkgZGVmYXVsdC5cblx0XHRcdC8vIE90aGVyd2lzZSwgdGhlIHRhcmdldCBtdXN0IGFsbG93IGRlZXAgbGlua2luZyBleHBsaWNpdGVseSBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoOiBzdHJpbmcgPVxuXHRcdFx0b1RhcmdldC5vcHRpb25zLnNldHRpbmdzLmNvbnRleHRQYXRoIHx8IChvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuZW50aXR5U2V0ICYmIFwiL1wiICsgb1RhcmdldC5vcHRpb25zLnNldHRpbmdzLmVudGl0eVNldCk7XG5cdFx0Y29uc3Qgb0VudGl0eVR5cGUgPSBzQ29udGV4dFBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lclwiICsgc0NvbnRleHRQYXRoICsgXCIvXCIpO1xuXG5cdFx0aWYgKCFvRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMgZm9yIHRoZSBlbnRpdHlcblx0XHRjb25zdCBhU2VtYW50aWNLZXlOYW1lczogYW55ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcIi8kRW50aXR5Q29udGFpbmVyXCIgKyBzQ29udGV4dFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCJcblx0XHQpO1xuXG5cdFx0Y29uc3QgYVNlbWFudGlja0tleXMgPSBhU2VtYW50aWNLZXlOYW1lc1xuXHRcdFx0PyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMoXG5cdFx0XHRcdFx0YVNlbWFudGljS2V5TmFtZXMubWFwKChzZW1LZXk6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNlbUtleS4kUHJvcGVydHlQYXRoIGFzIHN0cmluZztcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnNcblx0XHRcdCAgKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHQvLyBHZXQgdGhlIHRlY2huaWNhbCBrZXlzIG9ubHkgaWYgd2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMga2V5IHZhbHVlcywgYW5kIG9uIGZpcnN0IGxldmVsIE9QXG5cdFx0Y29uc3QgYVRlY2huaWNhbEtleXMgPVxuXHRcdFx0IWFTZW1hbnRpY2tLZXlzICYmIHBhZ2VMZXZlbCA9PT0gMCA/IHRoaXMuX2dldEtleXNGcm9tU3RhcnR1cFBhcmFtcyhvRW50aXR5VHlwZVtcIiRLZXlcIl0sIG9TdGFydHVwUGFyYW1ldGVycykgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoYVNlbWFudGlja0tleXMgPT09IHVuZGVmaW5lZCAmJiBhVGVjaG5pY2FsS2V5cyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBzZW1hbnRpYy90ZWNobmljYWwga2V5cyBpbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSBzdGFydHVwIHBhcmFtZXRlcnMgY29udGFpbiB2YWx1ZXMgZm9yIGFsbCBzZW1hbnRpYyBrZXlzIChvciB0ZWNobmljYWwga2V5cykgLS0+IHdlIGNhbiBzdG9yZSB0aGUgcGFnZSBpbmZvIGluIHRoZSBjb3JyZXNwb25kaW5nIGxldmVsXG5cdFx0Y29uc3QgZHJhZnRNb2RlID1cblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJcIiArIHNDb250ZXh0UGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgfHxcblx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXJcIiArIHNDb250ZXh0UGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIilcblx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdDogZmFsc2U7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogc1BhdHRlcm4sXG5cdFx0XHRjb250ZXh0UGF0aDogc0NvbnRleHRQYXRoLFxuXHRcdFx0ZHJhZnRNb2RlLFxuXHRcdFx0dGVjaG5pY2FsS2V5czogYVRlY2huaWNhbEtleXMsXG5cdFx0XHRzZW1hbnRpY0tleXM6IGFTZW1hbnRpY2tLZXlzLFxuXHRcdFx0dGFyZ2V0OiBzVGFyZ2V0TmFtZSxcblx0XHRcdHBhZ2VMZXZlbFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsIHBhZ2VzIHRoYXQgYWxsb3cgZGVlcGxpbmsgYW5kIHRoYXQgY2FuIGJlIHJlYWNoZWQgdXNpbmcgdGhlIHN0YXJ0dXAgcGFyYW1ldGVycy5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIHthbnl9IFRoZSByZWFjaGFibGUgcGFnZXNcblx0ICovXG5cdF9nZXRSZWFjaGFibGVQYWdlczogZnVuY3Rpb24ob01hbmlmZXN0Um91dGluZzogYW55LCBvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQYWdlSW5mb1tdW10ge1xuXHRcdGNvbnN0IGFSb3V0ZXM6IGFueVtdID0gb01hbmlmZXN0Um91dGluZy5yb3V0ZXM7XG5cdFx0Y29uc3QgbVBhZ2VzQnlMZXZlbDogUmVjb3JkPG51bWJlciwgUGFnZUluZm9bXT4gPSB7fTtcblxuXHRcdGFSb3V0ZXMuZm9yRWFjaChvUm91dGUgPT4ge1xuXHRcdFx0Y29uc3Qgb1BhZ2VJbmZvID0gdGhpcy5fZ2V0UmVhY2hhYmxlUGFnZUluZm9Gcm9tUm91dGUob1JvdXRlLCBvTWFuaWZlc3RSb3V0aW5nLCBvU3RhcnR1cFBhcmFtZXRlcnMsIG9NZXRhTW9kZWwpO1xuXG5cdFx0XHRpZiAob1BhZ2VJbmZvKSB7XG5cdFx0XHRcdGlmICghbVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXSkge1xuXHRcdFx0XHRcdG1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0gPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdLnB1c2gob1BhZ2VJbmZvKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEEgcGFnZSBpcyByZWFjaGFibGUgb25seSBpZiBhbGwgaXRzIHBhcmVudHMgYXJlIGFsc28gcmVhY2hhYmxlXG5cdFx0Ly8gU28gaWYgd2UgY291bGRuJ3QgZmluZCBhbnkgcGFnZXMgZm9yIGEgZ2l2ZW4gbGV2ZWwsIGFsbCBwYWdlcyB3aXRoIGEgaGlnaGVyIGxldmVsIHdvbid0IGJlIHJlYWNoYWJsZSBhbnl3YXlcblx0XHRjb25zdCBhUmVhY2hhYmxlUGFnZXM6IFBhZ2VJbmZvW11bXSA9IFtdO1xuXHRcdGxldCBsZXZlbCA9IDA7XG5cdFx0d2hpbGUgKG1QYWdlc0J5TGV2ZWxbbGV2ZWxdKSB7XG5cdFx0XHRhUmVhY2hhYmxlUGFnZXMucHVzaChtUGFnZXNCeUxldmVsW2xldmVsXSk7XG5cdFx0XHRsZXZlbCsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBhUmVhY2hhYmxlUGFnZXM7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbGlzdCBvZiBzdGFydHVwIHBhZ2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb01hbmlmZXN0Um91dGluZyBUaGUgcm91dGluZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHAgbWFuaWZlc3Rcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBtZXRhbW9kZWxcblx0ICogQHJldHVybnMge2FueX0gQW4gYXJyYXkgb2Ygc3RhcnR1cCBwYWdlIGluZm9zXG5cdCAqL1xuXHRfZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXM6IGZ1bmN0aW9uKG9NYW5pZmVzdFJvdXRpbmc6IGFueSwgb1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksIG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUGFnZUluZm9bXSB7XG5cdFx0Ly8gRmluZCBhbGwgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCB3aXRoIHRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0XHRjb25zdCBhUmVhY2hhYmxlUGFnZXMgPSB0aGlzLl9nZXRSZWFjaGFibGVQYWdlcyhvTWFuaWZlc3RSb3V0aW5nLCBvU3RhcnR1cFBhcmFtZXRlcnMsIG9NZXRhTW9kZWwpO1xuXG5cdFx0aWYgKGFSZWFjaGFibGVQYWdlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHQvLyBGaW5kIHRoZSBsb25nZXN0IHNlcXVlbmNlIG9mIHBhZ2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgKHJlY3Vyc2l2ZWx5KVxuXHRcdGxldCByZXN1bHQ6IFBhZ2VJbmZvW10gPSBbXTtcblx0XHRjb25zdCBjdXJyZW50OiBQYWdlSW5mb1tdID0gW107XG5cblx0XHRmdW5jdGlvbiBmaW5kUmVjdXJzaXZlKGxldmVsOiBudW1iZXIpIHtcblx0XHRcdGNvbnN0IGFDdXJyZW50TGV2ZWxQYWdlcyA9IGFSZWFjaGFibGVQYWdlc1tsZXZlbF07XG5cdFx0XHRjb25zdCBsYXN0UGFnZSA9IGN1cnJlbnQubGVuZ3RoID8gY3VycmVudFtjdXJyZW50Lmxlbmd0aCAtIDFdIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoYUN1cnJlbnRMZXZlbFBhZ2VzKSB7XG5cdFx0XHRcdGFDdXJyZW50TGV2ZWxQYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG5leHRQYWdlKSB7XG5cdFx0XHRcdFx0aWYgKCFsYXN0UGFnZSB8fCBuZXh0UGFnZS5wYXR0ZXJuLmluZGV4T2YobGFzdFBhZ2UucGF0dGVybikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBwYWdlIGF0IHRoZSBwcmV2aW91cyBsZXZlbCxcblx0XHRcdFx0XHRcdC8vIC0tPiB0aGVpciBwYXR0ZXJuIG11c3QgYmUgdGhlIHBhdHRlcm4gb2YgdGhlIHByZXZpb3VzIHBhZ2Ugd2l0aCBhbm90aGVyIHNlZ21lbnQgYXBwZW5kZWRcblx0XHRcdFx0XHRcdGN1cnJlbnQucHVzaChuZXh0UGFnZSk7XG5cdFx0XHRcdFx0XHRmaW5kUmVjdXJzaXZlKGxldmVsICsgMSk7XG5cdFx0XHRcdFx0XHRjdXJyZW50LnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VycmVudC5sZW5ndGggPiByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGN1cnJlbnQuc2xpY2UoKTsgLy8gV2UgaGF2ZSBmb3VuZCBhIHNlcXVlbmNlIGxvbmdlciB0aGFuIG91ciBwcmV2aW91cyBiZXN0IC0tPiBzdG9yZSBpdCBhcyB0aGUgbmV3IGxvbmdlc3Rcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaW5kUmVjdXJzaXZlKDApO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgc3RhcnR1cCBvYmplY3QgZnJvbSB0aGUgbGlzdCBvZiBwYWdlcyBhbmQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhU3RhcnR1cFBhZ2VzIFRoZSBwYWdlc1xuXHQgKiBAcGFyYW0gYUNvbnRleHRzIFRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdF9nZXREZWVwTGlua09iamVjdDogZnVuY3Rpb24oYVN0YXJ0dXBQYWdlczogUGFnZUluZm9bXSwgYUNvbnRleHRzOiBDb250ZXh0W10pOiB7IGhhc2g/OiBzdHJpbmc7IGNvbnRleHQ/OiBDb250ZXh0IH0ge1xuXHRcdGlmIChhQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4geyBjb250ZXh0OiBhQ29udGV4dHNbMF0gfTtcblx0XHR9IGVsc2UgaWYgKGFDb250ZXh0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBOYXZpZ2F0aW9uIHRvIGEgZGVlcGVyIGxldmVsIC0tPiB1c2UgdGhlIHBhdHRlcm4gb2YgdGhlIGRlZXBlc3Qgb2JqZWN0IHBhZ2Vcblx0XHRcdC8vIGFuZCByZXBsYWNlIHRoZSBwYXJhbWV0ZXJzIGJ5IHRoZSBJRCBmcm9tIHRoZSBjb250ZXh0c1xuXHRcdFx0bGV0IGhhc2ggPSBhU3RhcnR1cFBhZ2VzW2FTdGFydHVwUGFnZXMubGVuZ3RoIC0gMV0ucGF0dGVybjtcblx0XHRcdGFDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKG9Db250ZXh0KSB7XG5cdFx0XHRcdGhhc2ggPSBoYXNoLnJlcGxhY2UoXCIoIylcIiwgXCIoXCIgKyBvQ29udGV4dC5nZXRQYXRoKCkuc3BsaXQoXCIoXCIpWzFdKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4geyBoYXNoIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgc3RhcnR1cCBwYXJhbWV0ZXJzIGZvciBhIGRlZXBsaW5rIGNhc2UsIGZyb20gc3RhcnR1cCBwYXJhbWV0ZXJzIGFuZCByb3V0aW5nIGluZm9pcm1hdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdGdldERlZXBMaW5rU3RhcnR1cEhhc2g6IGZ1bmN0aW9uKFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IGFueSxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSxcblx0XHRvTW9kZWw6IE9EYXRhTW9kZWxcblx0KTogUHJvbWlzZTx7IGhhc2g/OiBzdHJpbmc7IGNvbnRleHQ/OiBDb250ZXh0IH0+IHtcblx0XHRsZXQgYVN0YXJ0dXBQYWdlczogUGFnZUluZm9bXTtcblxuXHRcdHJldHVybiBvTW9kZWxcblx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0LnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIilcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc2VtYW50aWMga2V5cyBhcmUgcHJlc2VudCBpbiB1cmwgcGFyYW1ldGVycyBmb3IgZXZlcnkgb2JqZWN0IHBhZ2UgYXQgZWFjaCBsZXZlbFxuXHRcdFx0XHRhU3RhcnR1cFBhZ2VzID0gdGhpcy5fZ2V0U3RhcnR1cFBhZ2VzRnJvbVN0YXJ0dXBQYXJhbXMob01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXG5cdFx0XHRcdHJldHVybiB0aGlzLl9yZXF1ZXN0T2JqZWN0c0Zyb21QYXJhbWV0ZXJzKGFTdGFydHVwUGFnZXMsIG9Nb2RlbCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFWYWx1ZXM6IENvbnRleHRbXVtdKSA9PiB7XG5cdFx0XHRcdGlmIChhVmFsdWVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBvbmx5IGdldCAxIGNvbnRleHQgcGVyIHByb21pc2UsIGFuZCBmbGF0dGVuIHRoZSBhcnJheVxuXHRcdFx0XHRcdGNvbnN0IGFDb250ZXh0czogQ29udGV4dFtdID0gW107XG5cdFx0XHRcdFx0YVZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uKGFGb3VuZENvbnRleHRzKSB7XG5cdFx0XHRcdFx0XHRpZiAoYUZvdW5kQ29udGV4dHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0XHRcdGFDb250ZXh0cy5wdXNoKGFGb3VuZENvbnRleHRzWzBdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHJldHVybiBhQ29udGV4dHMubGVuZ3RoID09PSBhVmFsdWVzLmxlbmd0aCA/IHRoaXMuX2dldERlZXBMaW5rT2JqZWN0KGFTdGFydHVwUGFnZXMsIGFDb250ZXh0cykgOiB7fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBuZXcgaGFzaCBiYXNlZCBvbiB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlciB2YWx1ZXMgKG1hcCBwYXJhbWV0ZXIgbmFtZSAtPiBhcnJheSBvZiB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBzQ29udGV4dFBhdGggVGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHN0YXJ0dXAgb2YgdGhlIGFwcCAoZ2VuZXJhbGx5IHRoZSBwYXRoIHRvIHRoZSBtYWluIGVudGl0eSBzZXQpXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGEgbW9kZWxcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGhhc2ggdG8gbmF2aWdhdGUgdG8sIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGVyZSdzIG5vIG5lZWQgdG8gbmF2aWdhdGVcblx0ICovXG5cdGdldENyZWF0ZVN0YXJ0dXBIYXNoOiBmdW5jdGlvbihcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSxcblx0XHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRvUm91dGVyOiBSb3V0ZXIsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxTdHJpbmc+IHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiQFwiKS50aGVuKChvRW50aXR5U2V0QW5ub3RhdGlvbnM6IGFueSkgPT4ge1xuXHRcdFx0bGV0IHNNZXRhUGF0aCA9IFwiXCI7XG5cdFx0XHRsZXQgYkNyZWF0YWJsZSA9IHRydWU7XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gJiZcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl1bXCJOZXdBY3Rpb25cIl1cblx0XHRcdCkge1xuXHRcdFx0XHRzTWV0YVBhdGggPSBzQ29udGV4dFBhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gJiZcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXVtcIk5ld0FjdGlvblwiXVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNNZXRhUGF0aCA9XG5cdFx0XHRcdFx0c0NvbnRleHRQYXRoICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkL05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNNZXRhUGF0aCkge1xuXHRcdFx0XHRjb25zdCBiTmV3QWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc01ldGFQYXRoKTtcblx0XHRcdFx0aWYgKGJOZXdBY3Rpb25PcGVyYXRpb25BdmFpbGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0YkNyZWF0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvSW5zZXJ0UmVzdHJpY3Rpb25zID0gb0VudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdO1xuXHRcdFx0XHRpZiAob0luc2VydFJlc3RyaWN0aW9ucyAmJiBvSW5zZXJ0UmVzdHJpY3Rpb25zLkluc2VydGFibGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0YkNyZWF0YWJsZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoYkNyZWF0YWJsZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXREZWZhdWx0Q3JlYXRlSGFzaChvU3RhcnR1cFBhcmFtZXRlcnMsIHNDb250ZXh0UGF0aCwgb1JvdXRlcik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgaGFzaCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlciB2YWx1ZXMgKG1hcCBwYXJhbWV0ZXIgbmFtZSAtPiBhcnJheSBvZiB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBzQ29udGV4dFBhdGggVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgZW50aXR5IHNldCB0byBiZSB1c2VkIGZvciB0aGUgY3JlYXRpb25cblx0ICogQHBhcmFtIG9Sb3V0ZXIgVGhlIHJvdXRlciBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBUaGUgaGFzaFxuXHQgKi9cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2g6IGZ1bmN0aW9uKG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBzQ29udGV4dFBhdGg6IHN0cmluZywgb1JvdXRlcjogUm91dGVyKTogc3RyaW5nIHtcblx0XHRsZXQgc0RlZmF1bHRDcmVhdGVIYXNoID1cblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSA/IChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXSBhcyBzdHJpbmcpIDogXCJjcmVhdGVcIjtcblx0XHRsZXQgc0hhc2ggPSBcIlwiO1xuXG5cdFx0c0RlZmF1bHRDcmVhdGVIYXNoID1cblx0XHRcdHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSAhPT0gLTEgJiYgc0RlZmF1bHRDcmVhdGVIYXNoLmxlbmd0aCA+IHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSArIDFcblx0XHRcdFx0PyBzRGVmYXVsdENyZWF0ZUhhc2guc3Vic3RyKDAsIHNEZWZhdWx0Q3JlYXRlSGFzaC5pbmRleE9mKFwiOlwiKSlcblx0XHRcdFx0OiBcImNyZWF0ZVwiO1xuXHRcdHNIYXNoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygxKSArIFwiKC4uLik/aS1hY3Rpb249XCIgKyBzRGVmYXVsdENyZWF0ZUhhc2g7XG5cdFx0aWYgKG9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNIYXNoKSkge1xuXHRcdFx0cmV0dXJuIHNIYXNoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyByb3V0ZSBtYXRjaCBmb3IgY3JlYXRpbmcgYSBuZXcgXCIgKyBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpKTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXJ0dXBIZWxwZXI7XG4iXX0=
373
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcFN0YXJ0dXBIZWxwZXIudHMiXSwibmFtZXMiOlsiQXBwU3RhcnR1cEhlbHBlciIsIl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMiLCJhS2V5TmFtZXMiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJiQWxsRm91bmQiLCJhS2V5cyIsIm1hcCIsIm5hbWUiLCJsZW5ndGgiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIl9jcmVhdGVGaWx0ZXJGcm9tS2V5cyIsImJEcmFmdE1vZGUiLCJvTWV0YU1vZGVsIiwiYkZpbHRlckNhc2VTZW5zaXRpdmUiLCJNb2RlbEhlbHBlciIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsImJGaWx0ZXJPbkFjdGl2ZUVudGl0eSIsImFGaWx0ZXJzIiwia2V5IiwiRmlsdGVyIiwicGF0aCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSIsInZhbHVlMSIsImNhc2VTZW5zaXRpdmUiLCJvRHJhZnRGaWx0ZXIiLCJmaWx0ZXJzIiwiYW5kIiwicHVzaCIsIl9yZXF1ZXN0T2JqZWN0c0Zyb21QYXJhbWV0ZXJzIiwiYVN0YXJ0dXBQYWdlcyIsIm9Nb2RlbCIsImFDb250ZXh0UHJvbWlzZXMiLCJwYWdlSW5mbyIsInNlbWFudGljS2V5cyIsInRlY2huaWNhbEtleXMiLCJvRmlsdGVyIiwiZHJhZnRNb2RlIiwiZ2V0TWV0YU1vZGVsIiwib0xpc3RCaW5kIiwiYmluZExpc3QiLCJjb250ZXh0UGF0aCIsImpvaW4iLCJyZXF1ZXN0Q29udGV4dHMiLCJQcm9taXNlIiwiYWxsIiwiX2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlIiwib1JvdXRlIiwib01hbmlmZXN0Um91dGluZyIsInNQYXR0ZXJuIiwicGF0dGVybiIsInJlcGxhY2UiLCJzVGFyZ2V0TmFtZSIsIkFycmF5IiwiaXNBcnJheSIsInRhcmdldCIsIm9UYXJnZXQiLCJ0YXJnZXRzIiwiYVBhdHRlcm5TZWdtZW50cyIsInNwbGl0IiwicGFnZUxldmVsIiwib3B0aW9ucyIsInNldHRpbmdzIiwiYWxsb3dEZWVwTGlua2luZyIsInNDb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm9FbnRpdHlUeXBlIiwiZ2V0T2JqZWN0IiwiYVNlbWFudGljS2V5TmFtZXMiLCJhU2VtYW50aWNrS2V5cyIsInNlbUtleSIsIiRQcm9wZXJ0eVBhdGgiLCJhVGVjaG5pY2FsS2V5cyIsIl9nZXRSZWFjaGFibGVQYWdlcyIsImFSb3V0ZXMiLCJyb3V0ZXMiLCJtUGFnZXNCeUxldmVsIiwiZm9yRWFjaCIsIm9QYWdlSW5mbyIsImFSZWFjaGFibGVQYWdlcyIsImxldmVsIiwiX2dldFN0YXJ0dXBQYWdlc0Zyb21TdGFydHVwUGFyYW1zIiwicmVzdWx0IiwiY3VycmVudCIsImZpbmRSZWN1cnNpdmUiLCJhQ3VycmVudExldmVsUGFnZXMiLCJsYXN0UGFnZSIsIm5leHRQYWdlIiwiaW5kZXhPZiIsInBvcCIsInNsaWNlIiwiX2dldERlZXBMaW5rT2JqZWN0IiwiYUNvbnRleHRzIiwiY29udGV4dCIsImhhc2giLCJvQ29udGV4dCIsImdldFBhdGgiLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJhVmFsdWVzIiwiYUZvdW5kQ29udGV4dHMiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsIm9Sb3V0ZXIiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJzTWV0YVBhdGgiLCJiQ3JlYXRhYmxlIiwiYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnNlcnRSZXN0cmljdGlvbnMiLCJJbnNlcnRhYmxlIiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJzRGVmYXVsdENyZWF0ZUhhc2giLCJwcmVmZXJyZWRNb2RlIiwic0hhc2giLCJzdWJzdHIiLCJzdWJzdHJpbmciLCJnZXRSb3V0ZUluZm9CeUhhc2giLCJFcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQXFCQSxNQUFNQSxnQkFBZ0IsR0FBRztBQUN4QjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FB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a0JBQWtCLENBQUN6RyxNQUFuQixHQUE0QnlHLGtCQUFrQixDQUFDdkIsT0FBbkIsQ0FBMkIsR0FBM0IsSUFBa0MsQ0FBeEcsR0FDR3VCLGtCQUFrQixDQUFDRyxNQUFuQixDQUEwQixDQUExQixFQUE2Qkgsa0JBQWtCLENBQUN2QixPQUFuQixDQUEyQixHQUEzQixDQUE3QixDQURILEdBRUcsUUFISjtBQUlBeUIsTUFBQUEsS0FBSyxhQUFNakQsWUFBWSxDQUFDbUQsU0FBYixDQUF1QixDQUF2QixDQUFOLDRCQUFpREosa0JBQWpELENBQUw7O0FBQ0EsVUFBSVIsT0FBTyxDQUFDYSxrQkFBUixDQUEyQkgsS0FBM0IsQ0FBSixFQUF1QztBQUN0QyxlQUFPQSxLQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ04sY0FBTSxJQUFJSSxLQUFKLDZDQUErQ3JELFlBQVksQ0FBQ21ELFNBQWIsQ0FBdUIsQ0FBdkIsQ0FBL0MsRUFBTjtBQUNBO0FBQ0Q7QUFuWXVCLEdBQXpCO1NBc1llckgsZ0IiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwiLi9Nb2RlbEhlbHBlclwiO1xuXG50eXBlIFZhbHVlZEtleSA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHR2YWx1ZTogc3RyaW5nO1xufTtcblxudHlwZSBQYWdlSW5mbyA9IHtcblx0cGF0dGVybjogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRkcmFmdE1vZGU6IEJvb2xlYW47XG5cdHRlY2huaWNhbEtleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHRzZW1hbnRpY0tleXM6IFZhbHVlZEtleVtdIHwgdW5kZWZpbmVkO1xuXHR0YXJnZXQ6IHN0cmluZztcblx0cGFnZUxldmVsOiBudW1iZXI7XG59O1xuXG5jb25zdCBBcHBTdGFydHVwSGVscGVyID0ge1xuXHQvKipcblx0ICogUmV0cmlldmVzIGEgc2V0IG9mIGtleSB2YWx1ZXMgZnJvbSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhS2V5TmFtZXMgVGhlIGFycmF5IG9mIGtleSBuYW1lc1xuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMgQW4gYXJyYXkgb2YgcGFpcnMgXFx7bmFtZSwgdmFsdWVcXH0gaWYgYWxsIGtleSB2YWx1ZXMgY291bGQgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVycywgdW5kZWZpbmVkIG90aGVyd2lzZVxuXHQgKi9cblx0X2dldEtleXNGcm9tU3RhcnR1cFBhcmFtczogZnVuY3Rpb24gKGFLZXlOYW1lczogc3RyaW5nW10sIG9TdGFydHVwUGFyYW1ldGVyczogYW55KTogVmFsdWVkS2V5W10gfCB1bmRlZmluZWQge1xuXHRcdGxldCBiQWxsRm91bmQgPSB0cnVlO1xuXHRcdGNvbnN0IGFLZXlzID0gYUtleU5hbWVzLm1hcCgobmFtZSkgPT4ge1xuXHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVyc1tuYW1lXSAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbbmFtZV0ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdHJldHVybiB7IG5hbWUsIHZhbHVlOiBvU3RhcnR1cFBhcmFtZXRlcnNbbmFtZV1bMF0gYXMgc3RyaW5nIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBIHVuaXF1ZSBrZXkgdmFsdWUgY291bGRuJ3QgYmUgZm91bmQgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0XHRiQWxsRm91bmQgPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuIHsgbmFtZSwgdmFsdWU6IFwiXCIgfTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiBiQWxsRm91bmQgPyBhS2V5cyA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGZpbHRlciBmcm9tIGEgbGlzdCBvZiBrZXkgdmFsdWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0gYUtleXMgQXJyYXkgb2Ygc2VtYW50aWMga2V5cyBvciB0ZWNobmljYWwga2V5cyAod2l0aCB2YWx1ZXMpXG5cdCAqIEBwYXJhbSBiRHJhZnRNb2RlIFRydWUgaWYgdGhlIGVudGl0eSBzdXBwb3J0cyBkcmFmdCBtb2RlXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsIFRoZSBtZXRhbW9kZWxcblx0ICogQHJldHVybnMgVGhlIGZpbHRlclxuXHQgKi9cblx0X2NyZWF0ZUZpbHRlckZyb21LZXlzOiBmdW5jdGlvbiAoYUtleXM6IFZhbHVlZEtleVtdLCBiRHJhZnRNb2RlOiBCb29sZWFuLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpbHRlciB7XG5cdFx0Y29uc3QgYkZpbHRlckNhc2VTZW5zaXRpdmUgPSBNb2RlbEhlbHBlci5pc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUob01ldGFNb2RlbCk7XG5cblx0XHRsZXQgYkZpbHRlck9uQWN0aXZlRW50aXR5ID0gZmFsc2U7XG5cdFx0Y29uc3QgYUZpbHRlcnMgPSBhS2V5cy5tYXAoKGtleSkgPT4ge1xuXHRcdFx0aWYgKGtleS5uYW1lID09PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0YkZpbHRlck9uQWN0aXZlRW50aXR5ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdFx0cGF0aDoga2V5Lm5hbWUsXG5cdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0dmFsdWUxOiBrZXkudmFsdWUsXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IGJGaWx0ZXJDYXNlU2Vuc2l0aXZlXG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRpZiAoYkRyYWZ0TW9kZSAmJiAhYkZpbHRlck9uQWN0aXZlRW50aXR5KSB7XG5cdFx0XHRjb25zdCBvRHJhZnRGaWx0ZXIgPSBuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogW25ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBcIkVRXCIsIGZhbHNlKSwgbmV3IEZpbHRlcihcIlNpYmxpbmdFbnRpdHkvSXNBY3RpdmVFbnRpdHlcIiwgXCJFUVwiLCBudWxsKV0sXG5cdFx0XHRcdGFuZDogZmFsc2Vcblx0XHRcdH0pO1xuXHRcdFx0YUZpbHRlcnMucHVzaChvRHJhZnRGaWx0ZXIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgRmlsdGVyKGFGaWx0ZXJzLCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTG9hZHMgYWxsIGNvbnRleHRzIGZvciBhIGxpc3Qgb2YgcGFnZSBpbmZvcy5cblx0ICpcblx0ICogQHBhcmFtIGFTdGFydHVwUGFnZXMgVGhlIGxpc3Qgb2YgcGFnZSBpbmZvc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIEEgUHJvbWlzZSBmb3IgYWxsIGNvbnRleHRzXG5cdCAqL1xuXHRfcmVxdWVzdE9iamVjdHNGcm9tUGFyYW1ldGVyczogZnVuY3Rpb24gKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIG9Nb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8Q29udGV4dFtdW10+IHtcblx0XHQvLyBMb2FkIHRoZSByZXNwZWN0aXZlIG9iamVjdHMgZm9yIGFsbCBvYmplY3QgcGFnZXMgZm91bmQgaW4gYUV4dGVybmFsbHlOYXZpZ2FibGVQYWdlc1xuXHRcdGNvbnN0IGFDb250ZXh0UHJvbWlzZXMgPSBhU3RhcnR1cFBhZ2VzLm1hcCgocGFnZUluZm8pID0+IHtcblx0XHRcdGNvbnN0IGFLZXlzID0gcGFnZUluZm8uc2VtYW50aWNLZXlzIHx8IHBhZ2VJbmZvLnRlY2huaWNhbEtleXMgfHwgW107XG5cdFx0XHRjb25zdCBvRmlsdGVyID0gdGhpcy5fY3JlYXRlRmlsdGVyRnJvbUtleXMoYUtleXMsIHBhZ2VJbmZvLmRyYWZ0TW9kZSwgb01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblxuXHRcdFx0Ly8gb25seSByZXF1ZXN0IGEgbWluaW11bSBvZiBmaWVsZHMgdG8gYm9vc3QgYmFja2VuZCBwZXJmb3JtYW5jZSBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCB0byBjaGVjayBpZiBhbiBvYmplY3QgZXhpc3RzXG5cdFx0XHRjb25zdCBvTGlzdEJpbmQgPSBvTW9kZWwuYmluZExpc3QocGFnZUluZm8uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBvRmlsdGVyLCB7XG5cdFx0XHRcdFwiJHNlbGVjdFwiOiBhS2V5c1xuXHRcdFx0XHRcdC5tYXAoKGtleSkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGtleS5uYW1lO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIsXCIpXG5cdFx0XHR9IGFzIGFueSk7XG5cdFx0XHRyZXR1cm4gb0xpc3RCaW5kLnJlcXVlc3RDb250ZXh0cygwLCAyKTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhQ29udGV4dFByb21pc2VzKTtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIFBhZ2VJbmZvIGZyb20gYSByb3V0ZSBpZiB0aSdzIHJlYWNoYWJsZSBmcm9tIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGUgVGhlIHJvdXRlXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSBhcHAgbWFuaWZlc3Qgcm91dGluZyBzZWN0aW9uXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgYXBwIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBBIHBhZ2UgaW5mbyBpZiB0aGUgcGFnZSBpcyByZWFjaGFibGUsIHVuZGVmaW5lZCBvdGhlcndpc2Vcblx0ICovXG5cdF9nZXRSZWFjaGFibGVQYWdlSW5mb0Zyb21Sb3V0ZTogZnVuY3Rpb24gKFxuXHRcdG9Sb3V0ZTogYW55LFxuXHRcdG9NYW5pZmVzdFJvdXRpbmc6IGFueSxcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSxcblx0XHRvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbFxuXHQpOiBQYWdlSW5mbyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gUmVtb3ZlIHRyYWlsaW5nICc6P3F1ZXJ5OicgYW5kICcvJ1xuXHRcdGxldCBzUGF0dGVybjogc3RyaW5nID0gb1JvdXRlLnBhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuXG5cdFx0aWYgKCFzUGF0dGVybikge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDsgLy8gSWdub3JlIGxldmVsLTAgcm91dGVzIChMaXN0UmVwb3J0KVxuXHRcdH1cblxuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZSgvXFwoXFx7W15cXH1dKlxcfVxcKS9nLCBcIigjKVwiKTsgLy8gUmVwbGFjZSBrZXlzIHdpdGggI1xuXG5cdFx0Ly8gR2V0IHRoZSByaWdodG1vc3QgdGFyZ2V0IGZvciB0aGlzIHJvdXRlXG5cdFx0Y29uc3Qgc1RhcmdldE5hbWU6IHN0cmluZyA9IEFycmF5LmlzQXJyYXkob1JvdXRlLnRhcmdldCkgPyBvUm91dGUudGFyZ2V0W29Sb3V0ZS50YXJnZXQubGVuZ3RoIC0gMV0gOiBvUm91dGUudGFyZ2V0O1xuXHRcdGNvbnN0IG9UYXJnZXQgPSBvTWFuaWZlc3RSb3V0aW5nLnRhcmdldHNbc1RhcmdldE5hbWVdO1xuXG5cdFx0Y29uc3QgYVBhdHRlcm5TZWdtZW50cyA9IHNQYXR0ZXJuLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBwYWdlTGV2ZWwgPSBhUGF0dGVyblNlZ21lbnRzLmxlbmd0aCAtIDE7XG5cblx0XHRpZiAocGFnZUxldmVsICE9PSAwICYmIG9UYXJnZXQ/Lm9wdGlvbnM/LnNldHRpbmdzPy5hbGxvd0RlZXBMaW5raW5nICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBUaGUgZmlyc3QgbGV2ZWwgb2Ygb2JqZWN0IHBhZ2UgYWxsb3dzIGRlZXAgbGlua2luZyBieSBkZWZhdWx0LlxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGUgdGFyZ2V0IG11c3QgYWxsb3cgZGVlcCBsaW5raW5nIGV4cGxpY2l0ZWx5IGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRjb25zdCBzQ29udGV4dFBhdGg6IHN0cmluZyA9XG5cdFx0XHRvVGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MuY29udGV4dFBhdGggfHwgKG9UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5lbnRpdHlTZXQgJiYgYC8ke29UYXJnZXQub3B0aW9ucy5zZXR0aW5ncy5lbnRpdHlTZXR9YCk7XG5cdFx0Y29uc3Qgb0VudGl0eVR5cGUgPSBzQ29udGV4dFBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L2ApO1xuXG5cdFx0aWYgKCFvRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBHZXQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMgZm9yIHRoZSBlbnRpdHlcblx0XHRjb25zdCBhU2VtYW50aWNLZXlOYW1lczogYW55ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYC8kRW50aXR5Q29udGFpbmVyJHtzQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgKTtcblxuXHRcdGNvbnN0IGFTZW1hbnRpY2tLZXlzID0gYVNlbWFudGljS2V5TmFtZXNcblx0XHRcdD8gdGhpcy5fZ2V0S2V5c0Zyb21TdGFydHVwUGFyYW1zKFxuXHRcdFx0XHRcdGFTZW1hbnRpY0tleU5hbWVzLm1hcCgoc2VtS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBzZW1LZXkuJFByb3BlcnR5UGF0aCBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gR2V0IHRoZSB0ZWNobmljYWwga2V5cyBvbmx5IGlmIHdlIGNvdWxkbid0IGZpbmQgdGhlIHNlbWFudGljIGtleSB2YWx1ZXMsIGFuZCBvbiBmaXJzdCBsZXZlbCBPUFxuXHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID1cblx0XHRcdCFhU2VtYW50aWNrS2V5cyAmJiBwYWdlTGV2ZWwgPT09IDAgPyB0aGlzLl9nZXRLZXlzRnJvbVN0YXJ0dXBQYXJhbXMob0VudGl0eVR5cGVbXCIkS2V5XCJdLCBvU3RhcnR1cFBhcmFtZXRlcnMpIDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFTZW1hbnRpY2tLZXlzID09PSB1bmRlZmluZWQgJiYgYVRlY2huaWNhbEtleXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Ly8gV2UgY291bGRuJ3QgZmluZCB0aGUgc2VtYW50aWMvdGVjaG5pY2FsIGtleXMgaW4gdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGNvbnRhaW4gdmFsdWVzIGZvciBhbGwgc2VtYW50aWMga2V5cyAob3IgdGVjaG5pY2FsIGtleXMpIC0tPiB3ZSBjYW4gc3RvcmUgdGhlIHBhZ2UgaW5mbyBpbiB0aGUgY29ycmVzcG9uZGluZyBsZXZlbFxuXHRcdGNvbnN0IGRyYWZ0TW9kZSA9XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIHx8XG5cdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgLyRFbnRpdHlDb250YWluZXIke3NDb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZWApXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IHNQYXR0ZXJuLFxuXHRcdFx0Y29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdGRyYWZ0TW9kZSxcblx0XHRcdHRlY2huaWNhbEtleXM6IGFUZWNobmljYWxLZXlzLFxuXHRcdFx0c2VtYW50aWNLZXlzOiBhU2VtYW50aWNrS2V5cyxcblx0XHRcdHRhcmdldDogc1RhcmdldE5hbWUsXG5cdFx0XHRwYWdlTGV2ZWxcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbCBwYWdlcyB0aGF0IGFsbG93IGRlZXBsaW5rIGFuZCB0aGF0IGNhbiBiZSByZWFjaGVkIHVzaW5nIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RSb3V0aW5nIFRoZSByb3V0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcCBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1N0YXJ0dXBQYXJhbWV0ZXJzIFRoZSBzdGFydHVwIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVhY2hhYmxlIHBhZ2VzXG5cdCAqL1xuXHRfZ2V0UmVhY2hhYmxlUGFnZXM6IGZ1bmN0aW9uIChvTWFuaWZlc3RSb3V0aW5nOiBhbnksIG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFBhZ2VJbmZvW11bXSB7XG5cdFx0Y29uc3QgYVJvdXRlczogYW55W10gPSBvTWFuaWZlc3RSb3V0aW5nLnJvdXRlcztcblx0XHRjb25zdCBtUGFnZXNCeUxldmVsOiBSZWNvcmQ8bnVtYmVyLCBQYWdlSW5mb1tdPiA9IHt9O1xuXG5cdFx0YVJvdXRlcy5mb3JFYWNoKChvUm91dGUpID0+IHtcblx0XHRcdGNvbnN0IG9QYWdlSW5mbyA9IHRoaXMuX2dldFJlYWNoYWJsZVBhZ2VJbmZvRnJvbVJvdXRlKG9Sb3V0ZSwgb01hbmlmZXN0Um91dGluZywgb1N0YXJ0dXBQYXJhbWV0ZXJzLCBvTWV0YU1vZGVsKTtcblxuXHRcdFx0aWYgKG9QYWdlSW5mbykge1xuXHRcdFx0XHRpZiAoIW1QYWdlc0J5TGV2ZWxbb1BhZ2VJbmZvLnBhZ2VMZXZlbF0pIHtcblx0XHRcdFx0XHRtUGFnZXNCeUxldmVsW29QYWdlSW5mby5wYWdlTGV2ZWxdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0bVBhZ2VzQnlMZXZlbFtvUGFnZUluZm8ucGFnZUxldmVsXS5wdXNoKG9QYWdlSW5mbyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBBIHBhZ2UgaXMgcmVhY2hhYmxlIG9ubHkgaWYgYWxsIGl0cyBwYXJlbnRzIGFyZSBhbHNvIHJlYWNoYWJsZVxuXHRcdC8vIFNvIGlmIHdlIGNvdWxkbid0IGZpbmQgYW55IHBhZ2VzIGZvciBhIGdpdmVuIGxldmVsLCBhbGwgcGFnZXMgd2l0aCBhIGhpZ2hlciBsZXZlbCB3b24ndCBiZSByZWFjaGFibGUgYW55d2F5XG5cdFx0Y29uc3QgYVJlYWNoYWJsZVBhZ2VzOiBQYWdlSW5mb1tdW10gPSBbXTtcblx0XHRsZXQgbGV2ZWwgPSAwO1xuXHRcdHdoaWxlIChtUGFnZXNCeUxldmVsW2xldmVsXSkge1xuXHRcdFx0YVJlYWNoYWJsZVBhZ2VzLnB1c2gobVBhZ2VzQnlMZXZlbFtsZXZlbF0pO1xuXHRcdFx0bGV2ZWwrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gYVJlYWNoYWJsZVBhZ2VzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxpc3Qgb2Ygc3RhcnR1cCBwYWdlcy5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YW1vZGVsXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0YXJ0dXAgcGFnZSBpbmZvc1xuXHQgKi9cblx0X2dldFN0YXJ0dXBQYWdlc0Zyb21TdGFydHVwUGFyYW1zOiBmdW5jdGlvbiAob01hbmlmZXN0Um91dGluZzogYW55LCBvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBQYWdlSW5mb1tdIHtcblx0XHQvLyBGaW5kIGFsbCBwYWdlcyB0aGF0IGNhbiBiZSByZWFjaGVkIHdpdGggdGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHRcdGNvbnN0IGFSZWFjaGFibGVQYWdlcyA9IHRoaXMuX2dldFJlYWNoYWJsZVBhZ2VzKG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01ldGFNb2RlbCk7XG5cblx0XHRpZiAoYVJlYWNoYWJsZVBhZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdC8vIEZpbmQgdGhlIGxvbmdlc3Qgc2VxdWVuY2Ugb2YgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCAocmVjdXJzaXZlbHkpXG5cdFx0bGV0IHJlc3VsdDogUGFnZUluZm9bXSA9IFtdO1xuXHRcdGNvbnN0IGN1cnJlbnQ6IFBhZ2VJbmZvW10gPSBbXTtcblxuXHRcdGZ1bmN0aW9uIGZpbmRSZWN1cnNpdmUobGV2ZWw6IG51bWJlcikge1xuXHRcdFx0Y29uc3QgYUN1cnJlbnRMZXZlbFBhZ2VzID0gYVJlYWNoYWJsZVBhZ2VzW2xldmVsXTtcblx0XHRcdGNvbnN0IGxhc3RQYWdlID0gY3VycmVudC5sZW5ndGggPyBjdXJyZW50W2N1cnJlbnQubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChhQ3VycmVudExldmVsUGFnZXMpIHtcblx0XHRcdFx0YUN1cnJlbnRMZXZlbFBhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG5leHRQYWdlKSB7XG5cdFx0XHRcdFx0aWYgKCFsYXN0UGFnZSB8fCBuZXh0UGFnZS5wYXR0ZXJuLmluZGV4T2YobGFzdFBhZ2UucGF0dGVybikgPT09IDApIHtcblx0XHRcdFx0XHRcdC8vIFdlIG9ubHkgY29uc2lkZXIgcGFnZXMgdGhhdCBjYW4gYmUgcmVhY2hlZCBmcm9tIHRoZSBwYWdlIGF0IHRoZSBwcmV2aW91cyBsZXZlbCxcblx0XHRcdFx0XHRcdC8vIC0tPiB0aGVpciBwYXR0ZXJuIG11c3QgYmUgdGhlIHBhdHRlcm4gb2YgdGhlIHByZXZpb3VzIHBhZ2Ugd2l0aCBhbm90aGVyIHNlZ21lbnQgYXBwZW5kZWRcblx0XHRcdFx0XHRcdGN1cnJlbnQucHVzaChuZXh0UGFnZSk7XG5cdFx0XHRcdFx0XHRmaW5kUmVjdXJzaXZlKGxldmVsICsgMSk7XG5cdFx0XHRcdFx0XHRjdXJyZW50LnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY3VycmVudC5sZW5ndGggPiByZXN1bHQubGVuZ3RoKSB7XG5cdFx0XHRcdHJlc3VsdCA9IGN1cnJlbnQuc2xpY2UoKTsgLy8gV2UgaGF2ZSBmb3VuZCBhIHNlcXVlbmNlIGxvbmdlciB0aGFuIG91ciBwcmV2aW91cyBiZXN0IC0tPiBzdG9yZSBpdCBhcyB0aGUgbmV3IGxvbmdlc3Rcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaW5kUmVjdXJzaXZlKDApO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgc3RhcnR1cCBvYmplY3QgZnJvbSB0aGUgbGlzdCBvZiBwYWdlcyBhbmQgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBhU3RhcnR1cFBhZ2VzIFRoZSBwYWdlc1xuXHQgKiBAcGFyYW0gYUNvbnRleHRzIFRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdF9nZXREZWVwTGlua09iamVjdDogZnVuY3Rpb24gKGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW10sIGFDb250ZXh0czogQ29udGV4dFtdKTogeyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9IHtcblx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIHsgY29udGV4dDogYUNvbnRleHRzWzBdIH07XG5cdFx0fSBlbHNlIGlmIChhQ29udGV4dHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gTmF2aWdhdGlvbiB0byBhIGRlZXBlciBsZXZlbCAtLT4gdXNlIHRoZSBwYXR0ZXJuIG9mIHRoZSBkZWVwZXN0IG9iamVjdCBwYWdlXG5cdFx0XHQvLyBhbmQgcmVwbGFjZSB0aGUgcGFyYW1ldGVycyBieSB0aGUgSUQgZnJvbSB0aGUgY29udGV4dHNcblx0XHRcdGxldCBoYXNoID0gYVN0YXJ0dXBQYWdlc1thU3RhcnR1cFBhZ2VzLmxlbmd0aCAtIDFdLnBhdHRlcm47XG5cdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQpIHtcblx0XHRcdFx0aGFzaCA9IGhhc2gucmVwbGFjZShcIigjKVwiLCBgKCR7b0NvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiKFwiKVsxXX1gKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4geyBoYXNoIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB7fTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgc3RhcnR1cCBwYXJhbWV0ZXJzIGZvciBhIGRlZXBsaW5rIGNhc2UsIGZyb20gc3RhcnR1cCBwYXJhbWV0ZXJzIGFuZCByb3V0aW5nIGluZm9pcm1hdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIG9NYW5pZmVzdFJvdXRpbmcgVGhlIHJvdXRpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwIG1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gb01vZGVsIFRoZSBPRGF0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgYSBoYXNoIG9yIGEgY29udGV4dCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgb2JqZWN0IGlmIG5vIGRlZXAgbGluayB3YXMgZm91bmRcblx0ICovXG5cdGdldERlZXBMaW5rU3RhcnR1cEhhc2g6IGZ1bmN0aW9uIChcblx0XHRvTWFuaWZlc3RSb3V0aW5nOiBhbnksXG5cdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksXG5cdFx0b01vZGVsOiBPRGF0YU1vZGVsXG5cdCk6IFByb21pc2U8eyBoYXNoPzogc3RyaW5nOyBjb250ZXh0PzogQ29udGV4dCB9PiB7XG5cdFx0bGV0IGFTdGFydHVwUGFnZXM6IFBhZ2VJbmZvW107XG5cblx0XHRyZXR1cm4gb01vZGVsXG5cdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdC5yZXF1ZXN0T2JqZWN0KFwiLyRFbnRpdHlDb250YWluZXIvXCIpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIHNlbWFudGljIGtleXMgYXJlIHByZXNlbnQgaW4gdXJsIHBhcmFtZXRlcnMgZm9yIGV2ZXJ5IG9iamVjdCBwYWdlIGF0IGVhY2ggbGV2ZWxcblx0XHRcdFx0YVN0YXJ0dXBQYWdlcyA9IHRoaXMuX2dldFN0YXJ0dXBQYWdlc0Zyb21TdGFydHVwUGFyYW1zKG9NYW5pZmVzdFJvdXRpbmcsIG9TdGFydHVwUGFyYW1ldGVycywgb01vZGVsLmdldE1ldGFNb2RlbCgpKTtcblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fcmVxdWVzdE9iamVjdHNGcm9tUGFyYW1ldGVycyhhU3RhcnR1cFBhZ2VzLCBvTW9kZWwpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChhVmFsdWVzOiBDb250ZXh0W11bXSkgPT4ge1xuXHRcdFx0XHRpZiAoYVZhbHVlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHQvLyBNYWtlIHN1cmUgd2Ugb25seSBnZXQgMSBjb250ZXh0IHBlciBwcm9taXNlLCBhbmQgZmxhdHRlbiB0aGUgYXJyYXlcblx0XHRcdFx0XHRjb25zdCBhQ29udGV4dHM6IENvbnRleHRbXSA9IFtdO1xuXHRcdFx0XHRcdGFWYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoYUZvdW5kQ29udGV4dHMpIHtcblx0XHRcdFx0XHRcdGlmIChhRm91bmRDb250ZXh0cy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLnB1c2goYUZvdW5kQ29udGV4dHNbMF0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGFDb250ZXh0cy5sZW5ndGggPT09IGFWYWx1ZXMubGVuZ3RoID8gdGhpcy5fZ2V0RGVlcExpbmtPYmplY3QoYVN0YXJ0dXBQYWdlcywgYUNvbnRleHRzKSA6IHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIG5ldyBoYXNoIGJhc2VkIG9uIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvU3RhcnR1cFBhcmFtZXRlcnMgVGhlIHN0YXJ0dXAgcGFyYW1ldGVyIHZhbHVlcyAobWFwIHBhcmFtZXRlciBuYW1lIC0+IGFycmF5IG9mIHZhbHVlcylcblx0ICogQHBhcmFtIHNDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgc3RhcnR1cCBvZiB0aGUgYXBwIChnZW5lcmFsbHkgdGhlIHBhdGggdG8gdGhlIG1haW4gZW50aXR5IHNldClcblx0ICogQHBhcmFtIG9Sb3V0ZXIgVGhlIHJvdXRlciBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbCBUaGUgbWV0YSBtb2RlbFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgaGFzaCB0byBuYXZpZ2F0ZSB0bywgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZXJlJ3Mgbm8gbmVlZCB0byBuYXZpZ2F0ZVxuXHQgKi9cblx0Z2V0Q3JlYXRlU3RhcnR1cEhhc2g6IGZ1bmN0aW9uIChcblx0XHRvU3RhcnR1cFBhcmFtZXRlcnM6IGFueSxcblx0XHRzQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRvUm91dGVyOiBSb3V0ZXIsXG5cdFx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWxcblx0KTogUHJvbWlzZTxTdHJpbmc+IHtcblx0XHRyZXR1cm4gb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCkudGhlbigob0VudGl0eVNldEFubm90YXRpb25zOiBhbnkpID0+IHtcblx0XHRcdGxldCBzTWV0YVBhdGggPSBcIlwiO1xuXHRcdFx0bGV0IGJDcmVhdGFibGUgPSB0cnVlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdICYmXG5cdFx0XHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L05ld0FjdGlvbkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b0VudGl0eVNldEFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFwiXSAmJlxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdW1wiTmV3QWN0aW9uXCJdXG5cdFx0XHQpIHtcblx0XHRcdFx0c01ldGFQYXRoID0gYCR7c0NvbnRleHRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvTmV3QWN0aW9uQE9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZWA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzTWV0YVBhdGgpIHtcblx0XHRcdFx0Y29uc3QgYk5ld0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChiTmV3QWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb0luc2VydFJlc3RyaWN0aW9ucyA9IG9FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluc2VydFJlc3RyaWN0aW9uc1wiXTtcblx0XHRcdFx0aWYgKG9JbnNlcnRSZXN0cmljdGlvbnMgJiYgb0luc2VydFJlc3RyaWN0aW9ucy5JbnNlcnRhYmxlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGJDcmVhdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGJDcmVhdGFibGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCBzQ29udGV4dFBhdGgsIG9Sb3V0ZXIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIGhhc2ggdG8gY3JlYXRlIGEgbmV3IG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIG9TdGFydHVwUGFyYW1ldGVycyBUaGUgc3RhcnR1cCBwYXJhbWV0ZXIgdmFsdWVzIChtYXAgcGFyYW1ldGVyIG5hbWUgLT4gYXJyYXkgb2YgdmFsdWVzKVxuXHQgKiBAcGFyYW0gc0NvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGVudGl0eSBzZXQgdG8gYmUgdXNlZCBmb3IgdGhlIGNyZWF0aW9uXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGhhc2hcblx0ICovXG5cdGdldERlZmF1bHRDcmVhdGVIYXNoOiBmdW5jdGlvbiAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksIHNDb250ZXh0UGF0aDogc3RyaW5nLCBvUm91dGVyOiBSb3V0ZXIpOiBzdHJpbmcge1xuXHRcdGxldCBzRGVmYXVsdENyZWF0ZUhhc2ggPVxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlID8gKG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdIGFzIHN0cmluZykgOiBcImNyZWF0ZVwiO1xuXHRcdGxldCBzSGFzaCA9IFwiXCI7XG5cblx0XHRzRGVmYXVsdENyZWF0ZUhhc2ggPVxuXHRcdFx0c0RlZmF1bHRDcmVhdGVIYXNoLmluZGV4T2YoXCI6XCIpICE9PSAtMSAmJiBzRGVmYXVsdENyZWF0ZUhhc2gubGVuZ3RoID4gc0RlZmF1bHRDcmVhdGVIYXNoLmluZGV4T2YoXCI6XCIpICsgMVxuXHRcdFx0XHQ/IHNEZWZhdWx0Q3JlYXRlSGFzaC5zdWJzdHIoMCwgc0RlZmF1bHRDcmVhdGVIYXNoLmluZGV4T2YoXCI6XCIpKVxuXHRcdFx0XHQ6IFwiY3JlYXRlXCI7XG5cdFx0c0hhc2ggPSBgJHtzQ29udGV4dFBhdGguc3Vic3RyaW5nKDEpfSguLi4pP2ktYWN0aW9uPSR7c0RlZmF1bHRDcmVhdGVIYXNofWA7XG5cdFx0aWYgKG9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNIYXNoKSkge1xuXHRcdFx0cmV0dXJuIHNIYXNoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIHJvdXRlIG1hdGNoIGZvciBjcmVhdGluZyBhIG5ldyAke3NDb250ZXh0UGF0aC5zdWJzdHJpbmcoMSl9YCk7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBTdGFydHVwSGVscGVyO1xuIl19
@@ -1,9 +1,9 @@
1
- import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
2
- import ODataModel from "sap/ui/model/odata/v4/ODataModel";
3
- import Context from "sap/ui/model/odata/v4/Context";
1
+ import type Router from "sap/ui/core/routing/Router";
4
2
  import Filter from "sap/ui/model/Filter";
5
3
  import FilterOperator from "sap/ui/model/FilterOperator";
6
- import Router from "sap/ui/core/routing/Router";
4
+ import type Context from "sap/ui/model/odata/v4/Context";
5
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
6
+ import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
7
7
  import ModelHelper from "./ModelHelper";
8
8
 
9
9
  type ValuedKey = {
@@ -27,11 +27,11 @@ const AppStartupHelper = {
27
27
  *
28
28
  * @param aKeyNames The array of key names
29
29
  * @param oStartupParameters The startup parameters
30
- * @returns {any[]} An array of pairs {name, value} if all key values could be found in the startup parameters, undefined otherwise
30
+ * @returns An array of pairs \{name, value\} if all key values could be found in the startup parameters, undefined otherwise
31
31
  */
32
- _getKeysFromStartupParams: function(aKeyNames: string[], oStartupParameters: any): ValuedKey[] | undefined {
32
+ _getKeysFromStartupParams: function (aKeyNames: string[], oStartupParameters: any): ValuedKey[] | undefined {
33
33
  let bAllFound = true;
34
- const aKeys = aKeyNames.map(name => {
34
+ const aKeys = aKeyNames.map((name) => {
35
35
  if (oStartupParameters[name] && oStartupParameters[name].length === 1) {
36
36
  return { name, value: oStartupParameters[name][0] as string };
37
37
  } else {
@@ -52,11 +52,11 @@ const AppStartupHelper = {
52
52
  * @param oMetaModel The metamodel
53
53
  * @returns The filter
54
54
  */
55
- _createFilterFromKeys: function(aKeys: ValuedKey[], bDraftMode: Boolean, oMetaModel: ODataMetaModel): Filter {
55
+ _createFilterFromKeys: function (aKeys: ValuedKey[], bDraftMode: Boolean, oMetaModel: ODataMetaModel): Filter {
56
56
  const bFilterCaseSensitive = ModelHelper.isFilteringCaseSensitive(oMetaModel);
57
57
 
58
58
  let bFilterOnActiveEntity = false;
59
- const aFilters = aKeys.map(key => {
59
+ const aFilters = aKeys.map((key) => {
60
60
  if (key.name === "IsActiveEntity") {
61
61
  bFilterOnActiveEntity = true;
62
62
  }
@@ -85,16 +85,16 @@ const AppStartupHelper = {
85
85
  * @param oModel The model used to load the contexts
86
86
  * @returns A Promise for all contexts
87
87
  */
88
- _requestObjectsFromParameters: function(aStartupPages: PageInfo[], oModel: ODataModel): Promise<Context[][]> {
88
+ _requestObjectsFromParameters: function (aStartupPages: PageInfo[], oModel: ODataModel): Promise<Context[][]> {
89
89
  // Load the respective objects for all object pages found in aExternallyNavigablePages
90
- const aContextPromises = aStartupPages.map(pageInfo => {
90
+ const aContextPromises = aStartupPages.map((pageInfo) => {
91
91
  const aKeys = pageInfo.semanticKeys || pageInfo.technicalKeys || [];
92
92
  const oFilter = this._createFilterFromKeys(aKeys, pageInfo.draftMode, oModel.getMetaModel());
93
93
 
94
94
  // only request a minimum of fields to boost backend performance since this is only used to check if an object exists
95
95
  const oListBind = oModel.bindList(pageInfo.contextPath, undefined, undefined, oFilter, {
96
96
  "$select": aKeys
97
- .map(key => {
97
+ .map((key) => {
98
98
  return key.name;
99
99
  })
100
100
  .join(",")
@@ -112,9 +112,9 @@ const AppStartupHelper = {
112
112
  * @param oManifestRouting The app manifest routing section
113
113
  * @param oStartupParameters The startup parameters
114
114
  * @param oMetaModel The app metamodel
115
- * @returns {any} A page info if the page is reachable, undefined otherwise
115
+ * @returns A page info if the page is reachable, undefined otherwise
116
116
  */
117
- _getReachablePageInfoFromRoute: function(
117
+ _getReachablePageInfoFromRoute: function (
118
118
  oRoute: any,
119
119
  oManifestRouting: any,
120
120
  oStartupParameters: any,
@@ -144,17 +144,15 @@ const AppStartupHelper = {
144
144
  }
145
145
 
146
146
  const sContextPath: string =
147
- oTarget.options.settings.contextPath || (oTarget.options.settings.entitySet && "/" + oTarget.options.settings.entitySet);
148
- const oEntityType = sContextPath && oMetaModel.getObject("/$EntityContainer" + sContextPath + "/");
147
+ oTarget.options.settings.contextPath || (oTarget.options.settings.entitySet && `/${oTarget.options.settings.entitySet}`);
148
+ const oEntityType = sContextPath && oMetaModel.getObject(`/$EntityContainer${sContextPath}/`);
149
149
 
150
150
  if (!oEntityType) {
151
151
  return undefined;
152
152
  }
153
153
 
154
154
  // Get the semantic key values for the entity
155
- const aSemanticKeyNames: any = oMetaModel.getObject(
156
- "/$EntityContainer" + sContextPath + "/@com.sap.vocabularies.Common.v1.SemanticKey"
157
- );
155
+ const aSemanticKeyNames: any = oMetaModel.getObject(`/$EntityContainer${sContextPath}/@com.sap.vocabularies.Common.v1.SemanticKey`);
158
156
 
159
157
  const aSemantickKeys = aSemanticKeyNames
160
158
  ? this._getKeysFromStartupParams(
@@ -176,8 +174,8 @@ const AppStartupHelper = {
176
174
 
177
175
  // The startup parameters contain values for all semantic keys (or technical keys) --> we can store the page info in the corresponding level
178
176
  const draftMode =
179
- oMetaModel.getObject("/$EntityContainer" + sContextPath + "@com.sap.vocabularies.Common.v1.DraftRoot") ||
180
- oMetaModel.getObject("/$EntityContainer" + sContextPath + "@com.sap.vocabularies.Common.v1.DraftNode")
177
+ oMetaModel.getObject(`/$EntityContainer${sContextPath}@com.sap.vocabularies.Common.v1.DraftRoot`) ||
178
+ oMetaModel.getObject(`/$EntityContainer${sContextPath}@com.sap.vocabularies.Common.v1.DraftNode`)
181
179
  ? true
182
180
  : false;
183
181
 
@@ -198,13 +196,13 @@ const AppStartupHelper = {
198
196
  * @param oManifestRouting The routing information from the app manifest
199
197
  * @param oStartupParameters The startup parameters
200
198
  * @param oMetaModel The metamodel
201
- * @returns {any} The reachable pages
199
+ * @returns The reachable pages
202
200
  */
203
- _getReachablePages: function(oManifestRouting: any, oStartupParameters: any, oMetaModel: ODataMetaModel): PageInfo[][] {
201
+ _getReachablePages: function (oManifestRouting: any, oStartupParameters: any, oMetaModel: ODataMetaModel): PageInfo[][] {
204
202
  const aRoutes: any[] = oManifestRouting.routes;
205
203
  const mPagesByLevel: Record<number, PageInfo[]> = {};
206
204
 
207
- aRoutes.forEach(oRoute => {
205
+ aRoutes.forEach((oRoute) => {
208
206
  const oPageInfo = this._getReachablePageInfoFromRoute(oRoute, oManifestRouting, oStartupParameters, oMetaModel);
209
207
 
210
208
  if (oPageInfo) {
@@ -233,9 +231,9 @@ const AppStartupHelper = {
233
231
  * @param oManifestRouting The routing information from the app manifest
234
232
  * @param oStartupParameters The startup parameters
235
233
  * @param oMetaModel The metamodel
236
- * @returns {any} An array of startup page infos
234
+ * @returns An array of startup page infos
237
235
  */
238
- _getStartupPagesFromStartupParams: function(oManifestRouting: any, oStartupParameters: any, oMetaModel: ODataMetaModel): PageInfo[] {
236
+ _getStartupPagesFromStartupParams: function (oManifestRouting: any, oStartupParameters: any, oMetaModel: ODataMetaModel): PageInfo[] {
239
237
  // Find all pages that can be reached with the startup parameters
240
238
  const aReachablePages = this._getReachablePages(oManifestRouting, oStartupParameters, oMetaModel);
241
239
 
@@ -252,7 +250,7 @@ const AppStartupHelper = {
252
250
  const lastPage = current.length ? current[current.length - 1] : undefined;
253
251
 
254
252
  if (aCurrentLevelPages) {
255
- aCurrentLevelPages.forEach(function(nextPage) {
253
+ aCurrentLevelPages.forEach(function (nextPage) {
256
254
  if (!lastPage || nextPage.pattern.indexOf(lastPage.pattern) === 0) {
257
255
  // We only consider pages that can be reached from the page at the previous level,
258
256
  // --> their pattern must be the pattern of the previous page with another segment appended
@@ -279,15 +277,15 @@ const AppStartupHelper = {
279
277
  * @param aContexts The contexts
280
278
  * @returns An object containing either a hash or a context to navigate to, or an empty object if no deep link was found
281
279
  */
282
- _getDeepLinkObject: function(aStartupPages: PageInfo[], aContexts: Context[]): { hash?: string; context?: Context } {
280
+ _getDeepLinkObject: function (aStartupPages: PageInfo[], aContexts: Context[]): { hash?: string; context?: Context } {
283
281
  if (aContexts.length === 1) {
284
282
  return { context: aContexts[0] };
285
283
  } else if (aContexts.length > 1) {
286
284
  // Navigation to a deeper level --> use the pattern of the deepest object page
287
285
  // and replace the parameters by the ID from the contexts
288
286
  let hash = aStartupPages[aStartupPages.length - 1].pattern;
289
- aContexts.forEach(function(oContext) {
290
- hash = hash.replace("(#)", "(" + oContext.getPath().split("(")[1]);
287
+ aContexts.forEach(function (oContext) {
288
+ hash = hash.replace("(#)", `(${oContext.getPath().split("(")[1]}`);
291
289
  });
292
290
 
293
291
  return { hash };
@@ -304,7 +302,7 @@ const AppStartupHelper = {
304
302
  * @param oModel The OData model
305
303
  * @returns An object containing either a hash or a context to navigate to, or an empty object if no deep link was found
306
304
  */
307
- getDeepLinkStartupHash: function(
305
+ getDeepLinkStartupHash: function (
308
306
  oManifestRouting: any,
309
307
  oStartupParameters: any,
310
308
  oModel: ODataModel
@@ -324,7 +322,7 @@ const AppStartupHelper = {
324
322
  if (aValues.length) {
325
323
  // Make sure we only get 1 context per promise, and flatten the array
326
324
  const aContexts: Context[] = [];
327
- aValues.forEach(function(aFoundContexts) {
325
+ aValues.forEach(function (aFoundContexts) {
328
326
  if (aFoundContexts.length === 1) {
329
327
  aContexts.push(aFoundContexts[0]);
330
328
  }
@@ -346,13 +344,13 @@ const AppStartupHelper = {
346
344
  * @param oMetaModel The meta model
347
345
  * @returns A promise containing the hash to navigate to, or an empty string if there's no need to navigate
348
346
  */
349
- getCreateStartupHash: function(
347
+ getCreateStartupHash: function (
350
348
  oStartupParameters: any,
351
349
  sContextPath: string,
352
350
  oRouter: Router,
353
351
  oMetaModel: ODataMetaModel
354
352
  ): Promise<String> {
355
- return oMetaModel.requestObject(sContextPath + "@").then((oEntitySetAnnotations: any) => {
353
+ return oMetaModel.requestObject(`${sContextPath}@`).then((oEntitySetAnnotations: any) => {
356
354
  let sMetaPath = "";
357
355
  let bCreatable = true;
358
356
 
@@ -360,13 +358,12 @@ const AppStartupHelper = {
360
358
  oEntitySetAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"] &&
361
359
  oEntitySetAnnotations["@com.sap.vocabularies.Common.v1.DraftRoot"]["NewAction"]
362
360
  ) {
363
- sMetaPath = sContextPath + "@com.sap.vocabularies.Common.v1.DraftRoot/NewAction@Org.OData.Core.V1.OperationAvailable";
361
+ sMetaPath = `${sContextPath}@com.sap.vocabularies.Common.v1.DraftRoot/NewAction@Org.OData.Core.V1.OperationAvailable`;
364
362
  } else if (
365
363
  oEntitySetAnnotations["@com.sap.vocabularies.Session.v1.StickySessionSupported"] &&
366
364
  oEntitySetAnnotations["@com.sap.vocabularies.Session.v1.StickySessionSupported"]["NewAction"]
367
365
  ) {
368
- sMetaPath =
369
- sContextPath + "@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction@Org.OData.Core.V1.OperationAvailable";
366
+ sMetaPath = `${sContextPath}@com.sap.vocabularies.Session.v1.StickySessionSupported/NewAction@Org.OData.Core.V1.OperationAvailable`;
370
367
  }
371
368
 
372
369
  if (sMetaPath) {
@@ -396,7 +393,7 @@ const AppStartupHelper = {
396
393
  * @param oRouter The router instance
397
394
  * @returns The hash
398
395
  */
399
- getDefaultCreateHash: function(oStartupParameters: any, sContextPath: string, oRouter: Router): string {
396
+ getDefaultCreateHash: function (oStartupParameters: any, sContextPath: string, oRouter: Router): string {
400
397
  let sDefaultCreateHash =
401
398
  oStartupParameters && oStartupParameters.preferredMode ? (oStartupParameters.preferredMode[0] as string) : "create";
402
399
  let sHash = "";
@@ -405,11 +402,11 @@ const AppStartupHelper = {
405
402
  sDefaultCreateHash.indexOf(":") !== -1 && sDefaultCreateHash.length > sDefaultCreateHash.indexOf(":") + 1
406
403
  ? sDefaultCreateHash.substr(0, sDefaultCreateHash.indexOf(":"))
407
404
  : "create";
408
- sHash = sContextPath.substring(1) + "(...)?i-action=" + sDefaultCreateHash;
405
+ sHash = `${sContextPath.substring(1)}(...)?i-action=${sDefaultCreateHash}`;
409
406
  if (oRouter.getRouteInfoByHash(sHash)) {
410
407
  return sHash;
411
408
  } else {
412
- throw new Error("No route match for creating a new " + sContextPath.substring(1));
409
+ throw new Error(`No route match for creating a new ${sContextPath.substring(1)}`);
413
410
  }
414
411
  }
415
412
  };