@sapui5/sap.fe.core 1.102.0 → 1.103.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 (311) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +62 -26
  4. package/src/sap/fe/core/AppComponent.ts +56 -40
  5. package/src/sap/fe/core/AppStateHandler.js +10 -10
  6. package/src/sap/fe/core/AppStateHandler.ts +9 -9
  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 +236 -109
  10. package/src/sap/fe/core/CommonUtils.ts +252 -136
  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/BuildingBlockRuntime.js +8 -8
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
  26. package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
  27. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  28. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  29. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
  30. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
  31. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
  32. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
  33. package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
  34. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
  35. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  36. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  37. package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
  38. package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  47. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  49. package/src/sap/fe/core/controllerextensions/Share.js +22 -22
  50. package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  60. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  62. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
  69. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  70. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
  75. package/src/sap/fe/core/controls/Any.js +9 -5
  76. package/src/sap/fe/core/controls/Any.ts +10 -4
  77. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  78. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  81. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  83. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  85. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  89. package/src/sap/fe/core/controls/FileWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
  91. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  92. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  93. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  94. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  95. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  96. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  97. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  98. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  100. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  102. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
  104. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  107. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  108. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  109. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  112. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  113. package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
  114. package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
  115. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  116. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  117. package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
  118. package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
  119. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  120. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  121. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  122. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  123. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
  124. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  125. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  126. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  127. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  128. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
  129. package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
  130. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  131. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  132. package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
  133. package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  135. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  137. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
  138. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  139. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  140. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  141. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  142. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  143. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  144. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
  145. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
  146. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  147. package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
  148. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  150. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  152. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  153. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  154. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  155. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  156. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  157. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  158. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  159. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  160. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  161. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  162. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  163. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  164. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  165. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  166. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  167. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  168. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  169. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  170. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  171. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  172. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  173. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  174. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  175. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  176. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  177. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  178. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  179. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  180. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  181. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  182. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  183. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
  184. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  185. package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
  186. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  187. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  188. package/src/sap/fe/core/helpers/EditState.js +1 -6
  189. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  190. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  191. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  192. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  194. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  195. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  196. package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
  197. package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
  198. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  199. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  200. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  201. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  202. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  203. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  204. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  205. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  206. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  208. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  209. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  210. package/src/sap/fe/core/library.js +42 -3
  211. package/src/sap/fe/core/library.ts +38 -0
  212. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  213. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  214. package/src/sap/fe/core/messagebundle.properties +49 -35
  215. package/src/sap/fe/core/messagebundle_ar.properties +13 -5
  216. package/src/sap/fe/core/messagebundle_bg.properties +13 -5
  217. package/src/sap/fe/core/messagebundle_ca.properties +13 -5
  218. package/src/sap/fe/core/messagebundle_cs.properties +13 -5
  219. package/src/sap/fe/core/messagebundle_cy.properties +14 -6
  220. package/src/sap/fe/core/messagebundle_da.properties +13 -5
  221. package/src/sap/fe/core/messagebundle_de.properties +15 -7
  222. package/src/sap/fe/core/messagebundle_el.properties +14 -6
  223. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  224. package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
  225. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
  226. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
  227. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
  228. package/src/sap/fe/core/messagebundle_es.properties +13 -5
  229. package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
  230. package/src/sap/fe/core/messagebundle_et.properties +13 -5
  231. package/src/sap/fe/core/messagebundle_fi.properties +14 -6
  232. package/src/sap/fe/core/messagebundle_fr.properties +14 -6
  233. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
  234. package/src/sap/fe/core/messagebundle_hi.properties +14 -6
  235. package/src/sap/fe/core/messagebundle_hr.properties +14 -6
  236. package/src/sap/fe/core/messagebundle_hu.properties +13 -5
  237. package/src/sap/fe/core/messagebundle_id.properties +13 -5
  238. package/src/sap/fe/core/messagebundle_it.properties +33 -25
  239. package/src/sap/fe/core/messagebundle_iw.properties +13 -5
  240. package/src/sap/fe/core/messagebundle_ja.properties +14 -6
  241. package/src/sap/fe/core/messagebundle_kk.properties +13 -5
  242. package/src/sap/fe/core/messagebundle_ko.properties +13 -5
  243. package/src/sap/fe/core/messagebundle_lt.properties +13 -5
  244. package/src/sap/fe/core/messagebundle_lv.properties +14 -6
  245. package/src/sap/fe/core/messagebundle_ms.properties +13 -5
  246. package/src/sap/fe/core/messagebundle_nl.properties +13 -5
  247. package/src/sap/fe/core/messagebundle_no.properties +13 -5
  248. package/src/sap/fe/core/messagebundle_pl.properties +13 -5
  249. package/src/sap/fe/core/messagebundle_pt.properties +13 -5
  250. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
  251. package/src/sap/fe/core/messagebundle_ro.properties +13 -5
  252. package/src/sap/fe/core/messagebundle_ru.properties +13 -5
  253. package/src/sap/fe/core/messagebundle_sh.properties +13 -5
  254. package/src/sap/fe/core/messagebundle_sk.properties +13 -5
  255. package/src/sap/fe/core/messagebundle_sl.properties +17 -9
  256. package/src/sap/fe/core/messagebundle_sv.properties +14 -6
  257. package/src/sap/fe/core/messagebundle_th.properties +13 -5
  258. package/src/sap/fe/core/messagebundle_tr.properties +13 -5
  259. package/src/sap/fe/core/messagebundle_uk.properties +13 -5
  260. package/src/sap/fe/core/messagebundle_vi.properties +13 -5
  261. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
  262. package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
  263. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  269. package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
  270. package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
  271. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
  276. package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  278. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
  281. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  282. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  285. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  288. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  289. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  290. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  291. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  292. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  294. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  295. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  296. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  297. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  298. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  299. package/src/sap/fe/core/templating/FilterHelper.js +10 -9
  300. package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
  301. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  302. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  303. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  304. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  305. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  306. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  307. package/src/sap/fe/core/templating/UIFormatters.js +148 -93
  308. package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
  309. package/src/sap/fe/core/type/Email.js +2 -2
  310. package/src/sap/fe/core/type/Email.ts +2 -2
  311. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -14,9 +14,9 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
14
14
  /**
15
15
  * Creates a wrapper object to ensure the data returned from the manifest is consistent and everything is merged correctly.
16
16
  *
17
- * @param {BaseManifestSettings} oManifestSettings The manifest settings for the current page
18
- * @param {Function} mergeFn A function that will be used to perform the merge
19
- * @returns {ManifestWrapper} The manifest wrapper object
17
+ * @param oManifestSettings The manifest settings for the current page
18
+ * @param mergeFn A function that will be used to perform the merge
19
+ * @returns The manifest wrapper object
20
20
  */
