@sapui5/sap.fe.core 1.103.0 → 1.106.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +121 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +122 -0
  5. package/src/sap/fe/core/AppComponent.js +24 -11
  6. package/src/sap/fe/core/AppComponent.ts +17 -5
  7. package/src/sap/fe/core/AppStateHandler.js +74 -62
  8. package/src/sap/fe/core/AppStateHandler.ts +24 -29
  9. package/src/sap/fe/core/BaseController.js +2 -2
  10. package/src/sap/fe/core/CommonUtils.js +147 -180
  11. package/src/sap/fe/core/CommonUtils.ts +166 -193
  12. package/src/sap/fe/core/ExtensionAPI.js +2 -2
  13. package/src/sap/fe/core/PageController.js +2 -2
  14. package/src/sap/fe/core/TemplateComponent.js +21 -10
  15. package/src/sap/fe/core/TemplateComponent.ts +3 -0
  16. package/src/sap/fe/core/TemplateModel.js +2 -2
  17. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  18. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +7 -1
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +194 -43
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +162 -24
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -227
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +268 -119
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +111 -76
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +96 -76
  27. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  28. package/src/sap/fe/core/controllerextensions/EditFlow.js +723 -637
  29. package/src/sap/fe/core/controllerextensions/EditFlow.ts +361 -398
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +83 -55
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +42 -44
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +29 -27
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +171 -74
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +167 -76
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -21
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -17
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -3
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
  43. package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
  44. package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
  45. package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -11
  46. package/src/sap/fe/core/controllerextensions/Placeholder.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  48. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  49. package/src/sap/fe/core/controllerextensions/Share.js +154 -123
  50. package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +157 -97
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +151 -95
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +151 -80
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +95 -93
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +9 -9
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +6 -7
  58. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +26 -11
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +30 -11
  60. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -40
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +55 -47
  62. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +31 -32
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1376 -914
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +654 -714
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +372 -326
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +210 -276
  67. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  68. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +670 -521
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +537 -535
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +85 -65
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +16 -21
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +25 -13
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +53 -43
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +18 -27
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +9 -15
  77. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +19 -3
  78. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  79. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +26 -16
  80. package/src/sap/fe/core/controls/Any.js +1 -1
  81. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +5 -5
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -3
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FileWrapper.js +8 -3
  89. package/src/sap/fe/core/controls/FileWrapper.ts +5 -1
  90. package/src/sap/fe/core/controls/FilterBar.js +2 -2
  91. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  92. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  93. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  94. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +48 -17
  95. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -2
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -2
  98. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
  100. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
  103. package/src/sap/fe/core/converters/ConverterContext.js +23 -2
  104. package/src/sap/fe/core/converters/ConverterContext.ts +34 -9
  105. package/src/sap/fe/core/converters/ManifestSettings.js +19 -18
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +53 -47
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  108. package/src/sap/fe/core/converters/MetaModelConverter.js +32 -10
  109. package/src/sap/fe/core/converters/MetaModelConverter.ts +42 -19
  110. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  111. package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
  112. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  113. package/src/sap/fe/core/converters/common/AnnotationConverter.js +69 -23
  114. package/src/sap/fe/core/converters/controls/Common/Action.js +98 -51
  115. package/src/sap/fe/core/converters/controls/Common/Action.ts +121 -44
  116. package/src/sap/fe/core/converters/controls/Common/Chart.js +31 -34
  117. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -34
  118. package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
  119. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +43 -7
  120. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -33
  121. package/src/sap/fe/core/converters/controls/Common/Form.js +8 -6
  122. package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -14
  123. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  124. package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
  125. package/src/sap/fe/core/converters/controls/Common/Table.js +188 -157
  126. package/src/sap/fe/core/converters/controls/Common/Table.ts +279 -230
  127. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  128. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -21
  130. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +71 -18
  131. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +30 -8
  132. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -7
  133. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
  134. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +43 -34
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +37 -25
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +85 -49
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +74 -50
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +54 -4
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +56 -8
  140. package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  141. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +6 -4
  142. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +10 -2
  143. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +182 -0
  144. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +167 -0
  145. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  146. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  147. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  148. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  149. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  150. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
  151. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  152. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +8 -14
  153. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +6 -9
  154. package/src/sap/fe/core/converters/templates/ListReportConverter.js +31 -31
  155. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +54 -47
  156. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +44 -15
  157. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +64 -30
  158. package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  159. package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
  160. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  161. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  162. package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
  163. package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
  164. package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  165. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  166. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  167. package/src/sap/fe/core/fpm/Component.js +33 -7
  168. package/src/sap/fe/core/fpm/Component.ts +14 -0
  169. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  170. package/src/sap/fe/core/helpers/AppStartupHelper.js +5 -4
  171. package/src/sap/fe/core/helpers/AppStartupHelper.ts +4 -3
  172. package/src/sap/fe/core/helpers/BindingToolkit.js +56 -24
  173. package/src/sap/fe/core/helpers/BindingToolkit.ts +67 -21
  174. package/src/sap/fe/core/helpers/ClassSupport.js +31 -3
  175. package/src/sap/fe/core/helpers/ClassSupport.ts +24 -1
  176. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  177. package/src/sap/fe/core/helpers/EditState.js +1 -1
  178. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
  179. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  180. package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
  181. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  182. package/src/sap/fe/core/helpers/LoaderUtils.js +39 -0
  183. package/src/sap/fe/core/helpers/LoaderUtils.ts +14 -0
  184. package/src/sap/fe/core/helpers/MassEditHelper.js +475 -99
  185. package/src/sap/fe/core/helpers/MassEditHelper.ts +468 -155
  186. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  187. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  188. package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  189. package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
  190. package/src/sap/fe/core/helpers/SemanticDateOperators.js +82 -36
  191. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +52 -36
  192. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/SideEffectsHelper.js +146 -0
  194. package/src/sap/fe/core/helpers/SideEffectsHelper.ts +128 -0
  195. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  197. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  198. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  199. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  200. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  201. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  202. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  203. package/src/sap/fe/core/jsx-runtime/jsx-control.js +119 -0
  204. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +98 -0
  205. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  206. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  207. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  208. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  209. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  210. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  211. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  212. package/src/sap/fe/core/library.js +2 -2
  213. package/src/sap/fe/core/library.support.js +1 -1
  214. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  215. package/src/sap/fe/core/messagebundle.properties +4 -41
  216. package/src/sap/fe/core/messagebundle_ar.properties +22 -45
  217. package/src/sap/fe/core/messagebundle_bg.properties +22 -45
  218. package/src/sap/fe/core/messagebundle_ca.properties +22 -45
  219. package/src/sap/fe/core/messagebundle_cs.properties +22 -45
  220. package/src/sap/fe/core/messagebundle_cy.properties +21 -44
  221. package/src/sap/fe/core/messagebundle_da.properties +22 -45
  222. package/src/sap/fe/core/messagebundle_de.properties +22 -45
  223. package/src/sap/fe/core/messagebundle_el.properties +22 -45
  224. package/src/sap/fe/core/messagebundle_en.properties +21 -44
  225. package/src/sap/fe/core/messagebundle_en_GB.properties +21 -44
  226. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -42
  227. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -40
  228. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -42
  229. package/src/sap/fe/core/messagebundle_es.properties +22 -45
  230. package/src/sap/fe/core/messagebundle_es_MX.properties +22 -45
  231. package/src/sap/fe/core/messagebundle_et.properties +22 -45
  232. package/src/sap/fe/core/messagebundle_fi.properties +22 -45
  233. package/src/sap/fe/core/messagebundle_fr.properties +21 -44
  234. package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -43
  235. package/src/sap/fe/core/messagebundle_hi.properties +22 -45
  236. package/src/sap/fe/core/messagebundle_hr.properties +22 -45
  237. package/src/sap/fe/core/messagebundle_hu.properties +22 -45
  238. package/src/sap/fe/core/messagebundle_id.properties +22 -45
  239. package/src/sap/fe/core/messagebundle_it.properties +22 -45
  240. package/src/sap/fe/core/messagebundle_iw.properties +22 -45
  241. package/src/sap/fe/core/messagebundle_ja.properties +22 -45
  242. package/src/sap/fe/core/messagebundle_kk.properties +22 -45
  243. package/src/sap/fe/core/messagebundle_ko.properties +27 -50
  244. package/src/sap/fe/core/messagebundle_lt.properties +22 -45
  245. package/src/sap/fe/core/messagebundle_lv.properties +22 -45
  246. package/src/sap/fe/core/messagebundle_ms.properties +22 -45
  247. package/src/sap/fe/core/messagebundle_nl.properties +24 -47
  248. package/src/sap/fe/core/messagebundle_no.properties +22 -45
  249. package/src/sap/fe/core/messagebundle_pl.properties +23 -46
  250. package/src/sap/fe/core/messagebundle_pt.properties +23 -46
  251. package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -45
  252. package/src/sap/fe/core/messagebundle_ro.properties +22 -45
  253. package/src/sap/fe/core/messagebundle_ru.properties +22 -45
  254. package/src/sap/fe/core/messagebundle_sh.properties +22 -45
  255. package/src/sap/fe/core/messagebundle_sk.properties +22 -45
  256. package/src/sap/fe/core/messagebundle_sl.properties +22 -45
  257. package/src/sap/fe/core/messagebundle_sv.properties +22 -45
  258. package/src/sap/fe/core/messagebundle_th.properties +20 -43
  259. package/src/sap/fe/core/messagebundle_tr.properties +22 -45
  260. package/src/sap/fe/core/messagebundle_uk.properties +22 -45
  261. package/src/sap/fe/core/messagebundle_vi.properties +22 -45
  262. package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -45
  263. package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -45
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +102 -74
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +62 -63
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  268. package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -8
  269. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
  270. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  271. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ShellServicesFactory.js +22 -2
  273. package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
  274. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
  275. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +2 -2
  276. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +251 -200
  277. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +160 -144
  278. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  279. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  280. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  281. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  282. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  285. package/src/sap/fe/core/templating/CommonFormatters.js +4 -3
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +5 -1
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
  288. package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
  289. package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -1
  290. package/src/sap/fe/core/templating/DataModelPathHelper.ts +5 -2
  291. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  292. package/src/sap/fe/core/templating/EntitySetHelper.js +4 -5
  293. package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -3
  294. package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
  295. package/src/sap/fe/core/templating/FilterHelper.js +34 -15
  296. package/src/sap/fe/core/templating/FilterHelper.ts +28 -12
  297. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  298. package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
  299. package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  300. package/src/sap/fe/core/templating/UIFormatters.js +5 -3
  301. package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
  302. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  303. package/src/sap/fe/core/type/Email.js +2 -2