21
21
  function ManifestWrapper(oManifestSettings, mergeFn) {
22
22
  this.oManifestSettings = oManifestSettings;
@@ -37,7 +37,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
37
37
  /**
38
38
  * Checks whether the current template should display the filter bar.
39
39
  *
40
- * @returns {boolean} `true` if the filter bar should be hidden
40
+ * @returns `true` if the filter bar should be hidden
41
41
  */
42
42
  ;
43
43
 
@@ -49,7 +49,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
49
49
  /**
50
50
  * Checks whether the current environment is a desktop or not.
51
51
  *
52
- * @returns {boolean} `true` if we are on a desktop
52
+ * @returns `true` if we are on a desktop
53
53
  */
54
54
  ;
55
55
 
@@ -59,7 +59,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
59
59
  /**
60
60
  * Checks whether the current environment is a mobile phone or not.
61
61
  *
62
- * @returns {boolean} `true` if we are on a mobile phone
62
+ * @returns `true` if we are on a mobile phone
63
63
  */
64
64
  ;
65
65
 
@@ -69,8 +69,8 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
69
69
  /**
70
70
  * Retrieves the form containers (field groups or identification) defined in the manifest.
71
71
  *
72
- * @param {string} facetTarget The target annotation path for this form
73
- * @returns {FormManifestConfiguration} A set of form containers defined in the manifest indexed by an iterable key
72
+ * @param facetTarget The target annotation path for this form
73
+ * @returns A set of form containers defined in the manifest indexed by an iterable key
74
74
  */
75
75
  ;
76
76
 
@@ -82,7 +82,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
82
82
  /**
83
83
  * Retrieves the header facets defined in the manifest.
84
84
  *
85
- * @returns {ConfigurableRecord<ManifestHeaderFacet>} A set of header facets defined in the manifest indexed by an iterable key
85
+ * @returns A set of header facets defined in the manifest indexed by an iterable key
86
86
  */
87
87
  ;
88
88
 
@@ -94,7 +94,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
94
94
  /**
95
95
  * Retrieves the header actions defined in the manifest.
96
96
  *
97
- * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
97
+ * @returns A set of actions defined in the manifest indexed by an iterable key
98
98
  */
99
99
  ;
100
100
 
@@ -106,7 +106,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
106
106
  /**
107
107
  * Retrieves the footer actions defined in the manifest.
108
108
  *
109
- * @returns {ConfigurableRecord<ManifestAction>} A set of actions defined in the manifest indexed by an iterable key
109
+ * @returns A set of actions defined in the manifest indexed by an iterable key
110
110
  */
111
111
  ;
112
112
 
@@ -118,7 +118,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
118
118
  /**
119
119
  * Retrieves the variant management as defined in the manifest.
120
120
  *
121
- * @returns {VariantManagementType} A type of variant management
121
+ * @returns A type of variant management
122
122
  */
123
123
  ;
124
124
 
@@ -128,7 +128,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
128
128
  /**
129
129
  * Retrieves the annotation Path for the SPV in the manifest.
130
130
  *
131
- * @returns {string|undefined} The annotation path for the default SPV or undefined.
131
+ * @returns The annotation path for the default SPV or undefined.
132
132
  */
133
133
  ;
134
134
 
@@ -138,9 +138,9 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
138
138
  /**
139
139
  * Retrieves the control configuration as defined in the manifest for a specific annotation path.
140
140
  *
141
- * @param {string} sAnnotationPath The relative annotation path
141
+ * @param sAnnotationPath The relative annotation path
142
142
  * @private
143
- * @returns {object} The control configuration
143
+ * @returns The control configuration
144
144
  */
145
145
  ;
146
146
 
@@ -152,8 +152,8 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
152
152
  /**
153
153
  * Retrieves the configured settings for a given navigation target.
154
154
  *
155
- * @param {string} navigationOrCollectionName The name of the navigation to check
156
- * @returns {NavigationSettingsConfiguration} The navigation settings configuration
155
+ * @param navigationOrCollectionName The name of the navigation to check
156
+ * @returns The navigation settings configuration
157
157
  */
158
158
  ;
159
159
 
@@ -165,7 +165,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
165
165
  /**
166
166
  * Retrieves the view level.
167
167
  *
168
- * @returns {number} The current view level
168
+ * @returns The current view level
169
169
  */
170
170
  ;
171
171
 
@@ -177,7 +177,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
177
177
  /**
178
178
  * Retrieves the contentDensities setting of the application.
179
179
  *
180
- * @returns {ContentDensitiesType} The current content density
180
+ * @returns The current content density
181
181
  */
182
182
  ;
183
183
 
@@ -192,7 +192,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
192
192
  /**
193
193
  * Checks whether we are in FCL mode or not.
194
194
  *
195
- * @returns {boolean} `true` if we are in FCL
195
+ * @returns `true` if we are in FCL
196
196
  */
197
197
  ;
198
198
 
@@ -204,7 +204,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
204
204
  /**
205
205
  * Checks whether the current settings (application / shell) allows us to use condensed layout.
206
206
  *
207
- * @returns {boolean} `true` if we can use the condensed layout, false otherwise
207
+ * @returns `true` if we can use the condensed layout, false otherwise
208
208
  */
209
209
  ;
210
210
 
@@ -223,24 +223,38 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
223
223
  }
224
224
 
225
225
  return isCondensedLayoutCompliant;
226
+ }
227
+ /**
228
+ * Checks whether the current settings (application / shell) uses compact mode as content density.
229
+ *
230
+ * @returns `true` if compact mode is set as content density, false otherwise
231
+ */
232
+ ;
233
+
234
+ _proto.isCompactType = function isCompactType() {
235
+ var _this$oManifestSettin18;
236
+
237
+ var manifestContentDensity = this.getContentDensities();
238
+ var shellContentDensity = ((_this$oManifestSettin18 = this.oManifestSettings) === null || _this$oManifestSettin18 === void 0 ? void 0 : _this$oManifestSettin18.shellContentDensity) || "compact";
239
+ return manifestContentDensity.compact !== false || shellContentDensity === "compact" ? true : false;
226
240
  } //region OP Specific
227
241
 
228
242
  /**
229
243
  * Retrieves the sections defined in the manifest.
230
244
  *
231
- * @returns {ConfigurableRecord<ManifestSection>} A set of manifest sections indexed by an iterable key
245
+ * @returns A set of manifest sections indexed by an iterable key
232
246
  */
233
247
  ;
234
248
 