@@ -2,20 +2,38 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/helpers/StableIdHelper"], function (deepClone, BuildingBlockRuntime, StableIdHelper) {
5
+ sap.ui.define(["sap/base/util/deepClone", "sap/base/util/merge", "sap/base/util/ObjectPath", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/StableIdHelper", "sap/ui/base/ManagedObject", "sap/ui/core/Component", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "../converters/ConverterContext"], function (deepClone, merge, ObjectPath, BuildingBlockRuntime, CommonUtils, BindingToolkit, StableIdHelper, ManagedObject, Component, Fragment, XMLPreprocessor, ConverterContext) {
6
6
  "use strict";
7
7
 
8
+ var _templateObject, _templateObject2, _templateObject3;
9
+
8
10
  var _exports = {};
9
11
  var generate = StableIdHelper.generate;
12
+ var resolveBindingString = BindingToolkit.resolveBindingString;
13
+ var xml = BuildingBlockRuntime.xml;
10
14
  var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
11
15
 
16
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
17
+
12
18
  /**
13
19
  * Base class for Building Block
14
20
  */
15
21
  var BuildingBlockBase = /*#__PURE__*/function () {
16
- function BuildingBlockBase(oProps) {
22
+ function BuildingBlockBase(oProps, _oControlConfig, _oSettings) {
17
23
  var _this = this;
18
24
 
25
+ this.isPublic = false;
26
+
27
+ this.getConverterContext = function (oVisualizationObjectPath, contextPath, mSettings, mExtraParams) {
28
+ var oAppComponent = mSettings.appComponent;
29
+ var originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
30
+ var viewData = Object.assign({}, originalViewData);
31
+ delete viewData.resourceBundle;
32
+ viewData = deepClone(viewData);
33
+ viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
34
+ return ConverterContext.createConverterContextForMacro(oVisualizationObjectPath.startingEntitySet.name, mSettings.models.metaModel, oAppComponent && oAppComponent.getDiagnostics(), merge, oVisualizationObjectPath.contextLocation, viewData);
35
+ };
36
+
19
37
  Object.keys(oProps).forEach(function (propName) {
20
38
  _this[propName] = oProps[propName];
21
39
  });
@@ -42,51 +60,43 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
42
60
  }
43
61
 
44
62
  return undefined;
45
- }
46
- /*
47
- // This block is commented out because I am not using them for now / need to change this but still want to keep them around
48
- static getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
49
- const oAppComponent = mSettings.appComponent;
50
- const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
51
- let viewData = Object.assign({}, originalViewData);
52
- delete viewData.resourceBundle;
53
- viewData = deepClone(viewData);
54
- viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
55
- return ConverterContext.createConverterContextForMacro(
56
- oVisualizationObjectPath.startingEntitySet.name,
57
- mSettings.models.metaModel,
58
- oAppComponent && oAppComponent.getDiagnostics(),
59
- merge,
60
- oVisualizationObjectPath.contextLocation,
61
- viewData
62
- );
63
- };
64
- static getMetadata() {
65
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
66
- // @ts-ignore
67
- // eslint-disable-next-line @typescript-eslint/no-this-alias
68
- return {
69
- getAllProperties(this: BuildingBlockDefinition) {
70
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
71
- // @ts-ignore
72
- return this.metadata.properties;
73
- },
74
- getName(this: BuildingBlockDefinition) {
75
- return `${this.namespace}.${this.name}`;
76
- },
77
- getAllAggregations() {
78
- return {};
79
- },
80
- getDefaultAggregationName() {
81
- return "";
82
- }
83
- };
84
- }*/
63
+ } // This block is commented out because I am not using them for now / need to change this but still want to keep them around
85
64
  ;
86
65
 
66
+ _proto.getProperties = function getProperties() {
67
+ var allProperties = {};
68
+
69
+ for (var oInstanceKey in this) {
70
+ if (this.hasOwnProperty(oInstanceKey)) {
71
+ allProperties[oInstanceKey] = this[oInstanceKey];
72
+ }
73
+ }
74
+
75
+ return allProperties;
76
+ };
77
+
87
78
  BuildingBlockBase.register = function register() {// To be overriden
88
79
  };
89
80
 
81
+ BuildingBlockBase.unregister = function unregister() {// To be overriden
82
+ };
83
+
84
+ _proto.addConditionally = function addConditionally(condition, partToAdd) {
85
+ if (condition) {
86
+ return partToAdd;
87
+ } else {
88
+ return "";
89
+ }
90
+ };
91
+
92
+ _proto.attr = function attr(attributeName, value) {
93
+ if (value !== undefined) {
94
+ return "".concat(attributeName, "=\"").concat(value, "\"");
95
+ } else {
96
+ return "";
97
+ }
98
+ };
99
+
90
100
  return BuildingBlockBase;
91
101
  }();
92
102
 
@@ -140,9 +150,32 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
140
150
  return propertyDescriptor;
141
151
  };
142
152
  }
153
+ /**
154
+ * Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
155
+ *
156
+ * @param aggregationDefinition
157
+ * @returns The decorated property
158
+ */
159
+
143
160
 
144
161
  _exports.xmlEvent = xmlEvent;
145
162
 
163
+ function xmlAggregation(aggregationDefinition) {
164
+ return function (target, propertyKey, propertyDescriptor) {
165
+ var metadata = ensureMetadata(target.constructor);
166
+ delete propertyDescriptor.initializer;
167
+
168
+ if (!metadata.aggregations[propertyKey]) {
169
+ metadata.aggregations[propertyKey] = aggregationDefinition;
170
+ }
171
+
172
+ return propertyDescriptor;
173
+ };
174
+ }
175
+
176
+ _exports.xmlAggregation = xmlAggregation;
177
+ var RUNTIME_BLOCKS = {};
178
+
146
179
  function defineBuildingBlock(oBuildingBlockDefinition) {
147
180
  return function (classDefinition) {
148
181
  ensureMetadata(classDefinition);
@@ -151,15 +184,133 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
151
184
  classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
152
185
  classDefinition.fragment = oBuildingBlockDefinition.fragment;
153
186
  classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
187
+ classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
154
188
  classDefinition.apiVersion = 2;
155
189
 
190
+ if (classDefinition.isRuntime) {
191
+ classDefinition.prototype.getTemplate = function () {
192
+ var className = "".concat(oBuildingBlockDefinition.namespace, ".").concat(oBuildingBlockDefinition.name);
193
+ var extraProps = [];
194
+
195
+ for (var propertiesKey in classDefinition.metadata.properties) {
196
+ var propertyValue = this[propertiesKey];
197
+
198
+ if (propertyValue !== undefined) {
199
+ var _propertyValue$isA, _propertyValue;
200
+
201
+ if ((_propertyValue$isA = (_propertyValue = propertyValue).isA) !== null && _propertyValue$isA !== void 0 && _propertyValue$isA.call(_propertyValue, "sap.ui.model.Context")) {
202
+ propertyValue = propertyValue.getPath();
203
+ }
204
+
205
+ extraProps.push(xml(_templateObject || (_templateObject = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), propertiesKey, propertyValue));
206
+ }
207
+ }
208
+
209
+ for (var eventsKey in classDefinition.metadata.events) {
210
+ var eventsValue = this[eventsKey];
211
+
212
+ if (eventsValue !== undefined) {
213
+ extraProps.push(xml(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), eventsKey, eventsValue));
214
+ }
215
+ }
216
+
217
+ return xml(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["<core:Fragment\n\t\t\t\t\txmlns:core=\"sap.ui.core\"\n\t\t\t\t\txmlns:feBB=\"sap.fe.core.buildingBlocks\"\n\t\t\t\t\tfragmentName=\"", "\"\n\t\t\t\t\tid=\"{this>id}\"\n\t\t\t\t\ttype=\"FE_COMPONENTS\"\n\t\t\t\t\t", "\n\t\t\t\t>\n\t\t\t\t</core:Fragment>"])), className, extraProps);
218
+ };
219
+ }
220
+
156
221
  classDefinition.register = function () {
157
222
  registerBuildingBlock(classDefinition);
223
+
224
+ if (classDefinition.isRuntime) {
225
+ RUNTIME_BLOCKS[oBuildingBlockDefinition.namespace + "." + oBuildingBlockDefinition.name] = classDefinition;
226
+ }
227
+ };
228
+
229
+ classDefinition.unregister = function () {
230
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
231
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
158
232
  };
159
233
  };
160
234
  }
161
235
 
162
236
  _exports.defineBuildingBlock = defineBuildingBlock;
237
+ Fragment.registerType("FE_COMPONENTS", {
238
+ load: function (mSettings) {
239
+ try {
240
+ return Promise.resolve(RUNTIME_BLOCKS[mSettings.fragmentName]);
241
+ } catch (e) {
242
+ return Promise.reject(e);
243
+ }
244
+ },
245
+ init: function (mSettings) {
246
+ try {
247
+ var _mSettings$customData, _mSettings$customData2, _mSettings$customData3, _mSettings$customData4;
248
+
249
+ var myClass = mSettings.fragmentContent;
250
+ var classSettings = {};
251
+ var feCustomData = (mSettings === null || mSettings === void 0 ? void 0 : (_mSettings$customData = mSettings.customData) === null || _mSettings$customData === void 0 ? void 0 : (_mSettings$customData2 = _mSettings$customData[0]) === null || _mSettings$customData2 === void 0 ? void 0 : (_mSettings$customData3 = _mSettings$customData2.mProperties) === null || _mSettings$customData3 === void 0 ? void 0 : (_mSettings$customData4 = _mSettings$customData3.value) === null || _mSettings$customData4 === void 0 ? void 0 : _mSettings$customData4["sap.fe.core.buildingBlocks"]) || {};
252
+ delete mSettings.customData;
253
+ var pageComponent = Component.getOwnerComponentFor(mSettings.containingView);
254
+ var appComponent = CommonUtils.getAppComponent(mSettings.containingView);
255
+ var metaModel = appComponent.getMetaModel();
256
+ var pageModel = pageComponent.getModel("_pageModel");
257
+
258
+ for (var propertyName in myClass.metadata.properties) {
259
+ var propertyMetadata = myClass.metadata.properties[propertyName];
260
+
261
+ if (propertyMetadata.type === "sap.ui.model.Context") {
262
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
263
+
264
+ if (classSettings[propertyName].getObject()) {
265
+ classSettings[propertyName] = classSettings[propertyName].getObject();
266
+ } else {
267
+ // bind to metamodel
268
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
269
+ }
270
+ } else {
271
+ var vValue = feCustomData[propertyName];
272
+
273
+ if (typeof vValue === "string") {
274
+ vValue = resolveBindingString(vValue, propertyMetadata.type);
275
+ }
276
+
277
+ classSettings[propertyName] = vValue;
278
+ }
279
+ }
280
+
281
+ for (var eventName in myClass.metadata.events) {
282
+ if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
283
+ classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
284
+ } else {
285
+ classSettings[eventName] = ""; // For now, might need to resolve more stuff
286
+ }
287
+ }
288
+
289
+ return Promise.resolve(ManagedObject.runWithPreprocessors(function () {
290
+ return new myClass(classSettings).render(mSettings.containingView, appComponent);
291
+ }, {
292
+ id: function (sId) {
293
+ return mSettings.containingView.createId(sId);
294
+ },
295
+ settings: function (controlSettings) {
296
+ var allAssociations = this.getMetadata().getAssociations();
297
+
298
+ for (var _i = 0, _Object$keys = Object.keys(allAssociations); _i < _Object$keys.length; _i++) {
299
+ var associationDetailName = _Object$keys[_i];
300
+
301
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
302
+ controlSettings[associationDetailName] = mSettings.containingView.createId(controlSettings[associationDetailName]);
303
+ }
304
+ }
305
+
306
+ return controlSettings;
307
+ }
308
+ }));
309
+ } catch (e) {
310
+ return Promise.reject(e);
311
+ }
312
+ }
313
+ });
163
314
  return _exports;
164
315
  }, false);