235
249
  _proto.getSections = function getSections() {
236
- var _this$oManifestSettin18, _this$oManifestSettin19, _content2, _content2$body;
250
+ var _this$oManifestSettin19, _this$oManifestSettin20, _content2, _content2$body;
237
251
 
238
- return this.mergeFn({}, (_this$oManifestSettin18 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin18 === void 0 ? void 0 : (_this$oManifestSettin19 = _this$oManifestSettin18["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin19 === void 0 ? void 0 : _this$oManifestSettin19.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
252
+ return this.mergeFn({}, (_this$oManifestSettin19 = this.oManifestSettings.controlConfiguration) === null || _this$oManifestSettin19 === void 0 ? void 0 : (_this$oManifestSettin20 = _this$oManifestSettin19["@com.sap.vocabularies.UI.v1.Facets"]) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.sections, (_content2 = this.oManifestSettings.content) === null || _content2 === void 0 ? void 0 : (_content2$body = _content2.body) === null || _content2$body === void 0 ? void 0 : _content2$body.sections);
239
253
  }
240
254
  /**
241
255
  * Returns true of the header of the application is editable and should appear in the facets.
242
256
  *
243
- * @returns {boolean} `true` if the header if editable
257
+ * @returns `true` if the header if editable
244
258
  */
245
259
  ;
246
260
 
@@ -250,7 +264,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
250
264
  /**
251
265
  * Returns true if we should show the object page header.
252
266
  *
253
- * @returns {boolean} `true` if the header should be displayed
267
+ * @returns `true` if the header should be displayed
254
268
  */
255
269
  ;
256
270
 
@@ -262,7 +276,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
262
276
  /**
263
277
  * Defines whether or not the section will be displayed in different tabs.
264
278
  *
265
- * @returns {boolean} `true` if the icon tab bar should be used instead of scrolling
279
+ * @returns `true` if the icon tab bar should be used instead of scrolling
266
280
  */
267
281
  ;
268
282
 
@@ -272,7 +286,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
272
286
  /**
273
287
  * Returns true if the object page header is to be shown.
274
288
  *
275
- * @returns {boolean} `true` if the object page header is to be displayed
289
+ * @returns `true` if the object page header is to be displayed
276
290
  */
277
291
  ;
278
292
 
@@ -286,7 +300,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
286
300
  /**
287
301
  * Retrieves the multiple view configuration from the manifest.
288
302
  *
289
- * @returns {MultipleViewsConfiguration} The views that represent the manifest object
303
+ * @returns The views that represent the manifest object
290
304
  */
291
305
  ;
292
306
 
@@ -296,7 +310,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
296
310
  /**
297
311
  * Retrieves the stickyMultiTabHeader configuration from the manifest.
298
312
  *
299
- * @returns {boolean} Returns True if stickyMultiTabHeader is enabled or undefined
313
+ * @returns Returns True if stickyMultiTabHeader is enabled or undefined
300
314
  */
301
315
  ;
302
316
 
@@ -307,7 +321,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
307
321
  /**
308
322
  * Retrieves the KPI configuration from the manifest.
309
323
  *
310
- * @returns {object} Returns a map between KPI names and their respective configuration
324
+ * @returns Returns a map between KPI names and their respective configuration
311
325
  */
312
326
  ;
313
327
 
@@ -317,7 +331,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
317
331
  /**
318
332
  * Retrieves the filter configuration from the manifest.
319
333
  *
320
- * @returns {FilterManifestConfiguration} The filter configuration from the manifest
334
+ * @returns The filter configuration from the manifest
321
335
  */
322
336
  ;
323
337
 
@@ -327,7 +341,7 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
327
341
  /**
328
342
  * Returns true if there are multiple entity sets to be displayed.
329
343
  *
330
- * @returns {boolean} `true` if there are multiple entity sets
344
+ * @returns `true` if there are multiple entity sets
331
345
  */
332
346
  ;
333
347
 
@@ -347,10 +361,10 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
347
361
  var _ref = path,
348
362
  primary = _ref.primary,
349
363
  secondary = _ref.secondary;
350
- return primary.some(function (path) {
351
- return path.entitySet && path.entitySet !== manifestEntitySet;
352
- }) || secondary.some(function (path) {
353
- return path.entitySet && path.entitySet !== manifestEntitySet;
364
+ return primary.some(function (primaryPath) {
365
+ return primaryPath.entitySet && primaryPath.entitySet !== manifestEntitySet;
366
+ }) || secondary.some(function (secondaryPath) {
367
+ return secondaryPath.entitySet && secondaryPath.entitySet !== manifestEntitySet;
354
368
  });
355
369
  } else {
356
370
  path = path;
@@ -361,20 +375,20 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
361
375
  /**
362
376
  * Returns the context path for the template if it is specified in the manifest.
363
377
  *
364
- * @returns {string} The context path for the template
378
+ * @returns The context path for the template
365
379
  */
366
380
  ;
367
381
 
368
382
  _proto.getContextPath = function getContextPath() {
369
- var _this$oManifestSettin20;
383
+ var _this$oManifestSettin21;
370
384
 
371
- return (_this$oManifestSettin20 = this.oManifestSettings) === null || _this$oManifestSettin20 === void 0 ? void 0 : _this$oManifestSettin20.contextPath;
385
+ return (_this$oManifestSettin21 = this.oManifestSettings) === null || _this$oManifestSettin21 === void 0 ? void 0 : _this$oManifestSettin21.contextPath;
372
386
  }
373
387
  /**
374
388
  * Returns true if there are multiple visualizations.
375
389
  *
376
- * @param {ViewPathConfiguration} path The path from the view
377
- * @returns {boolean} `true` if there are multiple visualizations
390
+ * @param path The path from the view
391
+ * @returns `true` if there are multiple visualizations
378
392
  */
379
393
  ;
380
394
 
@@ -385,10 +399,10 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
385
399
  var viewConfig = this.getViewConfiguration() || {
386
400
  paths: []
387
401
  };
388
- return viewConfig.paths.some(function (path) {
402
+ return viewConfig.paths.some(function (viewPath) {
389
403
  var _primary, _secondary;
390
404
 
391
- return ((_primary = path.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = path.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
405
+ return ((_primary = viewPath.primary) === null || _primary === void 0 ? void 0 : _primary.length) > 0 && ((_secondary = viewPath.secondary) === null || _secondary === void 0 ? void 0 : _secondary.length) > 0;
392
406
  });
393
407
  }
394
408
 
@@ -401,4 +415,4 @@ sap.ui.define(["sap/fe/core/converters/ManifestSettings"], function (ManifestSet
401
415
 
402
416
  return ManifestWrapper;
403
417
  }, false);
404
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0SGVhZGVyRmFjZXRzIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRTZWN0aW9ucyIsInNlY3Rpb25zIiwiYm9keSIsImlzSGVhZGVyRWRpdGFibGUiLCJnZXRTaG93T2JqZWN0UGFnZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImdldFNob3dBbmNob3JCYXIiLCJhbmNob3JCYXJWaXNpYmxlIiwidW5kZWZpbmVkIiwidXNlSWNvblRhYkJhciIsInNlY3Rpb25MYXlvdXQiLCJ2aXNpYmxlIiwiZ2V0Vmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3cyIsImdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbiIsImJTdGlja3lNdWx0aVRhYkhlYWRlciIsInN0aWNreU11bHRpVGFiSGVhZGVyIiwiZ2V0S1BJQ29uZmlndXJhdGlvbiIsImtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJ2aWV3Q29uZmlnIiwicGF0aHMiLCJtYW5pZmVzdEVudGl0eVNldCIsImVudGl0eVNldCIsImZpbmQiLCJwYXRoIiwidGVtcGxhdGUiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInNvbWUiLCJnZXRDb250ZXh0UGF0aCIsImNvbnRleHRQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFxQkE7QUFDQTtBQUNBO01BQ01BLGU7QUFDTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLDZCQUFvQkMsaUJBQXBCLEVBQXFFQyxPQUFyRSxFQUF3RjtBQUFBLFdBQXBFRCxpQkFBb0UsR0FBcEVBLGlCQUFvRTtBQUFBLFdBQW5CQyxPQUFtQixHQUFuQkEsT0FBbUI7QUFBRTtBQUUxRjtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztXQUNDQyxlLEdBQUEsMkJBQWdDO0FBQy9CLGFBQU8sS0FBS0YsaUJBQUwsQ0FBdUJHLGFBQTlCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsaUIsR0FBQSw2QkFBNkI7QUFBQTs7QUFDNUIsYUFBTyxDQUFDLDJCQUFFLEtBQUtKLGlCQUFQLGtEQUFDLHNCQUF3REssYUFBekQsQ0FBUjtBQUNBO0FBRUQ7QUFD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O0FBQ0E7QUFDRCxPQWJELE1BYU9mLFNBZFI7QUFnQkE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ3dCLGMsR0FBQSwwQkFBcUM7QUFBQTs7QUFDcEMsd0NBQU8sS0FBS3pFLGlCQUFaLDREQUFPLHdCQUF3QjBFLFdBQS9CO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNDTCx5QixHQUFBLG1DQUEwQkYsSUFBMUIsRUFBaUU7QUFBQTs7QUFDaEUsVUFBSSxDQUFDQSxJQUFMLEVBQVc7QUFDVixZQUFNTCxVQUFVLEdBQUcsS0FBS1Qsb0JBQUwsTUFBK0I7QUFBRVUsVUFBQUEsS0FBSyxFQUFFO0FBQVQsU0FBbEQ7QUFDQSxlQUFPRCxVQUFVLENBQUNDLEtBQVgsQ0FBaUJTLElBQWpCLENBQXNCLFVBQUFMLElBQUksRUFBSTtBQUFBOztBQUNwQyxpQkFDQyxhQUFDQSxJQUFELENBQXdDRyxPQUF4QyxzREFBaURLLE1BQWpELElBQTBELENBQTFELElBQ0EsZUFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsMERBQW1ESSxNQUFuRCxJQUE0RCxDQUY3RDtBQUlBLFNBTE0sQ0FBUDtBQU1BOztBQUNELGFBQU8sY0FBQ1IsSUFBRCxDQUF3Q0csT0FBeEMsd0RBQWlESyxNQUFqRCxJQUEwRCxDQUExRCxJQUErRCxnQkFBQ1IsSUFBRCxDQUF3Q0ksU0FBeEMsNERBQW1ESSxNQUFuRCxJQUE0RCxDQUFsSTtBQUNBLEssQ0FFRDs7Ozs7O1NBR2M1RSxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHtcblx0QmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDb250ZW50RGVuc2l0aWVzVHlwZSxcblx0RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuXHRMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE1hbmlmZXN0SGVhZGVyRmFjZXQsXG5cdE1hbmlmZXN0U2VjdGlvbixcblx0TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUsXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdFZpZXdDb25maWd1cmF0aW9uLFxuXHRLUElDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBNYW5pZmVzdFdyYXBwZXIge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdyYXBwZXIgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBtYW5pZmVzdCBpcyBjb25zaXN0ZW50IGFuZCBldmVyeXRoaW5nIGlzIG1lcmdlZCBjb3JyZWN0bHkuXG5cdCAqXG5cdCAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBtYW5pZmVzdCBzZXR0aW5ncyBmb3IgdGhlIGN1cnJlbnQgcGFnZVxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBtZXJnZUZuIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgbWVyZ2Vcblx0ICogQHJldHVybnMge01hbmlmZXN0V3JhcHBlcn0gVGhlIG1hbmlmZXN0IHdyYXBwZXIgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIG9NYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncywgcHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbikge31cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCB0ZW1wbGF0ZSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCB0ZW1wbGF0ZVxuXHQgKi9cblx0Z2V0VGVtcGxhdGVUeXBlKCk6IFRlbXBsYXRlVHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCB0ZW1wbGF0ZSBzaG91bGQgZGlzcGxheSB0aGUgZmlsdGVyIGJhci5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgZmlsdGVyIGJhciBzaG91bGQgYmUgaGlkZGVuXG5cdCAqL1xuXHRpc0ZpbHRlckJhckhpZGRlbigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyk/LmhpZGVGaWx0ZXJCYXI7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBkZXNrdG9wIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBvbiBhIG1vYmlsZSBwaG9uZVxuXHQgKi9cblx0aXNQaG9uZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmlzUGhvbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmb3JtIGNvbnRhaW5lcnMgKGZpZWxkIGdyb3VwcyBvciBpZGVudGlmaWNhdGlvbikgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmYWNldFRhcmdldCBUaGUgdGFyZ2V0IGFubm90YXRpb24gcGF0aCBmb3IgdGhpcyBmb3JtXG5cdCAqIEByZXR1cm5zIHtGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9ufSBBIHNldCBvZiBmb3JtIGNvbnRhaW5lcnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEZvcm1Db250YWluZXIoZmFjZXRUYXJnZXQ6IHN0cmluZyk6IEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRyb2xDb25maWd1cmF0aW9uPy5bZmFjZXRUYXJnZXRdIGFzIEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb247XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0Pn0gQSBzZXQgb2YgaGVhZGVyIGZhY2V0cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0SGVhZGVyRmFjZXRzKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXT8uZmFjZXRzLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8uZmFjZXRzXG5cdFx0KTtcblx0fVxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBoZWFkZXIgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj59IEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Q29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPn0gQSBzZXQgb2YgYWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0Rm9vdGVyQWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RBY3Rpb24+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250ZW50Py5mb290ZXI/LmFjdGlvbnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtWYXJpYW50TWFuYWdlbWVudFR5cGV9IEEgdHlwZSBvZiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICovXG5cdGdldFZhcmlhbnRNYW5hZ2VtZW50KCk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MudmFyaWFudE1hbmFnZW1lbnQgfHwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBhbm5vdGF0aW9uIFBhdGggZm9yIHRoZSBTUFYgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gVGhlIGFubm90YXRpb24gcGF0aCBmb3IgdGhlIGRlZmF1bHQgU1BWIG9yIHVuZGVmaW5lZC5cblx0ICovXG5cdGdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIGEgc3BlY2lmaWMgYW5ub3RhdGlvbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Fubm90YXRpb25QYXRoIFRoZSByZWxhdGl2ZSBhbm5vdGF0aW9uIHBhdGhcblx0ICogQHByaXZhdGVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0Q29udHJvbENvbmZpZ3VyYXRpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250cm9sQ29uZmlndXJhdGlvbj8uW3NBbm5vdGF0aW9uUGF0aF0gfHwge307XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29uZmlndXJlZCBzZXR0aW5ncyBmb3IgYSBnaXZlbiBuYXZpZ2F0aW9uIHRhcmdldC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdmlnYXRpb25PckNvbGxlY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBuYXZpZ2F0aW9uIHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9ufSBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMge0NvbnRlbnREZW5zaXRpZXNUeXBlfSBUaGUgY3VycmVudCBjb250ZW50IGRlbnNpdHlcblx0ICovXG5cdGdldENvbnRlbnREZW5zaXRpZXMoKTogQ29udGVudERlbnNpdGllc1R5cGUge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdFx0Y296eTogZmFsc2UsXG5cdFx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciB3ZSBhcmUgaW4gRkNMIG1vZGUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgd2UgY2FuIHVzZSB0aGUgY29uZGVuc2VkIGxheW91dCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBtYW5pZmVzdENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRjb3p5OiBmYWxzZSxcblx0XHRcdGNvbXBhY3Q6IGZhbHNlXG5cdFx0fTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRsZXQgaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSB0cnVlO1xuXHRcdGlmICgobWFuaWZlc3RDb250ZW50RGVuc2l0eT8uY296eSA9PT0gdHJ1ZSAmJiBtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb21wYWN0ICE9PSB0cnVlKSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvenlcIikge1xuXHRcdFx0aXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQgPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50O1xuXHR9XG5cblx0Ly9yZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzZWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMge0NvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdFNlY3Rpb24+fSBBIHNldCBvZiBtYW5pZmVzdCBzZWN0aW9ucyBpbmRleGVkIGJ5IGFuIGl0ZXJhYmxlIGtleVxuXHQgKi9cblx0Z2V0U2VjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0U2VjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0/LnNlY3Rpb25zLFxuXHRcdFx0KHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmJvZHk/LnNlY3Rpb25zXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgb2YgdGhlIGhlYWRlciBvZiB0aGUgYXBwbGljYXRpb24gaXMgZWRpdGFibGUgYW5kIHNob3VsZCBhcHBlYXIgaW4gdGhlIGZhY2V0cy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaGVhZGVyIGlmIGVkaXRhYmxlXG5cdCAqL1xuXHRpc0hlYWRlckVkaXRhYmxlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dPYmplY3RQYWdlSGVhZGVyKCkgJiYgKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzaG93IHRoZSBvYmplY3QgcGFnZSBoZWFkZXIuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaWNvbiB0YWIgYmFyIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2Ygc2Nyb2xsaW5nXG5cdCAqL1xuXHR1c2VJY29uVGFiQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldFNob3dBbmNob3JCYXIoKSAmJiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgc2hvd24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdGdldFNob3dPYmplY3RQYWdlSGVhZGVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy52aXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvL2VuZHJlZ2lvbiBPUCBTcGVjaWZpY1xuXG5cdC8vcmVnaW9uIExSIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgbXVsdGlwbGUgdmlldyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7TXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb259IFRoZSB2aWV3cyB0aGF0IHJlcHJlc2VudCB0aGUgbWFuaWZlc3Qgb2JqZWN0XG5cdCAqL1xuXHRnZXRWaWV3Q29uZmlndXJhdGlvbigpOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS52aWV3cztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHN0aWNreU11bHRpVGFiSGVhZGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIFRydWUgaWYgc3RpY2t5TXVsdGlUYWJIZWFkZXIgaXMgZW5hYmxlZCBvciB1bmRlZmluZWRcblx0ICovXG5cdGdldFN0aWNreU11bHRpVGFiSGVhZGVyQ29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcblx0XHRjb25zdCBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgPSAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncykuc3RpY2t5TXVsdGlUYWJIZWFkZXI7XG5cdFx0cmV0dXJuIGJTdGlja3lNdWx0aVRhYkhlYWRlciAhPT0gdW5kZWZpbmVkID8gYlN0aWNreU11bHRpVGFiSGVhZGVyIDogdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEtQSSBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGEgbWFwIGJldHdlZW4gS1BJIG5hbWVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldEtQSUNvbmZpZ3VyYXRpb24oKTogeyBba3BpTmFtZTogc3RyaW5nXTogS1BJQ29uZmlndXJhdGlvbiB9IHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLmtleVBlcmZvcm1hbmNlSW5kaWNhdG9ycyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7RmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9ufSBUaGUgZmlsdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdGdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb250cm9sQ29uZmlndXJhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIik7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZW50aXR5IHNldHMgdG8gYmUgZGlzcGxheWVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUocGF0aCA9PiBwYXRoLmVudGl0eVNldCAmJiBwYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpIHx8XG5cdFx0XHRcdFx0XHRzZWNvbmRhcnkuc29tZShwYXRoID0+IHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRyZXR1cm4gcGF0aC5lbnRpdHlTZXQgJiYgcGF0aC5lbnRpdHlTZXQgIT09IG1hbmlmZXN0RW50aXR5U2V0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KSAhPT0gdW5kZWZpbmVkXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjb250ZXh0IHBhdGggZm9yIHRoZSB0ZW1wbGF0ZSBpZiBpdCBpcyBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGVcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/LmNvbnRleHRQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Vmlld1BhdGhDb25maWd1cmF0aW9ufSBwYXRoIFRoZSBwYXRoIGZyb20gdGhlIHZpZXdcblx0ICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZShwYXRoID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdChwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5zZWNvbmRhcnk/Lmxlbmd0aCA+IDBcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiYgKHBhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMDtcblx0fVxuXG5cdC8vZW5kIHJlZ2lvbiBMUiBTcGVjaWZpY1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pZmVzdFdyYXBwZXI7XG4iXX0=
418
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hbmlmZXN0V3JhcHBlci50cyJdLCJuYW1lcyI6WyJNYW5pZmVzdFdyYXBwZXIiLCJvTWFuaWZlc3RTZXR0aW5ncyIsIm1lcmdlRm4iLCJnZXRUZW1wbGF0ZVR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJoaWRlRmlsdGVyQmFyIiwiaXNEZXNrdG9wIiwiaXNQaG9uZSIsImdldEZvcm1Db250YWluZXIiLCJmYWNldFRhcmdldCIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0SGVhZGVyRmFjZXRzIiwiZmFjZXRzIiwiY29udGVudCIsImhlYWRlciIsImdldEhlYWRlckFjdGlvbnMiLCJhY3Rpb25zIiwiZ2V0Rm9vdGVyQWN0aW9ucyIsImZvb3RlciIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwidmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJOb25lIiwiZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgiLCJkZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0TmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24iLCJuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSIsIm5hdmlnYXRpb24iLCJnZXRWaWV3TGV2ZWwiLCJ2aWV3TGV2ZWwiLCJnZXRDb250ZW50RGVuc2l0aWVzIiwiY29udGVudERlbnNpdGllcyIsImNvenkiLCJjb21wYWN0IiwiaXNGY2xFbmFibGVkIiwiZmNsRW5hYmxlZCIsImlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50IiwibWFuaWZlc3RDb250ZW50RGVuc2l0eSIsInNoZWxsQ29udGVudERlbnNpdHkiLCJpc0NvbXBhY3RUeXBlIiwiZ2V0U2VjdGlvbnMiLCJzZWN0aW9ucyIsImJvZHkiLCJpc0hlYWRlckVkaXRhYmxlIiwiZ2V0U2hvd09iamVjdFBhZ2VIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJnZXRTaG93QW5jaG9yQmFyIiwiYW5jaG9yQmFyVmlzaWJsZSIsInVuZGVmaW5lZCIsInVzZUljb25UYWJCYXIiLCJzZWN0aW9uTGF5b3V0IiwidmlzaWJsZSIsImdldFZpZXdDb25maWd1cmF0aW9uIiwidmlld3MiLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJiU3RpY2t5TXVsdGlUYWJIZWFkZXIiLCJzdGlja3lNdWx0aVRhYkhlYWRlciIsImdldEtQSUNvbmZpZ3VyYXRpb24iLCJrZXlQZXJmb3JtYW5jZUluZGljYXRvcnMiLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiaGFzTXVsdGlwbGVFbnRpdHlTZXRzIiwidmlld0NvbmZpZyIsInBhdGhzIiwibWFuaWZlc3RFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJmaW5kIiwicGF0aCIsInRlbXBsYXRlIiwiaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJzb21lIiwicHJpbWFyeVBhdGgiLCJzZWNvbmRhcnlQYXRoIiwiZ2V0Q29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInZpZXdQYXRoIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFxQkE7QUFDQTtBQUNBO01BQ01BLGU7QUFDTDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLDZCQUFvQkMsaUJBQXBCLEVBQXFFQyxPQUFyRSxFQUF3RjtBQUFBLFdBQXBFRCxpQkFBb0UsR0FBcEVBLGlCQUFvRTtBQUFBLFdBQW5CQyxPQUFtQixHQUFuQkEsT0FBbUI7QUFBRTtBQUUxRjtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7OztXQUNDQyxlLEdBQUEsMkJBQWdDO0FBQy9CLGFBQU8sS0FBS0YsaUJBQUwsQ0FBdUJHLGFBQTlCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBOzs7V0FDQ0MsaUIsR0FBQSw2QkFBNkI7QUFBQTs7QUFDNUIsYUFBTyxDQUFD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LElBQUQsQ0FBd0NJLFNBQXhDLDREQUFtRE8sTUFBbkQsSUFBNEQsQ0FBbEk7QUFDQSxLLENBRUQ7Ozs7OztTQUdjaEYsZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVSZWNvcmQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHR5cGUge1xuXHRCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdENvbnRlbnREZW5zaXRpZXNUeXBlLFxuXHRDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uLFxuXHRGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZvcm1NYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEtQSUNvbmZpZ3VyYXRpb24sXG5cdExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TWFuaWZlc3RIZWFkZXJGYWNldCxcblx0TWFuaWZlc3RTZWN0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0T2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MsXG5cdFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbixcblx0VGVtcGxhdGVUeXBlLFxuXHRWaWV3Q29uZmlndXJhdGlvbixcblx0Vmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyoqXG4gKlxuICovXG5jbGFzcyBNYW5pZmVzdFdyYXBwZXIge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdyYXBwZXIgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBtYW5pZmVzdCBpcyBjb25zaXN0ZW50IGFuZCBldmVyeXRoaW5nIGlzIG1lcmdlZCBjb3JyZWN0bHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBvTWFuaWZlc3RTZXR0aW5ncyBUaGUgbWFuaWZlc3Qgc2V0dGluZ3MgZm9yIHRoZSBjdXJyZW50IHBhZ2Vcblx0ICogQHBhcmFtIG1lcmdlRm4gQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBtZXJnZVxuXHQgKiBAcmV0dXJucyBUaGUgbWFuaWZlc3Qgd3JhcHBlciBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgb01hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBwcml2YXRlIG1lcmdlRm46IEZ1bmN0aW9uKSB7fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRUZW1wbGF0ZVR5cGUoKTogVGVtcGxhdGVUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHRlbXBsYXRlIHNob3VsZCBkaXNwbGF5IHRoZSBmaWx0ZXIgYmFyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbHRlciBiYXIgc2hvdWxkIGJlIGhpZGRlblxuXHQgKi9cblx0aXNGaWx0ZXJCYXJIaWRkZW4oKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpPy5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IGVudmlyb25tZW50IGlzIGEgZGVza3RvcCBvciBub3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBhcmUgb24gYSBkZXNrdG9wXG5cdCAqL1xuXHRpc0Rlc2t0b3AoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICEhdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5pc0Rlc2t0b3A7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBtb2JpbGUgcGhvbmUgb3Igbm90LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgd2UgYXJlIG9uIGEgbW9iaWxlIHBob25lXG5cdCAqL1xuXHRpc1Bob25lKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMub01hbmlmZXN0U2V0dGluZ3MuaXNQaG9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gY29udGFpbmVycyAoZmllbGQgZ3JvdXBzIG9yIGlkZW50aWZpY2F0aW9uKSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHBhcmFtIGZhY2V0VGFyZ2V0IFRoZSB0YXJnZXQgYW5ub3RhdGlvbiBwYXRoIGZvciB0aGlzIGZvcm1cblx0ICogQHJldHVybnMgQSBzZXQgb2YgZm9ybSBjb250YWluZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb3JtQ29udGFpbmVyKGZhY2V0VGFyZ2V0OiBzdHJpbmcpOiBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW2ZhY2V0VGFyZ2V0XSBhcyBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGhlYWRlciBmYWNldHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIGhlYWRlciBmYWNldHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckZhY2V0cygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RIZWFkZXJGYWNldD4ge1xuXHRcdHJldHVybiB0aGlzLm1lcmdlRm4oXG5cdFx0XHR7fSxcblx0XHRcdHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udHJvbENvbmZpZ3VyYXRpb24/LltcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIl0/LmZhY2V0cyxcblx0XHRcdCh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5jb250ZW50Py5oZWFkZXI/LmZhY2V0c1xuXHRcdCk7XG5cdH1cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaGVhZGVyIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIGFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgaW5kZXhlZCBieSBhbiBpdGVyYWJsZSBrZXlcblx0ICovXG5cdGdldEhlYWRlckFjdGlvbnMoKTogQ29uZmlndXJhYmxlUmVjb3JkPE1hbmlmZXN0QWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3MuY29udGVudD8uaGVhZGVyPy5hY3Rpb25zIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZvb3RlciBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIHNldCBvZiBhY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRGb290ZXJBY3Rpb25zKCk6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEFjdGlvbj4ge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmNvbnRlbnQ/LmZvb3Rlcj8uYWN0aW9ucyB8fCB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHZhcmlhbnQgbWFuYWdlbWVudCBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgQSB0eXBlIG9mIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKi9cblx0Z2V0VmFyaWFudE1hbmFnZW1lbnQoKTogVmFyaWFudE1hbmFnZW1lbnRUeXBlIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncy52YXJpYW50TWFuYWdlbWVudCB8fCBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGFubm90YXRpb24gUGF0aCBmb3IgdGhlIFNQViBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBhbm5vdGF0aW9uIHBhdGggZm9yIHRoZSBkZWZhdWx0IFNQViBvciB1bmRlZmluZWQuXG5cdCAqL1xuXHRnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzLmRlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udHJvbCBjb25maWd1cmF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciBhIHNwZWNpZmljIGFubm90YXRpb24gcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEBwcml2YXRlXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdGdldENvbnRyb2xDb25maWd1cmF0aW9uKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udHJvbENvbmZpZ3VyYXRpb24/LltzQW5ub3RhdGlvblBhdGhdIHx8IHt9O1xuXHR9XG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpZ3VyZWQgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gbmF2aWdhdGlvbiB0YXJnZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgbmF2aWdhdGlvbiB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXROYXZpZ2F0aW9uQ29uZmlndXJhdGlvbihuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMub01hbmlmZXN0U2V0dGluZ3M/Lm5hdmlnYXRpb24/LltuYXZpZ2F0aW9uT3JDb2xsZWN0aW9uTmFtZV0gfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aWV3IGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCB2aWV3IGxldmVsXG5cdCAqL1xuXHRnZXRWaWV3TGV2ZWwoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8udmlld0xldmVsIHx8IC0xO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGVudERlbnNpdGllcyBzZXR0aW5nIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgY29udGVudCBkZW5zaXR5XG5cdCAqL1xuXHRnZXRDb250ZW50RGVuc2l0aWVzKCk6IENvbnRlbnREZW5zaXRpZXNUeXBlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uY29udGVudERlbnNpdGllcyB8fCB7XG5cdFx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0XHRjb21wYWN0OiBmYWxzZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgd2UgYXJlIGluIEZDTCBtb2RlIG9yIG5vdC5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHdlIGFyZSBpbiBGQ0xcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5mY2xFbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSBhbGxvd3MgdXMgdG8gdXNlIGNvbmRlbnNlZCBsYXlvdXQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB3ZSBjYW4gdXNlIHRoZSBjb25kZW5zZWQgbGF5b3V0LCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdGlzQ29uZGVuc2VkTGF5b3V0Q29tcGxpYW50KCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZW50RGVuc2l0aWVzIHx8IHtcblx0XHRcdGNvenk6IGZhbHNlLFxuXHRcdFx0Y29tcGFjdDogZmFsc2Vcblx0XHR9O1xuXHRcdGNvbnN0IHNoZWxsQ29udGVudERlbnNpdHkgPSB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5zaGVsbENvbnRlbnREZW5zaXR5IHx8IFwiY29tcGFjdFwiO1xuXHRcdGxldCBpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IHRydWU7XG5cdFx0aWYgKChtYW5pZmVzdENvbnRlbnREZW5zaXR5Py5jb3p5ID09PSB0cnVlICYmIG1hbmlmZXN0Q29udGVudERlbnNpdHk/LmNvbXBhY3QgIT09IHRydWUpIHx8IHNoZWxsQ29udGVudERlbnNpdHkgPT09IFwiY296eVwiKSB7XG5cdFx0XHRpc0NvbmRlbnNlZExheW91dENvbXBsaWFudCA9IGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb25kZW5zZWRMYXlvdXRDb21wbGlhbnQ7XG5cdH1cblx0LyoqXG5cdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNldHRpbmdzIChhcHBsaWNhdGlvbiAvIHNoZWxsKSB1c2VzIGNvbXBhY3QgbW9kZSBhcyBjb250ZW50IGRlbnNpdHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBjb21wYWN0IG1vZGUgaXMgc2V0IGFzIGNvbnRlbnQgZGVuc2l0eSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0NvbXBhY3RUeXBlKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1hbmlmZXN0Q29udGVudERlbnNpdHkgPSB0aGlzLmdldENvbnRlbnREZW5zaXRpZXMoKTtcblx0XHRjb25zdCBzaGVsbENvbnRlbnREZW5zaXR5ID0gdGhpcy5vTWFuaWZlc3RTZXR0aW5ncz8uc2hlbGxDb250ZW50RGVuc2l0eSB8fCBcImNvbXBhY3RcIjtcblx0XHRyZXR1cm4gbWFuaWZlc3RDb250ZW50RGVuc2l0eS5jb21wYWN0ICE9PSBmYWxzZSB8fCBzaGVsbENvbnRlbnREZW5zaXR5ID09PSBcImNvbXBhY3RcIiA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdC8vcmVnaW9uIE9QIFNwZWNpZmljXG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc2VjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgc2V0IG9mIG1hbmlmZXN0IHNlY3Rpb25zIGluZGV4ZWQgYnkgYW4gaXRlcmFibGUga2V5XG5cdCAqL1xuXHRnZXRTZWN0aW9ucygpOiBDb25maWd1cmFibGVSZWNvcmQ8TWFuaWZlc3RTZWN0aW9uPiB7XG5cdFx0cmV0dXJuIHRoaXMubWVyZ2VGbihcblx0XHRcdHt9LFxuXHRcdFx0dGhpcy5vTWFuaWZlc3RTZXR0aW5ncy5jb250cm9sQ29uZmlndXJhdGlvbj8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXT8uc2VjdGlvbnMsXG5cdFx0XHQodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uYm9keT8uc2VjdGlvbnNcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBvZiB0aGUgaGVhZGVyIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBlZGl0YWJsZSBhbmQgc2hvdWxkIGFwcGVhciBpbiB0aGUgZmFjZXRzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBpZiBlZGl0YWJsZVxuXHQgKi9cblx0aXNIZWFkZXJFZGl0YWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpICYmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiB3ZSBzaG91bGQgc2hvdyB0aGUgb2JqZWN0IHBhZ2UgaGVhZGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGhlYWRlciBzaG91bGQgYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93QW5jaG9yQmFyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlICE9PSB1bmRlZmluZWRcblx0XHRcdD8gISEodGhpcy5vTWFuaWZlc3RTZXR0aW5ncyBhcyBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncykuY29udGVudD8uaGVhZGVyPy5hbmNob3JCYXJWaXNpYmxlXG5cdFx0XHQ6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VjdGlvbiB3aWxsIGJlIGRpc3BsYXllZCBpbiBkaWZmZXJlbnQgdGFicy5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBpY29uIHRhYiBiYXIgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBzY3JvbGxpbmdcblx0ICovXG5cdHVzZUljb25UYWJCYXIoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U2hvd0FuY2hvckJhcigpICYmICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzKS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCBwYWdlIGhlYWRlciBpcyB0byBiZSBzaG93bi5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3QgcGFnZSBoZWFkZXIgaXMgdG8gYmUgZGlzcGxheWVkXG5cdCAqL1xuXHRnZXRTaG93T2JqZWN0UGFnZUhlYWRlcigpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8udmlzaWJsZSAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/ICEhKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MpLmNvbnRlbnQ/LmhlYWRlcj8udmlzaWJsZVxuXHRcdFx0OiB0cnVlO1xuXHR9XG5cblx0Ly9lbmRyZWdpb24gT1AgU3BlY2lmaWNcblxuXHQvL3JlZ2lvbiBMUiBTcGVjaWZpY1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIG11bHRpcGxlIHZpZXcgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHZpZXdzIHRoYXQgcmVwcmVzZW50IHRoZSBtYW5pZmVzdCBvYmplY3Rcblx0ICovXG5cdGdldFZpZXdDb25maWd1cmF0aW9uKCk6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLnZpZXdzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgc3RpY2t5TXVsdGlUYWJIZWFkZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyBUcnVlIGlmIHN0aWNreU11bHRpVGFiSGVhZGVyIGlzIGVuYWJsZWQgb3IgdW5kZWZpbmVkXG5cdCAqL1xuXHRnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYlN0aWNreU11bHRpVGFiSGVhZGVyID0gKHRoaXMub01hbmlmZXN0U2V0dGluZ3MgYXMgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MpLnN0aWNreU11bHRpVGFiSGVhZGVyO1xuXHRcdHJldHVybiBiU3RpY2t5TXVsdGlUYWJIZWFkZXIgIT09IHVuZGVmaW5lZCA/IGJTdGlja3lNdWx0aVRhYkhlYWRlciA6IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBLUEkgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgUmV0dXJucyBhIG1hcCBiZXR3ZWVuIEtQSSBuYW1lcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXRLUElDb25maWd1cmF0aW9uKCk6IHsgW2twaU5hbWU6IHN0cmluZ106IEtQSUNvbmZpZ3VyYXRpb24gfSB7XG5cdFx0cmV0dXJuICh0aGlzLm9NYW5pZmVzdFNldHRpbmdzIGFzIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzKS5rZXlQZXJmb3JtYW5jZUluZGljYXRvcnMgfHwge307XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGZpbHRlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRnZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk6IEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb24oXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGVudGl0eSBzZXRzIHRvIGJlIGRpc3BsYXllZC5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBlbnRpdHkgc2V0c1xuXHQgKi9cblx0aGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHZpZXdDb25maWcgPSB0aGlzLmdldFZpZXdDb25maWd1cmF0aW9uKCkgfHwgeyBwYXRoczogW10gfTtcblx0XHRjb25zdCBtYW5pZmVzdEVudGl0eVNldCA9IHRoaXMub01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRcdHJldHVybiAoXG5cdFx0XHR2aWV3Q29uZmlnLnBhdGhzLmZpbmQoKHBhdGg6IFZpZXdDb25maWd1cmF0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICgocGF0aCBhcyBDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uKT8udGVtcGxhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKSkge1xuXHRcdFx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRwcmltYXJ5LnNvbWUoKHByaW1hcnlQYXRoKSA9PiBwcmltYXJ5UGF0aC5lbnRpdHlTZXQgJiYgcHJpbWFyeVBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldCkgfHxcblx0XHRcdFx0XHRcdHNlY29uZGFyeS5zb21lKChzZWNvbmRhcnlQYXRoKSA9PiBzZWNvbmRhcnlQYXRoLmVudGl0eVNldCAmJiBzZWNvbmRhcnlQYXRoLmVudGl0eVNldCAhPT0gbWFuaWZlc3RFbnRpdHlTZXQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRwYXRoID0gcGF0aCBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRcdFx0cmV0dXJuIHBhdGguZW50aXR5U2V0ICYmIHBhdGguZW50aXR5U2V0ICE9PSBtYW5pZmVzdEVudGl0eVNldDtcblx0XHRcdFx0fVxuXHRcdFx0fSkgIT09IHVuZGVmaW5lZFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGV4dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgaWYgaXQgaXMgc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdC5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgcGF0aCBmb3IgdGhlIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9NYW5pZmVzdFNldHRpbmdzPy5jb250ZXh0UGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHZpc3VhbGl6YXRpb25zLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBmcm9tIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmlzdWFsaXphdGlvbnNcblx0ICovXG5cdGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aD86IFZpZXdQYXRoQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0Y29uc3Qgdmlld0NvbmZpZyA9IHRoaXMuZ2V0Vmlld0NvbmZpZ3VyYXRpb24oKSB8fCB7IHBhdGhzOiBbXSB9O1xuXHRcdFx0cmV0dXJuIHZpZXdDb25maWcucGF0aHMuc29tZSgodmlld1BhdGgpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQodmlld1BhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnByaW1hcnk/Lmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQodmlld1BhdGggYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24pLnNlY29uZGFyeT8ubGVuZ3RoID4gMFxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikucHJpbWFyeT8ubGVuZ3RoID4gMCAmJiAocGF0aCBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuc2Vjb25kYXJ5Py5sZW5ndGggPiAwO1xuXHR9XG5cblx0Ly9lbmQgcmVnaW9uIExSIFNwZWNpZmljXG59XG5cbmV4cG9ydCBkZWZhdWx0IE1hbmlmZXN0V3JhcHBlcjtcbiJdfQ==