165
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwibmFtZXMiOlsiQnVpbGRpbmdCbG9ja0Jhc2UiLCJvUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BOYW1lIiwiY3JlYXRlSWQiLCJpZCIsInN0cmluZ1BhcnRzIiwiZ2VuZXJhdGUiLCJ1bmRlZmluZWQiLCJyZWdpc3RlciIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwiaGFzT3duUHJvcGVydHkiLCJtZXRhZGF0YSIsImRlZXBDbG9uZSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsImNsYXNzRGVmaW5pdGlvbiIsInhtbFRhZyIsIm5hbWUiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJmcmFnbWVudCIsImlzT3BlbiIsImFwaVZlcnNpb24iLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO01BQ2FBLGlCO0FBQ1osK0JBQVlDLE1BQVosRUFBeUM7QUFBQTs7QUFDeENDLE1BQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixNQUFaLEVBQW9CRyxPQUFwQixDQUE0QixVQUFDQyxRQUFELEVBQWM7QUFDekMsUUFBQSxLQUFJLENBQUNBLFFBQUQsQ0FBSixHQUErQkosTUFBTSxDQUFDSSxRQUFELENBQXJDO0FBQ0EsT0FGRDtBQUdBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7V0FDUUMsUSxHQUFQLG9CQUEwQztBQUN6QztBQUNBLFVBQUssSUFBRCxDQUFjQyxFQUFs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LE1BQUFBLGVBQWUsQ0FBQ25CLFFBQWhCLEdBQTJCLFlBQVk7QUFDdEMyQixRQUFBQSxxQkFBcUIsQ0FBQ1IsZUFBRCxDQUFyQjtBQUNBLE9BRkQ7QUFHQSxLQVhEO0FBWUEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyByZWdpc3RlckJ1aWxkaW5nQmxvY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmtleXMob1Byb3BzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0dGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9IG9Qcm9wc1twcm9wTmFtZV07XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgZWxlbWVudCBJRCB0byBhIGdsb2JhbGx5IHVuaXF1ZSBJRCBieSBwcmVmaXhpbmcgd2l0aCB0aGUgQnVpbGRpbmcgQmxvY2sgSUQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdHJpbmdQYXJ0c1xuXHQgKiBAcmV0dXJucyBFaXRoZXIgdGhlIGdsb2JhbCBJRCBvciB1bmRlZmluZWQgaWYgdGhlIEJ1aWxkaW5nIEJsb2NrIGRvZXNuJ3QgaGF2ZSBhbiBJRFxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUlkKC4uLnN0cmluZ1BhcnRzOiBzdHJpbmdbXSkge1xuXHRcdC8vIElmIHRoZSBjaGlsZCBpbnN0YW5jZSBoYXMgYW4gSUQgcHJvcGVydHkgdXNlIGl0IG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCh0aGlzIGFzIGFueSkuaWQpIHtcblx0XHRcdHJldHVybiBnZW5lcmF0ZShbKHRoaXMgYXMgYW55KS5pZCwgLi4uc3RyaW5nUGFydHNdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKlxuXHQvLyBUaGlzIGJsb2NrIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBJIGFtIG5vdCB1c2luZyB0aGVtIGZvciBub3cgLyBuZWVkIHRvIGNoYW5nZSB0aGlzIGJ1dCBzdGlsbCB3YW50IHRvIGtlZXAgdGhlbSBhcm91bmRcblx0c3RhdGljIGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoOiBhbnksIGNvbnRleHRQYXRoOiBhbnksIG1TZXR0aW5nczogYW55LCBtRXh0cmFQYXJhbXM/OiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gbVNldHRpbmdzLmFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvcmlnaW5hbFZpZXdEYXRhID0gbVNldHRpbmdzLm1vZGVscy52aWV3RGF0YSAmJiBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldERhdGEoKTtcblx0XHRsZXQgdmlld0RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbFZpZXdEYXRhKTtcblx0XHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VCdW5kbGU7XG5cdFx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRcdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2Uodmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sIG1FeHRyYVBhcmFtcyk7XG5cdFx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRtU2V0dGluZ3MubW9kZWxzLm1ldGFNb2RlbCxcblx0XHRcdG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dmlld0RhdGFcblx0XHQpO1xuXHR9O1xuXHRzdGF0aWMgZ2V0TWV0YWRhdGEoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0QWxsUHJvcGVydGllcyh0aGlzOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbikge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0cmV0dXJuIHRoaXMubWV0YWRhdGEucHJvcGVydGllcztcblx0XHRcdH0sXG5cdFx0XHRnZXROYW1lKHRoaXM6IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBgJHt0aGlzLm5hbWVzcGFjZX0uJHt0aGlzLm5hbWV9YDtcblx0XHRcdH0sXG5cdFx0XHRnZXRBbGxBZ2dyZWdhdGlvbnMoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0XHRnZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCkge1xuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdH1cblx0XHR9O1xuXHR9Ki9cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiBhbnk7XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdCRUeXBlPzogc3RyaW5nW107XG5cdCRraW5kPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0V2ZW50ID0ge307XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uID0ge1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0c2xvdD86IHN0cmluZztcbn07XG50eXBlIENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0ge1xuXHRuYW1lc3BhY2U6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR4bWxUYWc/OiBzdHJpbmc7XG5cdGZyYWdtZW50Pzogc3RyaW5nO1xuXHRwdWJsaWNOYW1lc3BhY2U/OiBzdHJpbmc7XG5cblx0aXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYyID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJlxuXHR0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UgJiB7XG5cdFx0YXBpVmVyc2lvbjogMjtcblx0XHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXHR9O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0YXBpVmVyc2lvbj86IDE7XG5cdGNyZWF0ZT86IEZ1bmN0aW9uO1xuXHRnZXRUZW1wbGF0ZT86IEZ1bmN0aW9uO1xuXHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0gQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiB8IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjE7XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEgPSB7XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0V2ZW50Pjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja1Byb3BlcnR5RGVmaW5pdGlvbj47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj47XG59O1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIHhtbCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQXR0cmlidXRlKGF0dHJpYnV0ZURlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSA9IHsgdHlwZTogXCJGdW5jdGlvblwiIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0fTtcblx0fTtcbn1cbiJdfQ==
316
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIm9Qcm9wcyIsIl9vQ29udHJvbENvbmZpZyIsIl9vU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJvVmlzdWFsaXphdGlvbk9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsIm1TZXR0aW5ncyIsIm1FeHRyYVBhcmFtcyIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvcmlnaW5hbFZpZXdEYXRhIiwibW9kZWxzIiwidmlld0RhdGEiLCJnZXREYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicmVzb3VyY2VCdW5kbGUiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsIm1lcmdlIiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmFtZSIsIm1ldGFNb2RlbCIsImdldERpYWdub3N0aWNzIiwiY29udGV4dExvY2F0aW9uIiwia2V5cyIsImZvckVhY2giLCJwcm9wTmFtZSIsImNyZWF0ZUlkIiwiaWQiLCJzdHJpbmdQYXJ0cyIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwiZ2V0UHJvcGVydGllcyIsImFsbFByb3BlcnRpZXMiLCJvSW5zdGFuY2VLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiZW5zdXJlTWV0YWRhdGEiLCJ0YXJnZXQiLCJtZXRhZGF0YSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwieG1sQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJSVU5USU1FX0JMT0NLUyIsImRlZmluZUJ1aWxkaW5nQmxvY2siLCJvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24iLCJjbGFzc0RlZmluaXRpb24iLCJ4bWxUYWciLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJmcmFnbWVudCIsImlzT3BlbiIsImlzUnVudGltZSIsImFwaVZlcnNpb24iLCJwcm90b3R5cGUiLCJnZXRUZW1wbGF0ZSIsImNsYXNzTmFtZSIsImV4dHJhUHJvcHMiLCJwcm9wZXJ0aWVzS2V5IiwicHJvcGVydHlWYWx1ZSIsImlzQSIsImdldFBhdGgiLCJwdXNoIiwieG1sIiwiZXZlbnRzS2V5IiwiZXZlbnRzVmFsdWUiLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siLCJYTUxQcmVwcm9jZXNzb3IiLCJwbHVnSW4iLCJGcmFnbWVudCIsInJlZ2lzdGVyVHlwZSIsImxvYWQiLCJmcmFnbWVudE5hbWUiLCJpbml0IiwibXlDbGFzcyIsImZyYWdtZW50Q29udGVudCIsImNsYXNzU2V0dGluZ3MiLCJmZUN1c3RvbURhdGEiLCJjdXN0b21EYXRhIiwibVByb3BlcnRpZXMiLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJjb250YWluaW5nVmlldyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TWV0YU1vZGVsIiwicGFnZU1vZGVsIiwiZ2V0TW9kZWwiLCJwcm9wZXJ0eU5hbWUiLCJwcm9wZXJ0eU1ldGFkYXRhIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRPYmplY3QiLCJ2VmFsdWUiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImV2ZW50TmFtZSIsInN0YXJ0c1dpdGgiLCJPYmplY3RQYXRoIiwiZ2V0Iiwic3Vic3RyaW5nIiwiZ2V0Q29udHJvbGxlciIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsInJlbmRlciIsInNJZCIsInNldHRpbmdzIiwiY29udHJvbFNldHRpbmdzIiwiYWxsQXNzb2NpYXRpb25zIiwiZ2V0TWV0YWRhdGEiLCJnZXRBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbkRldGFpbE5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgTWFuYWdlZE9iamVjdEV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBCdWlsZGluZyBCbG9ja1xuICovXG5leHBvcnQgY2xhc3MgQnVpbGRpbmdCbG9ja0Jhc2Uge1xuXHRwcm90ZWN0ZWQgaXNQdWJsaWMgPSBmYWxzZTtcblx0cHJvdGVjdGVkIGlkITogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcihvUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4sIF9vQ29udHJvbENvbmZpZz86IGFueSwgX29TZXR0aW5ncz86IGFueSkge1xuXHRcdE9iamVjdC5rZXlzKG9Qcm9wcykuZm9yRWFjaCgocHJvcE5hbWUpID0+IHtcblx0XHRcdHRoaXNbcHJvcE5hbWUgYXMga2V5b2YgdGhpc10gPSBvUHJvcHNbcHJvcE5hbWVdO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnQgdGhlIGdpdmVuIGxvY2FsIGVsZW1lbnQgSUQgdG8gYSBnbG9iYWxseSB1bmlxdWUgSUQgYnkgcHJlZml4aW5nIHdpdGggdGhlIEJ1aWxkaW5nIEJsb2NrIElELlxuXHQgKlxuXHQgKiBAcGFyYW0gc3RyaW5nUGFydHNcblx0ICogQHJldHVybnMgRWl0aGVyIHRoZSBnbG9iYWwgSUQgb3IgdW5kZWZpbmVkIGlmIHRoZSBCdWlsZGluZyBCbG9jayBkb2Vzbid0IGhhdmUgYW4gSURcblx0ICovXG5cdHB1YmxpYyBjcmVhdGVJZCguLi5zdHJpbmdQYXJ0czogc3RyaW5nW10pIHtcblx0XHQvLyBJZiB0aGUgY2hpbGQgaW5zdGFuY2UgaGFzIGFuIElEIHByb3BlcnR5IHVzZSBpdCBvdGhlcndpc2UgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdGlmICgodGhpcyBhcyBhbnkpLmlkKSB7XG5cdFx0XHRyZXR1cm4gZ2VuZXJhdGUoWyh0aGlzIGFzIGFueSkuaWQsIC4uLnN0cmluZ1BhcnRzXSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gVGhpcyBibG9jayBpcyBjb21tZW50ZWQgb3V0IGJlY2F1c2UgSSBhbSBub3QgdXNpbmcgdGhlbSBmb3Igbm93IC8gbmVlZCB0byBjaGFuZ2UgdGhpcyBidXQgc3RpbGwgd2FudCB0byBrZWVwIHRoZW0gYXJvdW5kXG5cdHByb3RlY3RlZCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aDogYW55LCBjb250ZXh0UGF0aDogYW55LCBtU2V0dGluZ3M6IGFueSwgbUV4dHJhUGFyYW1zPzogYW55KSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0Y29uc3Qgb3JpZ2luYWxWaWV3RGF0YSA9IG1TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEgJiYgbVNldHRpbmdzLm1vZGVscy52aWV3RGF0YS5nZXREYXRhKCk7XG5cdFx0bGV0IHZpZXdEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luYWxWaWV3RGF0YSk7XG5cdFx0ZGVsZXRlIHZpZXdEYXRhLnJlc291cmNlQnVuZGxlO1xuXHRcdHZpZXdEYXRhID0gZGVlcENsb25lKHZpZXdEYXRhKTtcblx0XHR2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiA9IG1lcmdlKHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLCBtRXh0cmFQYXJhbXMpO1xuXHRcdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lLFxuXHRcdFx0bVNldHRpbmdzLm1vZGVscy5tZXRhTW9kZWwsXG5cdFx0XHRvQXBwQ29tcG9uZW50ICYmIG9BcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKSxcblx0XHRcdG1lcmdlLFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLmNvbnRleHRMb2NhdGlvbixcblx0XHRcdHZpZXdEYXRhXG5cdFx0KTtcblx0fTtcblx0cHVibGljIGdldFByb3BlcnRpZXMoKSB7XG5cdFx0Y29uc3QgYWxsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdGZvciAoY29uc3Qgb0luc3RhbmNlS2V5IGluIHRoaXMpIHtcblx0XHRcdGlmICh0aGlzLmhhc093blByb3BlcnR5KG9JbnN0YW5jZUtleSkpIHtcblx0XHRcdFx0YWxsUHJvcGVydGllc1tvSW5zdGFuY2VLZXldID0gdGhpc1tvSW5zdGFuY2VLZXldO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYWxsUHJvcGVydGllcztcblx0fVxuXHRzdGF0aWMgcmVnaXN0ZXIoKSB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblx0c3RhdGljIHVucmVnaXN0ZXIoKSB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblx0cHVibGljIGFkZENvbmRpdGlvbmFsbHkoY29uZGl0aW9uPzogYm9vbGVhbiwgcGFydFRvQWRkPzogYW55KSB7XG5cdFx0aWYgKGNvbmRpdGlvbikge1xuXHRcdFx0cmV0dXJuIHBhcnRUb0FkZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cdHByb3RlY3RlZCBhdHRyKGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuXHRcdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gYCR7YXR0cmlidXRlTmFtZX09XCIke3ZhbHVlfVwiYDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiBhbnk7XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdCRUeXBlPzogc3RyaW5nW107XG5cdCRraW5kPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0V2ZW50ID0ge307XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uID0ge1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0c2xvdD86IHN0cmluZztcblx0aXNEZWZhdWx0PzogYm9vbGVhbjtcbn07XG50eXBlIENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0ge1xuXHRuYW1lc3BhY2U6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR4bWxUYWc/OiBzdHJpbmc7XG5cdGZyYWdtZW50Pzogc3RyaW5nO1xuXHRwdWJsaWNOYW1lc3BhY2U/OiBzdHJpbmc7XG5cblx0aXNSdW50aW1lPzogYm9vbGVhbjtcblx0aXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYyID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJlxuXHR0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UgJiB7XG5cdFx0YXBpVmVyc2lvbjogMjtcblx0XHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXHR9O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0YXBpVmVyc2lvbj86IDE7XG5cdGNyZWF0ZT86IEZ1bmN0aW9uO1xuXHRnZXRUZW1wbGF0ZT86IEZ1bmN0aW9uO1xuXHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0gQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiB8IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjE7XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEgPSB7XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0V2ZW50Pjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja1Byb3BlcnR5RGVmaW5pdGlvbj47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrUHJvcGVydHk8VD4gPSBUIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPFQ+O1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIHhtbCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQXR0cmlidXRlKGF0dHJpYnV0ZURlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSA9IHsgdHlwZTogXCJGdW5jdGlvblwiIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyBhbnk7XG59XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiB4bWwgYWdncmVnYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYWdncmVnYXRpb25EZWZpbml0aW9uXG4gKiBAcmV0dXJucyBUaGUgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWxBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbkRlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gYWdncmVnYXRpb25EZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuY29uc3QgUlVOVElNRV9CTE9DS1M6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uPiA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUJ1aWxkaW5nQmxvY2sob0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBDb21tb25CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbikge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGNsYXNzRGVmaW5pdGlvbjogYW55KSB7XG5cdFx0ZW5zdXJlTWV0YWRhdGEoY2xhc3NEZWZpbml0aW9uKTtcblx0XHRjbGFzc0RlZmluaXRpb24ueG1sVGFnID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWU7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLm5hbWVzcGFjZSA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2U7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnB1YmxpY05hbWVzcGFjZSA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2U7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLmZyYWdtZW50ID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmZyYWdtZW50O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5pc09wZW4gPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24uaXNPcGVuO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5pc1J1bnRpbWUgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24uaXNSdW50aW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5hcGlWZXJzaW9uID0gMjtcblx0XHRpZiAoY2xhc3NEZWZpbml0aW9uLmlzUnVudGltZSkge1xuXHRcdFx0Y2xhc3NEZWZpbml0aW9uLnByb3RvdHlwZS5nZXRUZW1wbGF0ZSA9IGZ1bmN0aW9uICh0aGlzOiBhbnkpIHtcblx0XHRcdFx0Y29uc3QgY2xhc3NOYW1lID0gYCR7b0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWVzcGFjZX0uJHtvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZX1gO1xuXHRcdFx0XHRjb25zdCBleHRyYVByb3BzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydGllc0tleSBpbiBjbGFzc0RlZmluaXRpb24ubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gdGhpc1twcm9wZXJ0aWVzS2V5XTtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5pc0E/LihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dHJhUHJvcHMucHVzaCh4bWxgZmVCQjoke3Byb3BlcnRpZXNLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgZXZlbnRzS2V5IGluIGNsYXNzRGVmaW5pdGlvbi5tZXRhZGF0YS5ldmVudHMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudHNWYWx1ZSA9IHRoaXNbZXZlbnRzS2V5XTtcblx0XHRcdFx0XHRpZiAoZXZlbnRzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZXh0cmFQcm9wcy5wdXNoKHhtbGBmZUJCOiR7ZXZlbnRzS2V5fT1cIiR7ZXZlbnRzVmFsdWV9XCJgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHhtbGA8Y29yZTpGcmFnbWVudFxuXHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0eG1sbnM6ZmVCQj1cInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzXCJcblx0XHRcdFx0XHRmcmFnbWVudE5hbWU9XCIke2NsYXNzTmFtZX1cIlxuXHRcdFx0XHRcdGlkPVwie3RoaXM+aWR9XCJcblx0XHRcdFx0XHR0eXBlPVwiRkVfQ09NUE9ORU5UU1wiXG5cdFx0XHRcdFx0JHtleHRyYVByb3BzfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdDwvY29yZTpGcmFnbWVudD5gO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjbGFzc0RlZmluaXRpb24ucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZWdpc3RlckJ1aWxkaW5nQmxvY2soY2xhc3NEZWZpbml0aW9uKTtcblx0XHRcdGlmIChjbGFzc0RlZmluaXRpb24uaXNSdW50aW1lKSB7XG5cdFx0XHRcdFJVTlRJTUVfQkxPQ0tTW29CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2UgKyBcIi5cIiArIG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lXSA9IGNsYXNzRGVmaW5pdGlvbjtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi51bnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBjbGFzc0RlZmluaXRpb24ubmFtZXNwYWNlLCBjbGFzc0RlZmluaXRpb24ubmFtZSk7XG5cdFx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UsIGNsYXNzRGVmaW5pdGlvbi5uYW1lKTtcblx0XHR9O1xuXHR9O1xufVxuXG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogYW55KSB7XG5cdFx0cmV0dXJuIFJVTlRJTUVfQkxPQ0tTW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdO1xuXHR9LFxuXHRpbml0OiBhc3luYyBmdW5jdGlvbiAobVNldHRpbmdzOiBhbnkpIHtcblx0XHRjb25zdCBteUNsYXNzID0gbVNldHRpbmdzLmZyYWdtZW50Q29udGVudDtcblx0XHRjb25zdCBjbGFzc1NldHRpbmdzOiBhbnkgPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGEgPSBtU2V0dGluZ3M/LmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrc1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcpIGFzIGFueTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3KTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU1ldGFkYXRhID0gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpIHtcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0aWYgKGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKSkge1xuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxldCB2VmFsdWUgPSBmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXTtcblx0XHRcdFx0aWYgKHR5cGVvZiB2VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHR2VmFsdWUgPSByZXNvbHZlQmluZGluZ1N0cmluZyh2VmFsdWUsIHByb3BlcnR5TWV0YWRhdGEudHlwZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gdlZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiBteUNsYXNzLm1ldGFkYXRhLmV2ZW50cykge1xuXHRcdFx0aWYgKGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdICYmIGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbZXZlbnROYW1lXSA9IE9iamVjdFBhdGguZ2V0KGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN1YnN0cmluZygxKSwgbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGFzc1NldHRpbmdzW2V2ZW50TmFtZV0gPSBcIlwiOyAvLyBGb3Igbm93LCBtaWdodCBuZWVkIHRvIHJlc29sdmUgbW9yZSBzdHVmZlxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IG15Q2xhc3MoY2xhc3NTZXR0aW5ncykucmVuZGVyKG1TZXR0aW5ncy5jb250YWluaW5nVmlldywgYXBwQ29tcG9uZW50KTtcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGlkOiBmdW5jdGlvbiAoc0lkOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKHNJZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldHRpbmdzOiBmdW5jdGlvbiAoY29udHJvbFNldHRpbmdzOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBhbGxBc3NvY2lhdGlvbnMgPSB0aGlzLmdldE1ldGFkYXRhKCkuZ2V0QXNzb2NpYXRpb25zKCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBhc3NvY2lhdGlvbkRldGFpbE5hbWUgb2YgT2JqZWN0LmtleXMoYWxsQXNzb2NpYXRpb25zKSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xTZXR0aW5ncy5oYXNPd25Qcm9wZXJ0eShhc3NvY2lhdGlvbkRldGFpbE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdID0gbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmNyZWF0ZUlkKFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRyb2xTZXR0aW5nc1thc3NvY2lhdGlvbkRldGFpbE5hbWVdXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBjb250cm9sU2V0dGluZ3M7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG59KTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7RUFhQTtBQUNBO0FBQ0E7TUFDYUEsaUI7SUFHWiwyQkFBWUMsTUFBWixFQUF5Q0MsZUFBekMsRUFBZ0VDLFVBQWhFLEVBQWtGO01BQUE7O01BQUEsS0FGeEVDLFFBRXdFLEdBRjdELEtBRTZEOztNQUFBLEtBb0J4RUMsbUJBcEJ3RSxHQW9CbEQsVUFBVUMsd0JBQVYsRUFBeUNDLFdBQXpDLEVBQTJEQyxTQUEzRCxFQUEyRUMsWUFBM0UsRUFBK0Y7UUFDOUgsSUFBTUMsYUFBYSxHQUFHRixTQUFTLENBQUNHLFlBQWhDO1FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUdKLFNBQVMsQ0FBQ0ssTUFBVixDQUFpQkMsUUFBakIsSUFBNkJOLFNBQVMsQ0FBQ0ssTUFBVixDQUFpQkMsUUFBakIsQ0FBMEJDLE9BQTFCLEVBQXREO1FBQ0EsSUFBSUQsUUFBUSxHQUFHRSxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCTCxnQkFBbEIsQ0FBZjtRQUNBLE9BQU9FLFFBQVEsQ0FBQ0ksY0FBaEI7UUFDQUosUUFBUSxHQUFHSyxTQUFTLENBQUNMLFFBQUQsQ0FBcEI7UUFDQUEsUUFBUSxDQUFDTSxvQkFBVCxHQUFnQ0MsS0FBSyxDQUFDUCxRQUFRLENBQUNNLG9CQUFWLEVBQWdDWCxZQUFoQyxDQUFyQztRQUNBLE9BQU9hLGdCQUFnQixDQUFDQyw4QkFBakIsQ0FDTmpCLHdCQUF3QixDQUFDa0IsaUJBQXpCLENBQTJDQyxJQURyQyxFQUVOakIsU0FBUyxDQUFDSyxNQUFWLENBQWlCYSxTQUZYLEVBR05oQixhQUFhLElBQUlBLGFBQWEsQ0FBQ2lCLGNBQWQsRUFIWCxFQUlOTixLQUpNLEVBS05mLHdCQUF3QixDQUFDc0IsZUFMbkIsRUFNTmQsUUFOTSxDQUFQO01BUUEsQ0FuQ2lGOztNQUNqRkUsTUFBTSxDQUFDYSxJQUFQLENBQVk1QixNQUFaLEVBQW9CNkIsT0FBcEIsQ0FBNEIsVUFBQ0MsUUFBRCxFQUFjO1FBQ3pDLEtBQUksQ0FBQ0EsUUFBRCxDQUFKLEdBQStCOUIsTUFBTSxDQUFDOEIsUUFBRCxDQUFyQztNQUNBLENBRkQ7SUFHQTtJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O1dBQ1FDLFEsR0FBUCxvQkFBMEM7TUFDekM7TUFDQSxJQUFLLElBQUQsQ0FBY0MsRUFBbEIsRUFBc0I7UUFBQSxrQ0FGSkMsV0FFSTtVQUZKQSxXQUVJO1FBQUE7O1FBQ3JCLE9BQU9DLFFBQVEsRUFBRyxJQUFELENBQWNGLEVBQWhCLFNBQXVCQyxXQUF2QixFQUFmO01BQ0E7O01BQ0QsT0FBT0UsU0FBUDtJQUNBLEMsQ0FDRDs7O1dBaUJPQyxhLEdBQVAseUJBQXVCO01BQ3RCLElBQU1DLGFBQWtDLEdBQUcsRUFBM0M7O01BQ0EsS0FBSyxJQUFNQyxZQUFYLElBQTJCLElBQTNCLEVBQWlDO1FBQ2hDLElBQUksS0FBS0MsY0FBTCxDQUFvQkQsWUFBcEIsQ0FBSixFQUF1QztVQUN0Q0QsYUFBYSxDQUFDQyxZQUFELENBQWIsR0FBOEIsS0FBS0EsWUFBTCxDQUE5QjtRQUNBO01BQ0Q7O01BQ0QsT0FBT0QsYUFBUDtJQUNBLEM7O3NCQUNNRyxRLEdBQVAsb0JBQWtCLENBQ2pCO0lBQ0EsQzs7c0JBQ01DLFUsR0FBUCxzQkFBb0IsQ0FDbkI7SUFDQSxDOztXQUNNQyxnQixHQUFQLDBCQUF3QkMsU0FBeEIsRUFBNkNDLFNBQTdDLEVBQThEO01BQzdELElBQUlELFNBQUosRUFBZTtRQUNkLE9BQU9DLFNBQVA7TUFDQSxDQUZELE1BRU87UUFDTixPQUFPLEVBQVA7TUFDQTtJQUNELEM7O1dBQ1NDLEksR0FBVixjQUFlQyxhQUFmLEVBQXNDQyxLQUF0QyxFQUFrRDtNQUNqRCxJQUFJQSxLQUFLLEtBQUtaLFNBQWQsRUFBeUI7UUFDeEIsaUJBQVVXLGFBQVYsZ0JBQTRCQyxLQUE1QjtNQUNBLENBRkQsTUFFTztRQUNOLE9BQU8sRUFBUDtNQUNBO0lBQ0QsQzs7Ozs7OztFQTBERixJQUFNQyxjQUFjLEdBQUcsVUFBVUMsTUFBVixFQUE4QztJQUNwRSxJQUFJLENBQUNBLE1BQU0sQ0FBQ1YsY0FBUCxDQUFzQixVQUF0QixDQUFMLEVBQXdDO01BQ3ZDVSxNQUFNLENBQUNDLFFBQVAsR0FBa0JoQyxTQUFTLENBQzFCK0IsTUFBTSxDQUFDQyxRQUFQLElBQW1CO1FBQ2xCQyxVQUFVLEVBQUUsRUFETTtRQUVsQkMsWUFBWSxFQUFFLEVBRkk7UUFHbEJDLE1BQU0sRUFBRTtNQUhVLENBRE8sQ0FBM0I7SUFPQTs7SUFDRCxPQUFPSixNQUFNLENBQUNDLFFBQWQ7RUFDQSxDQVhEO0VBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFDTyxTQUFTSSxZQUFULENBQXNCQyxtQkFBdEIsRUFBK0Y7SUFDckcsT0FBTyxVQUFVTixNQUFWLEVBQXFDTyxXQUFyQyxFQUEwREMsa0JBQTFELEVBQTRHO01BQ2xILElBQU1QLFFBQVEsR0FBR0YsY0FBYyxDQUFDQyxNQUFNLENBQUNTLFdBQVIsQ0FBL0I7TUFDQSxPQUFRRCxrQkFBRCxDQUE0QkUsV0FBbkM7O01BQ0EsSUFBSSxDQUFDVCxRQUFRLENBQUNDLFVBQVQsQ0FBb0JLLFdBQXBCLENBQUwsRUFBdUM7UUFDdENOLFFBQVEsQ0FBQ0MsVUFBVCxDQUFvQkssV0FBcEIsSUFBbUNELG1CQUFuQztNQUNBOztNQUVELE9BQU9FLGtCQUFQO0lBQ0EsQ0FSRDtFQVNBOzs7O0VBRU0sU0FBU0csUUFBVCxHQUF1QztJQUM3QyxPQUFPLFVBQVVYLE1BQVYsRUFBcUNPLFdBQXJDLEVBQTBEQyxrQkFBMUQsRUFBNEc7TUFDbEgsSUFBTVAsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQ1MsV0FBUixDQUEvQjtNQUNBLE9BQVFELGtCQUFELENBQTRCRSxXQUFuQzs7TUFDQSxJQUFJLENBQUNULFFBQVEsQ0FBQ0csTUFBVCxDQUFnQkcsV0FBaEIsQ0FBTCxFQUFtQztRQUNsQ04sUUFBUSxDQUFDRyxNQUFULENBQWdCRyxXQUFoQixJQUErQjtVQUFFSyxJQUFJLEVBQUU7UUFBUixDQUEvQjtNQUNBOztNQUVELE9BQU9KLGtCQUFQO0lBQ0EsQ0FSRDtFQVNBO0VBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztFQUNPLFNBQVNLLGNBQVQsQ0FBd0JDLHFCQUF4QixFQUFzRztJQUM1RyxPQUFPLFVBQVVkLE1BQVYsRUFBcUNPLFdBQXJDLEVBQTBEQyxrQkFBMUQsRUFBNEc7TUFDbEgsSUFBTVAsUUFBUSxHQUFHRixjQUFjLENBQUNDLE1BQU0sQ0FBQ1MsV0FBUixDQUEvQjtNQUNBLE9BQVFELGtCQUFELENBQTRCRSxXQUFuQzs7TUFDQSxJQUFJLENBQUNULFFBQVEsQ0FBQ0UsWUFBVCxDQUFzQkksV0FBdEIsQ0FBTCxFQUF5QztRQUN4Q04sUUFBUSxDQUFDRSxZQUFULENBQXNCSSxXQUF0QixJQUFxQ08scUJBQXJDO01BQ0E7O01BRUQsT0FBT04sa0JBQVA7SUFDQSxDQVJEO0VBU0E7OztFQUNELElBQU1PLGNBQXVELEdBQUcsRUFBaEU7O0VBQ08sU0FBU0MsbUJBQVQsQ0FBNkJDLHdCQUE3QixFQUFzRjtJQUM1RixPQUFPLFVBQVVDLGVBQVYsRUFBZ0M7TUFDdENuQixjQUFjLENBQUNtQixlQUFELENBQWQ7TUFDQUEsZUFBZSxDQUFDQyxNQUFoQixHQUF5QkYsd0JBQXdCLENBQUMxQyxJQUFsRDtNQUNBMkMsZUFBZSxDQUFDRSxTQUFoQixHQUE0Qkgsd0JBQXdCLENBQUNHLFNBQXJEO01BQ0FGLGVBQWUsQ0FBQ0csZUFBaEIsR0FBa0NKLHdCQUF3QixDQUFDSSxlQUEzRDtNQUNBSCxlQUFlLENBQUNJLFFBQWhCLEdBQTJCTCx3QkFBd0IsQ0FBQ0ssUUFBcEQ7TUFDQUosZUFBZSxDQUFDSyxNQUFoQixHQUF5Qk4sd0JBQXdCLENBQUNNLE1BQWxEO01BQ0FMLGVBQWUsQ0FBQ00sU0FBaEIsR0FBNEJQLHdCQUF3QixDQUFDTyxTQUFyRDtNQUNBTixlQUFlLENBQUNPLFVBQWhCLEdBQTZCLENBQTdCOztNQUNBLElBQUlQLGVBQWUsQ0FBQ00sU0FBcEIsRUFBK0I7UUFDOUJOLGVBQWUsQ0FBQ1EsU0FBaEIsQ0FBMEJDLFdBQTFCLEdBQXdDLFlBQXFCO1VBQzVELElBQU1DLFNBQVMsYUFBTVgsd0JBQXdCLENBQUNHLFNBQS9CLGNBQTRDSCx3QkFBd0IsQ0FBQzFDLElBQXJFLENBQWY7VUFDQSxJQUFNc0QsVUFBVSxHQUFHLEVBQW5COztVQUNBLEtBQUssSUFBTUMsYUFBWCxJQUE0QlosZUFBZSxDQUFDakIsUUFBaEIsQ0FBeUJDLFVBQXJELEVBQWlFO1lBQ2hFLElBQUk2QixhQUFhLEdBQUcsS0FBS0QsYUFBTCxDQUFwQjs7WUFDQSxJQUFJQyxhQUFhLEtBQUs3QyxTQUF0QixFQUFpQztjQUFBOztjQUNoQywwQkFBSSxrQkFBQTZDLGFBQWEsRUFBQ0MsR0FBbEIsK0NBQUksd0NBQW9CLHNCQUFwQixDQUFKLEVBQWlEO2dCQUNoREQsYUFBYSxHQUFHQSxhQUFhLENBQUNFLE9BQWQsRUFBaEI7Y0FDQTs7Y0FDREosVUFBVSxDQUFDSyxJQUFYLENBQWdCQyxHQUFoQix3RkFBMkJMLGFBQTNCLEVBQTZDQyxhQUE3QztZQUNBO1VBQ0Q7O1VBQ0QsS0FBSyxJQUFNSyxTQUFYLElBQXdCbEIsZUFBZSxDQUFDakIsUUFBaEIsQ0FBeUJHLE1BQWpELEVBQXlEO1lBQ3hELElBQU1pQyxXQUFXLEdBQUcsS0FBS0QsU0FBTCxDQUFwQjs7WUFDQSxJQUFJQyxXQUFXLEtBQUtuRCxTQUFwQixFQUErQjtjQUM5QjJDLFVBQVUsQ0FBQ0ssSUFBWCxDQUFnQkMsR0FBaEIsMEZBQTJCQyxTQUEzQixFQUF5Q0MsV0FBekM7WUFDQTtVQUNEOztVQUNELE9BQU9GLEdBQVAscVVBR2lCUCxTQUhqQixFQU1HQyxVQU5IO1FBU0EsQ0EzQkQ7TUE0QkE7O01BRURYLGVBQWUsQ0FBQzNCLFFBQWhCLEdBQTJCLFlBQVk7UUFDdEMrQyxxQkFBcUIsQ0FBQ3BCLGVBQUQsQ0FBckI7O1FBQ0EsSUFBSUEsZUFBZSxDQUFDTSxTQUFwQixFQUErQjtVQUM5QlQsY0FBYyxDQUFDRSx3QkFBd0IsQ0FBQ0csU0FBekIsR0FBcUMsR0FBckMsR0FBMkNILHdCQUF3QixDQUFDMUMsSUFBckUsQ0FBZCxHQUEyRjJDLGVBQTNGO1FBQ0E7TUFDRCxDQUxEOztNQU1BQSxlQUFlLENBQUMxQixVQUFoQixHQUE2QixZQUFZO1FBQ3hDK0MsZUFBZSxDQUFDQyxNQUFoQixDQUF1QixJQUF2QixFQUE2QnRCLGVBQWUsQ0FBQ0UsU0FBN0MsRUFBd0RGLGVBQWUsQ0FBQzNDLElBQXhFO1FBQ0FnRSxlQUFlLENBQUNDLE1BQWhCLENBQXVCLElBQXZCLEVBQTZCdEIsZUFBZSxDQUFDRyxlQUE3QyxFQUE4REgsZUFBZSxDQUFDM0MsSUFBOUU7TUFDQSxDQUhEO0lBSUEsQ0FsREQ7RUFtREE7OztFQUVEa0UsUUFBUSxDQUFDQyxZQUFULENBQXNCLGVBQXRCLEVBQXVDO0lBQ3RDQyxJQUFJLFlBQWtCckYsU0FBbEI7TUFBQSxJQUFrQztRQUNyQyx1QkFBT3lELGNBQWMsQ0FBQ3pELFNBQVMsQ0FBQ3NGLFlBQVgsQ0FBckI7TUFDQSxDQUZHO1FBQUE7TUFBQTtJQUFBLENBRGtDO0lBSXRDQyxJQUFJLFlBQWtCdkYsU0FBbEI7TUFBQSxJQUFrQztRQUFBOztRQUNyQyxJQUFNd0YsT0FBTyxHQUFHeEYsU0FBUyxDQUFDeUYsZUFBMUI7UUFDQSxJQUFNQyxhQUFrQixHQUFHLEVBQTNCO1FBQ0EsSUFBTUMsWUFBWSxHQUFHLENBQUEzRixTQUFTLFNBQVQsSUFBQUEsU0FBUyxXQUFULHFDQUFBQSxTQUFTLENBQUU0RixVQUFYLDBHQUF3QixDQUF4Qiw2R0FBNEJDLFdBQTVCLDRHQUF5Q3JELEtBQXpDLGtGQUFpRCw0QkFBakQsTUFBa0YsRUFBdkc7UUFDQSxPQUFPeEMsU0FBUyxDQUFDNEYsVUFBakI7UUFDQSxJQUFNRSxhQUFhLEdBQUdDLFNBQVMsQ0FBQ0Msb0JBQVYsQ0FBK0JoRyxTQUFTLENBQUNpRyxjQUF6QyxDQUF0QjtRQUNBLElBQU05RixZQUFZLEdBQUcrRixXQUFXLENBQUNDLGVBQVosQ0FBNEJuRyxTQUFTLENBQUNpRyxjQUF0QyxDQUFyQjtRQUNBLElBQU0vRSxTQUFTLEdBQUdmLFlBQVksQ0FBQ2lHLFlBQWIsRUFBbEI7UUFDQSxJQUFNQyxTQUFTLEdBQUdQLGFBQWEsQ0FBQ1EsUUFBZCxDQUF1QixZQUF2QixDQUFsQjs7UUFDQSxLQUFLLElBQU1DLFlBQVgsSUFBMkJmLE9BQU8sQ0FBQzdDLFFBQVIsQ0FBaUJDLFVBQTVDLEVBQXdEO1VBQ3ZELElBQU00RCxnQkFBZ0IsR0FBR2hCLE9BQU8sQ0FBQzdDLFFBQVIsQ0FBaUJDLFVBQWpCLENBQTRCMkQsWUFBNUIsQ0FBekI7O1VBQ0EsSUFBSUMsZ0JBQWdCLENBQUNsRCxJQUFqQixLQUEwQixzQkFBOUIsRUFBc0Q7WUFDckRvQyxhQUFhLENBQUNhLFlBQUQsQ0FBYixHQUE4QkYsU0FBUyxDQUFDSSxvQkFBVixDQUErQmQsWUFBWSxDQUFDWSxZQUFELENBQTNDLENBQTlCOztZQUNBLElBQUliLGFBQWEsQ0FBQ2EsWUFBRCxDQUFiLENBQTRCRyxTQUE1QixFQUFKLEVBQTZDO2NBQzVDaEIsYUFBYSxDQUFDYSxZQUFELENBQWIsR0FBOEJiLGFBQWEsQ0FBQ2EsWUFBRCxDQUFiLENBQTRCRyxTQUE1QixFQUE5QjtZQUNBLENBRkQsTUFFTztjQUNOO2NBQ0FoQixhQUFhLENBQUNhLFlBQUQsQ0FBYixHQUE4QnJGLFNBQVMsQ0FBQ3VGLG9CQUFWLENBQStCZCxZQUFZLENBQUNZLFlBQUQsQ0FBM0MsQ0FBOUI7WUFDQTtVQUNELENBUkQsTUFRTztZQUNOLElBQUlJLE1BQU0sR0FBR2hCLFlBQVksQ0FBQ1ksWUFBRCxDQUF6Qjs7WUFDQSxJQUFJLE9BQU9JLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7Y0FDL0JBLE1BQU0sR0FBR0Msb0JBQW9CLENBQUNELE1BQUQsRUFBU0gsZ0JBQWdCLENBQUNsRCxJQUExQixDQUE3QjtZQUNBOztZQUNEb0MsYUFBYSxDQUFDYSxZQUFELENBQWIsR0FBOEJJLE1BQTlCO1VBQ0E7UUFDRDs7UUFDRCxLQUFLLElBQU1FLFNBQVgsSUFBd0JyQixPQUFPLENBQUM3QyxRQUFSLENBQWlCRyxNQUF6QyxFQUFpRDtVQUNoRCxJQUFJNkMsWUFBWSxDQUFDa0IsU0FBRCxDQUFaLElBQTJCbEIsWUFBWSxDQUFDa0IsU0FBRCxDQUFaLENBQXdCQyxVQUF4QixDQUFtQyxHQUFuQyxDQUEvQixFQUF3RTtZQUN2RXBCLGFBQWEsQ0FBQ21CLFNBQUQsQ0FBYixHQUEyQkUsVUFBVSxDQUFDQyxHQUFYLENBQWVyQixZQUFZLENBQUNrQixTQUFELENBQVosQ0FBd0JJLFNBQXhCLENBQWtDLENBQWxDLENBQWYsRUFBcURqSCxTQUFTLENBQUNpRyxjQUFWLENBQXlCaUIsYUFBekIsRUFBckQsQ0FBM0I7VUFDQSxDQUZELE1BRU87WUFDTnhCLGFBQWEsQ0FBQ21CLFNBQUQsQ0FBYixHQUEyQixFQUEzQixDQURNLENBQ3lCO1VBQy9CO1FBQ0Q7O1FBQ0QsdUJBQVFNLGFBQUQsQ0FBOENDLG9CQUE5QyxDQUNOLFlBQU07VUFDTCxPQUFPLElBQUk1QixPQUFKLENBQVlFLGFBQVosRUFBMkIyQixNQUEzQixDQUFrQ3JILFNBQVMsQ0FBQ2lHLGNBQTVDLEVBQTREOUYsWUFBNUQsQ0FBUDtRQUNBLENBSEssRUFJTjtVQUNDc0IsRUFBRSxFQUFFLFVBQVU2RixHQUFWLEVBQXVCO1lBQzFCLE9BQU90SCxTQUFTLENBQUNpRyxjQUFWLENBQXlCekUsUUFBekIsQ0FBa0M4RixHQUFsQyxDQUFQO1VBQ0EsQ0FIRjtVQUlDQyxRQUFRLEVBQUUsVUFBVUMsZUFBVixFQUFnQztZQUN6QyxJQUFNQyxlQUFlLEdBQUcsS0FBS0MsV0FBTCxHQUFtQkMsZUFBbkIsRUFBeEI7O1lBQ0EsZ0NBQW9DbkgsTUFBTSxDQUFDYSxJQUFQLENBQVlvRyxlQUFaLENBQXBDLGtDQUFrRTtjQUE3RCxJQUFNRyxxQkFBcUIsbUJBQTNCOztjQUNKLElBQUlKLGVBQWUsQ0FBQ3hGLGNBQWhCLENBQStCNEYscUJBQS9CLENBQUosRUFBMkQ7Z0JBQzFESixlQUFlLENBQUNJLHFCQUFELENBQWYsR0FBeUM1SCxTQUFTLENBQUNpRyxjQUFWLENBQXlCekUsUUFBekIsQ0FDeENnRyxlQUFlLENBQUNJLHFCQUFELENBRHlCLENBQXpDO2NBR0E7WUFDRDs7WUFDRCxPQUFPSixlQUFQO1VBQ0E7UUFkRixDQUpNLENBQVA7TUFxQkEsQ0F2REc7UUFBQTtNQUFBO0lBQUE7RUFKa0MsQ0FBdkMifQ==
@@ -1,11 +1,23 @@
1
1
  import deepClone from "sap/base/util/deepClone";
2
- import { registerBuildingBlock } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
2
+ import merge from "sap/base/util/merge";
3
+ import ObjectPath from "sap/base/util/ObjectPath";
4
+ import { registerBuildingBlock, xml } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
5
+ import CommonUtils from "sap/fe/core/CommonUtils";
6
+ import { BindingToolkitExpression, resolveBindingString } from "sap/fe/core/helpers/BindingToolkit";
3
7
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
8
+ import ManagedObject from "sap/ui/base/ManagedObject";
9
+ import Component from "sap/ui/core/Component";
10
+ import Fragment from "sap/ui/core/Fragment";
11
+ import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
12
+ import type { ManagedObjectEx } from "types/extension_types";
13
+ import ConverterContext from "../converters/ConverterContext";
4
14
  /**
5
15
  * Base class for Building Block
6
16
  */
7
17
  export class BuildingBlockBase {
8
- constructor(oProps: Record<string, any>) {
18
+ protected isPublic = false;
19
+ protected id!: string;
20
+ constructor(oProps: Record<string, any>, _oControlConfig?: any, _oSettings?: any) {
9
21
  Object.keys(oProps).forEach((propName) => {
10
22
  this[propName as keyof this] = oProps[propName];
11
23
  });
@@ -24,9 +36,8 @@ export class BuildingBlockBase {
24
36
  }
25
37
  return undefined;
26
38
  }
27
- /*
28
39
  // This block is commented out because I am not using them for now / need to change this but still want to keep them around
29
- static getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
40
+ protected getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
30
41
  const oAppComponent = mSettings.appComponent;
31
42
  const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
32
43
  let viewData = Object.assign({}, originalViewData);
@@ -42,30 +53,35 @@ export class BuildingBlockBase {
42
53
  viewData
43
54
  );
44
55
  };
45
- static getMetadata() {
46
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
47
- // @ts-ignore
48
- // eslint-disable-next-line @typescript-eslint/no-this-alias
49
- return {
50
- getAllProperties(this: BuildingBlockDefinition) {
51
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
52
- // @ts-ignore
53
- return this.metadata.properties;
54
- },
55
- getName(this: BuildingBlockDefinition) {
56
- return `${this.namespace}.${this.name}`;
57
- },
58
- getAllAggregations() {
59
- return {};
60
- },
61
- getDefaultAggregationName() {
62
- return "";
56
+ public getProperties() {
57
+ const allProperties: Record<string, any> = {};
58
+ for (const oInstanceKey in this) {
59
+ if (this.hasOwnProperty(oInstanceKey)) {
60
+ allProperties[oInstanceKey] = this[oInstanceKey];
63
61
  }
64
- };
65
- }*/
62
+ }
63
+ return allProperties;
64
+ }
66
65
  static register() {
67
66
  // To be overriden
68
67
  }
68
+ static unregister() {
69
+ // To be overriden
70
+ }
71
+ public addConditionally(condition?: boolean, partToAdd?: any) {
72
+ if (condition) {
73
+ return partToAdd;
74
+ } else {
75
+ return "";
76
+ }
77
+ }
78
+ protected attr(attributeName: string, value: any) {
79
+ if (value !== undefined) {
80
+ return `${attributeName}="${value}"`;
81
+ } else {
82
+ return "";
83
+ }
84
+ }
69
85
  }
70
86
 
71
87
  export type BuildingBlockPropertyDefinition = {
@@ -89,6 +105,7 @@ export type BuildingBlockAggregationDefinition = {
89
105
  isPublic?: boolean;
90
106
  type: string;
91
107
  slot?: string;
108
+ isDefault?: boolean;
92
109
  };
93
110
  type CommonBuildingBlockDefinition = {
94
111
  namespace: string;
@@ -97,6 +114,7 @@ type CommonBuildingBlockDefinition = {
97
114
  fragment?: string;
98
115
  publicNamespace?: string;
99
116
 
117
+ isRuntime?: boolean;
100
118
  isOpen?: boolean;
101
119
  };
102
120
  export type BuildingBlockDefinitionV2 = CommonBuildingBlockDefinition &
@@ -119,6 +137,8 @@ export type BuildingBlockMetadata = {
119
137
  aggregations: Record<string, BuildingBlockAggregationDefinition>;
120
138
  };
121
139
 
140
+ export type BuildingBlockProperty<T> = T | BindingToolkitExpression<T>;
141
+
122
142
  const ensureMetadata = function (target: any): BuildingBlockMetadata {
123
143
  if (!target.hasOwnProperty("metadata")) {
124
144
  target.metadata = deepClone(
@@ -161,7 +181,24 @@ export function xmlEvent(): PropertyDecorator {
161
181
  return propertyDescriptor;
162
182
  } as any;
163
183
  }
184
+ /**
185
+ * Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
186
+ *
187
+ * @param aggregationDefinition
188
+ * @returns The decorated property
189
+ */
190
+ export function xmlAggregation(aggregationDefinition: BuildingBlockAggregationDefinition): PropertyDecorator {
191
+ return function (target: BuildingBlockBase, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<any>) {
192
+ const metadata = ensureMetadata(target.constructor);
193
+ delete (propertyDescriptor as any).initializer;
194
+ if (!metadata.aggregations[propertyKey]) {
195
+ metadata.aggregations[propertyKey] = aggregationDefinition;
196
+ }
164
197
 
198
+ return propertyDescriptor;
199
+ } as any;
200
+ }
201
+ const RUNTIME_BLOCKS: Record<string, BuildingBlockDefinition> = {};
165
202
  export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBlockDefinition) {
166
203
  return function (classDefinition: any) {
167
204
  ensureMetadata(classDefinition);
@@ -170,9 +207,110 @@ export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBloc
170
207
  classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
171
208
  classDefinition.fragment = oBuildingBlockDefinition.fragment;
172
209
  classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
210
+ classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
173
211
  classDefinition.apiVersion = 2;
212
+ if (classDefinition.isRuntime) {
213
+ classDefinition.prototype.getTemplate = function (this: any) {
214
+ const className = `${oBuildingBlockDefinition.namespace}.${oBuildingBlockDefinition.name}`;
215
+ const extraProps = [];
216
+ for (const propertiesKey in classDefinition.metadata.properties) {
217
+ let propertyValue = this[propertiesKey];
218
+ if (propertyValue !== undefined) {
219
+ if (propertyValue.isA?.("sap.ui.model.Context")) {
220
+ propertyValue = propertyValue.getPath();
221
+ }
222
+ extraProps.push(xml`feBB:${propertiesKey}="${propertyValue}"`);
223
+ }
224
+ }
225
+ for (const eventsKey in classDefinition.metadata.events) {
226
+ const eventsValue = this[eventsKey];
227
+ if (eventsValue !== undefined) {
228
+ extraProps.push(xml`feBB:${eventsKey}="${eventsValue}"`);
229
+ }
230
+ }
231
+ return xml`<core:Fragment
232
+ xmlns:core="sap.ui.core"
233
+ xmlns:feBB="sap.fe.core.buildingBlocks"
234
+ fragmentName="${className}"
235
+ id="{this>id}"
236
+ type="FE_COMPONENTS"
237
+ ${extraProps}
238
+ >
239
+ </core:Fragment>`;
240
+ };
241
+ }
242
+
174
243
  classDefinition.register = function () {
175
244
  registerBuildingBlock(classDefinition);
245
+ if (classDefinition.isRuntime) {
246
+ RUNTIME_BLOCKS[oBuildingBlockDefinition.namespace + "." + oBuildingBlockDefinition.name] = classDefinition;
247
+ }
248
+ };
249
+ classDefinition.unregister = function () {
250
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
251
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
176
252
  };
177
253
  };
178
254
  }
255
+
256
+ Fragment.registerType("FE_COMPONENTS", {
257
+ load: async function (mSettings: any) {
258
+ return RUNTIME_BLOCKS[mSettings.fragmentName];
259
+ },
260
+ init: async function (mSettings: any) {
261
+ const myClass = mSettings.fragmentContent;
262
+ const classSettings: any = {};
263
+ const feCustomData = mSettings?.customData?.[0]?.mProperties?.value?.["sap.fe.core.buildingBlocks"] || {};
264
+ delete mSettings.customData;
265
+ const pageComponent = Component.getOwnerComponentFor(mSettings.containingView) as any;
266
+ const appComponent = CommonUtils.getAppComponent(mSettings.containingView);
267
+ const metaModel = appComponent.getMetaModel();
268
+ const pageModel = pageComponent.getModel("_pageModel");
269
+ for (const propertyName in myClass.metadata.properties) {
270
+ const propertyMetadata = myClass.metadata.properties[propertyName];
271
+ if (propertyMetadata.type === "sap.ui.model.Context") {
272
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
273
+ if (classSettings[propertyName].getObject()) {
274
+ classSettings[propertyName] = classSettings[propertyName].getObject();
275
+ } else {
276
+ // bind to metamodel
277
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
278
+ }
279
+ } else {
280
+ let vValue = feCustomData[propertyName];
281
+ if (typeof vValue === "string") {
282
+ vValue = resolveBindingString(vValue, propertyMetadata.type);
283
+ }
284
+ classSettings[propertyName] = vValue;
285
+ }
286
+ }
287
+ for (const eventName in myClass.metadata.events) {
288
+ if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
289
+ classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
290
+ } else {
291
+ classSettings[eventName] = ""; // For now, might need to resolve more stuff
292
+ }
293
+ }
294
+ return (ManagedObject as unknown as ManagedObjectEx).runWithPreprocessors(
295
+ () => {
296
+ return new myClass(classSettings).render(mSettings.containingView, appComponent);
297
+ },
298
+ {
299
+ id: function (sId: string) {
300
+ return mSettings.containingView.createId(sId);
301
+ },
302
+ settings: function (controlSettings: any) {
303
+ const allAssociations = this.getMetadata().getAssociations();
304
+ for (const associationDetailName of Object.keys(allAssociations)) {
305
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
306
+ controlSettings[associationDetailName] = mSettings.containingView.createId(
307
+ controlSettings[associationDetailName]
308
+ );
309
+ }
310
+ }
311
+ return controlSettings;
312
+ }
313
+ }
314
+ );
315
+ }
316
+ });
@@ -0,0 +1,14 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ return {
9
+ base64Decode: function (base64) {
10
+ return atob(base64);
11
+ }
12
+ };
13
+ }, false);
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlNjREZWNvZGUiLCJiYXNlNjQiLCJhdG9iIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcblx0YmFzZTY0RGVjb2RlOiAoYmFzZTY0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gYXRvYihiYXNlNjQpO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O1NBQWU7SUFDZEEsWUFBWSxFQUFFLFVBQUNDLE1BQUQsRUFBb0I7TUFDakMsT0FBT0MsSUFBSSxDQUFDRCxNQUFELENBQVg7SUFDQTtFQUhhLEMifQ==
@@ -0,0 +1,5 @@
1
+ export default {
2
+ base64Decode: (base64: string) => {
3
+ return atob(base64);
4
+ }
5
+ };