@sap/open.fe 1.99.0 → 1.100.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 (969) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
  6. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
  7. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
  8. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
  9. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
  10. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
  11. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
  13. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
  14. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
  15. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
  16. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
  17. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
  18. package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
  19. package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
  20. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  21. package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
  22. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  23. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  24. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
  25. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  27. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
  29. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
  31. package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
  32. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
  33. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
  34. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
  35. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
  37. package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
  38. package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
  39. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
  40. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  41. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
  42. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
  43. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
  44. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
  46. package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
  47. package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
  48. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
  49. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
  51. package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
  52. package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  54. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
  55. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
  56. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
  57. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
  59. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
  61. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
  62. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
  63. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  64. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
  65. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
  66. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  67. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
  68. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
  69. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  71. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  72. package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
  73. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
  75. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
  76. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  77. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
  78. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
  79. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  80. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
  81. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
  82. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
  83. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
  84. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
  85. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
  86. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
  88. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
  89. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  90. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
  91. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
  92. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  93. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
  94. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
  95. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  96. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
  97. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
  98. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
  100. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
  101. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
  103. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  104. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  105. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
  106. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
  107. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
  109. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
  110. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
  112. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  113. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  114. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
  115. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
  116. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
  118. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
  119. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  120. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
  121. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
  122. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  123. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
  124. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
  125. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
  127. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
  128. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
  130. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  131. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  132. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
  133. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
  134. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  136. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  137. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
  138. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
  139. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
  141. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
  142. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
  144. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
  145. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  146. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
  147. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
  148. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  149. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
  150. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
  151. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  152. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
  153. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
  154. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
  155. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
  156. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
  157. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  158. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
  159. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
  160. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  161. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
  162. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
  163. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  164. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
  165. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
  166. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  167. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
  168. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
  169. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  170. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
  171. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
  172. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  173. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
  174. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
  175. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  176. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
  177. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
  178. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  179. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
  180. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  181. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  182. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
  183. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  184. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  185. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
  186. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  187. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  188. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
  189. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  190. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
  191. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  192. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  193. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
  194. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  195. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  196. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
  197. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  198. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
  199. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  200. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  201. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
  202. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  203. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  204. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
  205. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  206. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  207. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
  208. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  209. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
  210. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  211. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  212. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
  213. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  214. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
  215. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
  216. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  217. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
  218. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  219. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  220. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
  221. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  222. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  223. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
  224. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  225. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  226. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
  227. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
  228. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  229. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
  230. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
  231. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
  232. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
  233. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  234. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
  235. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  236. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  237. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
  238. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
  239. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
  240. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  241. package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
  242. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
  243. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  244. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  245. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
  246. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
  247. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  248. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
  249. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  250. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  251. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
  252. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  253. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  254. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
  255. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  256. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
  257. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
  258. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  259. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
  260. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  261. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  262. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
  263. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  264. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  265. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
  266. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
  267. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
  268. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
  269. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  270. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
  271. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
  272. package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
  273. package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
  274. package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
  275. package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
  276. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  277. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
  278. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  279. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  280. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
  281. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
  282. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
  283. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
  284. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
  285. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
  286. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
  287. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
  288. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
  289. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
  290. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  291. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  292. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  293. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  294. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
  295. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  296. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
  297. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
  298. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
  299. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  300. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
  301. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
  302. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
  303. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
  304. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
  305. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
  306. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
  307. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
  308. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
  309. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
  310. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
  311. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
  312. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
  313. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
  314. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
  315. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
  316. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  317. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
  318. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
  319. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
  320. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
  321. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
  322. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
  323. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
  324. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
  325. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
  326. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
  327. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  328. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  329. package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
  330. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
  331. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  332. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
  333. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  334. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  335. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
  336. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  337. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  338. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
  339. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  340. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  341. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
  342. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  343. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  344. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
  345. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  346. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  347. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
  348. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  349. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  350. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
  351. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  352. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  353. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
  354. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  355. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  356. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
  357. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  358. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
  359. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
  360. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
  361. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
  362. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
  363. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  364. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  365. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
  366. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
  367. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  368. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
  369. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  370. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  371. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  372. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
  373. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
  374. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
  375. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  376. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
  377. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
  378. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  379. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
  380. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
  381. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
  382. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
  383. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
  384. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
  385. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
  386. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
  387. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
  388. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
  389. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
  390. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
  391. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
  392. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
  393. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
  394. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
  395. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
  396. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
  397. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
  398. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
  399. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
  400. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
  401. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
  402. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
  403. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
  404. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
  405. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
  406. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
  407. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
  408. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
  409. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
  410. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
  411. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
  412. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
  413. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
  414. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
  415. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
  416. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
  417. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
  418. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
  419. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
  420. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
  421. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
  422. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
  423. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
  424. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
  425. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
  426. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
  427. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
  428. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
  429. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
  430. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
  431. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
  432. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
  433. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
  434. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
  435. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
  436. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
  437. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
  438. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
  439. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
  440. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
  441. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
  442. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
  443. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
  444. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
  445. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
  446. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
  447. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
  448. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
  449. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
  450. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
  451. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
  452. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
  453. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
  454. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
  455. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
  456. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
  457. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
  458. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
  459. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
  460. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
  461. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
  462. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
  463. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
  464. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
  465. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
  466. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
  467. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
  468. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
  469. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
  470. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
  471. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
  472. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
  473. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
  474. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
  475. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
  476. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
  477. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
  478. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
  479. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
  480. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
  481. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
  482. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
  483. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
  484. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
  485. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
  486. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
  487. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
  488. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
  489. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
  490. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
  491. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
  492. package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
  493. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
  494. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
  495. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
  496. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
  497. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
  498. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
  499. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
  500. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
  501. package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
  502. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
  503. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
  504. package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
  505. package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
  506. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
  507. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
  508. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
  509. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
  510. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
  511. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
  512. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
  513. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
  514. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
  515. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
  516. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
  517. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
  518. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
  519. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
  520. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
  521. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
  522. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
  523. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
  524. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
  525. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
  526. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
  527. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
  528. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
  529. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
  530. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
  531. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
  532. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
  533. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
  534. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
  535. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
  536. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
  537. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
  538. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
  539. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
  540. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
  541. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  542. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  543. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
  544. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
  545. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
  546. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
  547. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
  548. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
  549. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  550. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
  551. package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
  552. package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
  553. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
  554. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  555. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
  556. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
  557. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
  558. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
  559. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
  560. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
  561. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
  562. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
  563. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  564. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
  565. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
  566. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
  567. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
  568. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
  569. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
  570. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
  571. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
  572. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
  573. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
  574. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
  575. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
  576. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
  577. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  578. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
  579. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
  580. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  581. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
  582. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  583. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
  584. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
  585. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  586. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
  587. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  588. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
  589. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  590. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
  591. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
  592. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  593. package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
  594. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
  595. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
  596. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
  597. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  598. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
  599. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
  600. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
  601. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
  602. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
  603. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
  604. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
  605. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
  606. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
  607. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
  608. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
  609. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
  610. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
  611. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
  612. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
  613. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
  614. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
  615. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
  616. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
  617. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
  618. package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
  619. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
  620. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
  621. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
  622. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
  623. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
  624. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
  625. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
  626. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
  627. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
  628. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
  629. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
  630. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
  631. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
  632. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  633. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
  634. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
  635. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
  636. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
  637. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
  638. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
  639. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
  640. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
  641. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
  642. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
  643. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  644. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
  645. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
  646. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
  647. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
  648. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
  649. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  650. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  651. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
  652. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
  653. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
  654. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  655. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  656. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  657. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
  658. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
  659. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
  660. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
  661. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
  662. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
  663. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
  664. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
  665. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
  666. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
  667. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
  668. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
  669. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
  670. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
  671. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
  672. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
  673. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
  674. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
  675. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
  676. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
  677. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
  678. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
  679. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  680. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
  681. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
  682. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
  683. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
  684. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
  685. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
  686. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
  687. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
  688. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
  689. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
  690. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
  691. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
  692. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
  693. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
  694. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
  695. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
  696. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
  697. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
  698. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
  699. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
  700. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
  701. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
  702. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
  703. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
  704. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
  705. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
  706. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
  707. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
  708. package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  709. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
  710. package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
  711. package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
  712. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
  713. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  714. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
  715. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  716. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
  717. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
  718. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
  719. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  720. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
  721. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  722. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
  723. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
  724. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
  725. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
  726. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
  727. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
  728. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
  729. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
  730. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
  731. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
  732. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
  733. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
  734. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
  735. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
  736. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
  737. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
  738. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
  739. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
  740. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
  741. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
  742. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
  743. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
  744. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
  745. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
  746. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
  747. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
  748. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
  749. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
  750. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
  751. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
  752. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
  753. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
  754. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
  755. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
  756. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
  757. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
  758. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
  759. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
  760. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
  761. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
  762. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
  763. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
  764. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
  765. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
  766. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
  767. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
  768. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
  769. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
  770. package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
  771. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  772. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
  773. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  774. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
  775. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
  776. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
  777. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
  778. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
  779. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
  780. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
  781. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  782. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  783. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  784. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  785. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
  786. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  787. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
  788. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  789. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  790. package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
  791. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  792. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  793. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  794. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  795. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  796. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  797. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  798. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
  799. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
  800. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
  801. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  802. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  803. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
  804. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
  805. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
  806. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
  807. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
  808. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
  809. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
  810. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
  811. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
  812. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
  813. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
  814. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
  815. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
  816. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
  817. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
  818. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
  819. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
  820. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
  821. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
  822. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
  823. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
  824. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
  825. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
  826. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
  827. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
  828. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
  829. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
  830. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
  831. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
  832. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
  833. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  834. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  835. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  836. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  837. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  838. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
  839. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  840. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  841. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
  842. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
  843. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
  844. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
  845. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  846. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  847. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
  848. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
  849. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
  850. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  851. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
  852. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  853. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
  854. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
  855. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  856. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
  857. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  858. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
  859. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  860. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  861. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
  862. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
  863. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
  864. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  865. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  866. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
  867. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  868. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
  869. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  870. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
  871. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
  872. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  873. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
  874. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
  875. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
  876. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  877. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  878. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
  879. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
  880. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
  881. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
  882. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
  883. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
  884. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
  885. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
  886. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
  887. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
  888. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
  889. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
  890. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
  891. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
  892. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
  893. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
  894. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
  895. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
  896. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
  897. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
  898. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
  899. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
  900. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
  901. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
  902. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
  903. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
  904. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
  905. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
  906. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
  907. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
  908. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
  909. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
  910. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
  911. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
  912. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
  913. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
  914. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
  915. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
  916. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
  917. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
  918. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
  919. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
  920. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
  921. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
  922. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
  923. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
  924. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
  925. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
  926. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
  927. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
  928. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  929. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
  930. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  931. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
  932. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  933. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
  934. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
  935. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
  936. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
  937. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
  938. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
  939. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
  940. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
  941. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
  942. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
  943. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
  944. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
  945. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
  946. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  947. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  948. package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
  949. package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
  950. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
  951. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  952. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
  953. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
  954. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  955. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
  956. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
  957. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
  958. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  959. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
  960. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
  961. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
  962. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  963. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  964. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  965. package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
  966. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  967. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  968. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  969. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
@@ -503,6 +503,302 @@ sap.ui.define(["sap/fe/test/UI5MockHelper", "sap/fe/core/controllerextensions/In
503
503
  }
504
504
  });
505
505
  });
506
+ describe("testing fnDirtyStateProvider()", function () {
507
+ var oInternalEditFlow, mockHashTracker, spyGetRouterProxy, spyIsNavigationFinalized, spyCheckHashWithGuard, spyIsGuardCrossAllowedByUser, spySetDirtyFlag;
508
+ var mockoNavigationContext = {
509
+ innerAppRoute: ""
510
+ };
511
+ var mockGetShellServices = {
512
+ setDirtyFlag: jest.fn().mockReturnValue(undefined)
513
+ };
514
+ var mockGetRouterProxy = {
515
+ isNavigationFinalized: jest.fn(),
516
+ checkHashWithGuard: jest.fn(),
517
+ isGuardCrossAllowedByUser: jest.fn()
518
+ };
519
+ var mockAppComponent = {
520
+ getRouterProxy: jest.fn().mockReturnValue(mockGetRouterProxy),
521
+ getShellServices: jest.fn().mockReturnValue(mockGetShellServices)
522
+ };
523
+ var mockInternalModel = {
524
+ getProperty: jest.fn()
525
+ };
526
+ beforeAll(function () {
527
+ oInternalEditFlow = new InternalEditFlow();
528
+ spyGetRouterProxy = jest.spyOn(mockAppComponent, "getRouterProxy");
529
+ spyIsNavigationFinalized = jest.spyOn(mockGetRouterProxy, "isNavigationFinalized");
530
+ spyCheckHashWithGuard = jest.spyOn(mockGetRouterProxy, "checkHashWithGuard");
531
+ spyIsGuardCrossAllowedByUser = jest.spyOn(mockGetRouterProxy, "isGuardCrossAllowedByUser");
532
+ spySetDirtyFlag = jest.spyOn(mockGetShellServices, "setDirtyFlag");
533
+ });
534
+ afterEach(function () {
535
+ jest.clearAllMocks();
536
+ });
537
+ it("fnDirtyStateProvider: input paramater oNavigationContext is undefined", oTestReferences, function () {
538
+ try {
539
+ mockHashTracker = "abc";
540
+ mockInternalModel.getProperty.mockReturnValue(undefined);
541
+
542
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
543
+
544
+ return Promise.resolve(fnDirtyStateProvider(undefined)).then(function (bResponse) {
545
+ expect(bResponse).toEqual(undefined);
546
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(0);
547
+ });
548
+ } catch (e) {
549
+ return Promise.reject(e);
550
+ }
551
+ });
552
+ it("fnDirtyStateProvider: missing property of internalModel", oTestReferences, function () {
553
+ try {
554
+ mockHashTracker = "abc";
555
+ mockInternalModel.getProperty.mockReturnValue(undefined);
556
+
557
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
558
+
559
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
560
+ expect(bResponse).toEqual(undefined);
561
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
562
+ });
563
+ } catch (e) {
564
+ return Promise.reject(e);
565
+ }
566
+ });
567
+ it("fnDirtyStateProvider: isNavigationFinalized() returns false", oTestReferences, function () {
568
+ try {
569
+ mockHashTracker = "abc";
570
+ mockInternalModel.getProperty.mockReturnValue(true);
571
+ mockGetRouterProxy.isNavigationFinalized.mockReturnValue(false);
572
+
573
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
574
+
575
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
576
+ expect(bResponse).toEqual(false);
577
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
578
+ expect(spyIsNavigationFinalized).toHaveBeenCalledTimes(1);
579
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(0);
580
+ expect(spySetDirtyFlag).toHaveBeenCalledTimes(0);
581
+ });
582
+ } catch (e) {
583
+ return Promise.reject(e);
584
+ }
585
+ });
586
+ it("fnDirtyStateProvider: isNavigationFinalized() returns true, HashTracker=TargetHash", oTestReferences, function () {
587
+ try {
588
+ mockHashTracker = "abc";
589
+ mockoNavigationContext.innerAppRoute = "abc";
590
+ mockInternalModel.getProperty.mockReturnValue(true);
591
+ mockGetRouterProxy.isNavigationFinalized.mockReturnValue(true);
592
+
593
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
594
+
595
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
596
+ expect(bResponse).toEqual(true);
597
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
598
+ expect(spyIsNavigationFinalized).toHaveBeenCalledTimes(1);
599
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(0);
600
+ expect(spySetDirtyFlag).toHaveBeenCalledTimes(0);
601
+ });
602
+ } catch (e) {
603
+ return Promise.reject(e);
604
+ }
605
+ });
606
+ it("fnDirtyStateProvider: isNavigationFinalized() returns true, HashTracker<>TargetHash, checkHashWithGuard()=true", oTestReferences, function () {
607
+ try {
608
+ mockHashTracker = "abc";
609
+ mockoNavigationContext.innerAppRoute = "xyz";
610
+ mockInternalModel.getProperty.mockReturnValue(true);
611
+ mockGetRouterProxy.isNavigationFinalized.mockReturnValue(true);
612
+ mockGetRouterProxy.checkHashWithGuard.mockReturnValue(true);
613
+
614
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
615
+
616
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
617
+ expect(bResponse).toEqual(false);
618
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
619
+ expect(spyIsNavigationFinalized).toHaveBeenCalledTimes(1);
620
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(1);
621
+ expect(spyIsGuardCrossAllowedByUser).toHaveBeenCalledTimes(0);
622
+ expect(spySetDirtyFlag).toHaveBeenCalledTimes(0);
623
+ });
624
+ } catch (e) {
625
+ return Promise.reject(e);
626
+ }
627
+ });
628
+ it("fnDirtyStateProvider: isNavigationFinalized() returns true, HashTracker<>TargetHash, checkHashWithGuard()=false, isGuardCrossAllowedByUser()=true", oTestReferences, function () {
629
+ try {
630
+ mockHashTracker = "abc";
631
+ mockoNavigationContext.innerAppRoute = "xyz";
632
+ mockInternalModel.getProperty.mockReturnValue(true);
633
+ mockGetRouterProxy.isNavigationFinalized.mockReturnValue(true);
634
+ mockGetRouterProxy.checkHashWithGuard.mockReturnValue(false);
635
+ mockGetRouterProxy.isGuardCrossAllowedByUser.mockReturnValue(true);
636
+
637
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
638
+
639
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
640
+ expect(bResponse).toEqual(false);
641
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
642
+ expect(spyIsNavigationFinalized).toHaveBeenCalledTimes(1);
643
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(1);
644
+ expect(spyIsGuardCrossAllowedByUser).toHaveBeenCalledTimes(1);
645
+ expect(spySetDirtyFlag).toHaveBeenCalledTimes(0);
646
+ });
647
+ } catch (e) {
648
+ return Promise.reject(e);
649
+ }
650
+ });
651
+ it("fnDirtyStateProvider: isNavigationFinalized() returns true, HashTracker<>TargetHash, checkHashWithGuard()=false, isGuardCrossAllowedByUser()=false", oTestReferences, function () {
652
+ try {
653
+ mockHashTracker = "abc";
654
+ mockoNavigationContext.innerAppRoute = "xyz";
655
+ mockInternalModel.getProperty.mockReturnValue(true);
656
+ mockGetRouterProxy.isNavigationFinalized.mockReturnValue(true);
657
+ mockGetRouterProxy.checkHashWithGuard.mockReturnValue(false);
658
+ mockGetRouterProxy.isGuardCrossAllowedByUser.mockReturnValue(false);
659
+
660
+ var fnDirtyStateProvider = oInternalEditFlow._registerDirtyStateProvider(mockAppComponent, mockInternalModel, mockHashTracker);
661
+
662
+ return Promise.resolve(fnDirtyStateProvider(mockoNavigationContext)).then(function (bResponse) {
663
+ expect(bResponse).toEqual(true);
664
+ expect(spyGetRouterProxy).toHaveBeenCalledTimes(1);
665
+ expect(spyIsNavigationFinalized).toHaveBeenCalledTimes(1);
666
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(1);
667
+ expect(spyIsGuardCrossAllowedByUser).toHaveBeenCalledTimes(1);
668
+ expect(spySetDirtyFlag).toHaveBeenCalledTimes(0);
669
+ });
670
+ } catch (e) {
671
+ return Promise.reject(e);
672
+ }
673
+ });
674
+ });
675
+ describe("testing fnHandleSessionTimeout()", function () {
676
+ var oInternalEditFlow, spyRemoveTransitionMessages, spyAddDependent;
677
+ var mockGetRouterProxy = {
678
+ getHash: jest.fn(),
679
+ checkHashWithGuard: jest.fn()
680
+ };
681
+ var mockAppComponent = {
682
+ getRouterProxy: jest.fn().mockReturnValue(mockGetRouterProxy)
683
+ };
684
+ var mockGetMessageHandler = {
685
+ removeTransitionMessages: jest.fn().mockReturnValue(false)
686
+ };
687
+ var mockGetRoutingListener = {
688
+ navigateBackFromContext: jest.fn().mockReturnValue(false)
689
+ };
690
+ var mockGetView = {
691
+ addDependent: jest.fn().mockReturnValue(false)
692
+ };
693
+ var mockContext = {
694
+ getMessageHandler: jest.fn().mockReturnValue(mockGetMessageHandler),
695
+ handleStickyOff: jest.fn(),
696
+ getRoutingListener: jest.fn().mockReturnValue(mockGetRoutingListener),
697
+ getView: jest.fn().mockReturnValue(mockGetView)
698
+ };
699
+ beforeAll(function () {
700
+ oInternalEditFlow = new InternalEditFlow();
701
+ spyRemoveTransitionMessages = jest.spyOn(mockGetMessageHandler, "removeTransitionMessages");
702
+ spyAddDependent = jest.spyOn(mockGetView, "addDependent");
703
+ });
704
+ afterEach(function () {
705
+ jest.clearAllMocks();
706
+ });
707
+ it("fnHandleSessionTimeout: calling with valid input", oTestReferences, function () {
708
+ try {
709
+ var fnHandleSessionTimeout = oInternalEditFlow._attachSessionTimeout(mockContext, undefined);
710
+
711
+ return Promise.resolve(fnHandleSessionTimeout()).then(function () {
712
+ expect(spyRemoveTransitionMessages).toHaveBeenCalledTimes(1);
713
+ expect(spyAddDependent).toHaveBeenCalledTimes(1);
714
+ });
715
+ } catch (e) {
716
+ return Promise.reject(e);
717
+ }
718
+ });
719
+ it("fnHandleSessionTimeout: context is invalid", oTestReferences, function () {
720
+ try {
721
+ var fnHandleSessionTimeout = oInternalEditFlow._attachSessionTimeout(undefined, undefined);
722
+
723
+ return Promise.resolve(fnHandleSessionTimeout()).then(function (bResponse) {
724
+ expect(bResponse).toEqual(undefined);
725
+ expect(spyRemoveTransitionMessages).toHaveBeenCalledTimes(0);
726
+ expect(spyAddDependent).toHaveBeenCalledTimes(0);
727
+ });
728
+ } catch (e) {
729
+ return Promise.reject(e);
730
+ }
731
+ });
732
+ });
733
+ describe("testing fnStickyDiscardAfterNavigation()", function () {
734
+ var oInternalEditFlow, spyGetHash, spyCheckHashWithGuard, spyDiscardStickySession;
735
+ var mockGetRouterProxy = {
736
+ getHash: jest.fn(),
737
+ checkHashWithGuard: jest.fn()
738
+ };
739
+ var mockAppComponent = {
740
+ getRouterProxy: jest.fn().mockReturnValue(mockGetRouterProxy)
741
+ };
742
+ var mockFnContext = {
743
+ discardStickySession: jest.fn().mockReturnValue(false)
744
+ };
745
+ beforeAll(function () {
746
+ oInternalEditFlow = new InternalEditFlow();
747
+ spyGetHash = jest.spyOn(mockGetRouterProxy, "getHash");
748
+ spyCheckHashWithGuard = jest.spyOn(mockGetRouterProxy, "checkHashWithGuard");
749
+ spyDiscardStickySession = jest.spyOn(mockFnContext, "discardStickySession");
750
+ });
751
+ afterEach(function () {
752
+ jest.clearAllMocks();
753
+ });
754
+ it("fnStickyDiscardAfterNavigation: Hash undefined", oTestReferences, function () {
755
+ try {
756
+ mockGetRouterProxy.getHash.mockReturnValue(undefined);
757
+
758
+ var fnStickyDiscardAfterNavigation = oInternalEditFlow._attachRouteMatched(mockFnContext, undefined, mockAppComponent);
759
+
760
+ return Promise.resolve(fnStickyDiscardAfterNavigation()).then(function () {
761
+ expect(spyGetHash).toHaveBeenCalledTimes(1);
762
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(0);
763
+ expect(spyDiscardStickySession).toHaveBeenCalledTimes(1);
764
+ });
765
+ } catch (e) {
766
+ return Promise.reject(e);
767
+ }
768
+ });
769
+ it("fnStickyDiscardAfterNavigation: checkHashWithGuard()=false", oTestReferences, function () {
770
+ try {
771
+ mockGetRouterProxy.getHash.mockReturnValue("abc");
772
+ mockGetRouterProxy.checkHashWithGuard.mockReturnValue(false);
773
+
774
+ var fnStickyDiscardAfterNavigation = oInternalEditFlow._attachRouteMatched(mockFnContext, undefined, mockAppComponent);
775
+
776
+ return Promise.resolve(fnStickyDiscardAfterNavigation()).then(function () {
777
+ expect(spyGetHash).toHaveBeenCalledTimes(1);
778
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(1);
779
+ expect(spyDiscardStickySession).toHaveBeenCalledTimes(1);
780
+ });
781
+ } catch (e) {
782
+ return Promise.reject(e);
783
+ }
784
+ });
785
+ it("fnStickyDiscardAfterNavigation: checkHashWithGuard()=true", oTestReferences, function () {
786
+ try {
787
+ mockGetRouterProxy.getHash.mockReturnValue("abc");
788
+ mockGetRouterProxy.checkHashWithGuard.mockReturnValue(true);
789
+
790
+ var fnStickyDiscardAfterNavigation = oInternalEditFlow._attachRouteMatched(mockFnContext, undefined, mockAppComponent);
791
+
792
+ return Promise.resolve(fnStickyDiscardAfterNavigation()).then(function () {
793
+ expect(spyGetHash).toHaveBeenCalledTimes(1);
794
+ expect(spyCheckHashWithGuard).toHaveBeenCalledTimes(1);
795
+ expect(spyDiscardStickySession).toHaveBeenCalledTimes(0);
796
+ });
797
+ } catch (e) {
798
+ return Promise.reject(e);
799
+ }
800
+ });
801
+ });
506
802
  });
507
803
  }, false);
508
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVybmFsRWRpdEZsb3cuc3BlYy50cyJdLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZGVzY3JpYmUiLCJvVGVzdFJlZmVyZW5jZXMiLCJhZnRlckFsbCIsImplc3QiLCJyZXNldEFsbE1vY2tzIiwib1RyYW5zYWN0aW9uSGVscGVyIiwib0ludGVybmFsRWRpdEZsb3ciLCJvR2V0VHJhbnNhY3Rpb25IZWxwZXJNb2NrIiwib0dldEdsb2JhbFVJTW9kZWxsTW9jayIsIm9HZXRWaWV3TW9jayIsIm9CdXN5TG9ja01vY2siLCJvU3luY1Rhc2tNb2NrIiwib0hhbmRsZUNyZWF0ZUV2ZW50c01vY2siLCJvR2V0TWVzc2FnZUhhbmRsZXJNb2NrIiwib0hhc1RyYW5zaWVudENvbnRleHRNb2NrIiwib0J1c3lVbmxvY2tNb2NrIiwib09uQmVmb3JlQ3JlYXRlTW9jayIsIm9MaXN0QmluZGluZyIsIm9DcmVhdGVEb2N1bWVudE1vY2siLCJvTW9ja01vZGVsIiwiTW9ja01vZGVsIiwib01vY2tNZXRhTW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwib01vY2tDb250ZXh0IiwiTW9ja0NvbnRleHQiLCIkcGF0aCIsInNldE1ldGFNb2RlbCIsImJlZm9yZUVhY2giLCJJbnRlcm5hbEVkaXRGbG93IiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJzcHlPbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsInVuZGVmaW5lZCIsImdldENvbnRyb2xsZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkJ1c3lMb2NrZXIiLCJtb2NrUmV0dXJuVmFsdWUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIkNvbW1vblV0aWxzIiwiZ2V0TW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNyZWF0ZWQiLCJhZnRlckVhY2giLCJyZXN0b3JlQWxsTW9ja3MiLCJpdCIsImFEYXRhIiwiZm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJjb250ZXh0UGF0aCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInJlamVjdCIsInNweUdldE1vZGVsIiwic3B5R2V0TWV0YU1vZGVsIiwic3B5Q29udGV4dEdldFBhdGgiLCJzQ3VzdG9tQWN0aW9uIiwibW9ja0NvbnRleHQiLCJtb2NrVmlldyIsIm1vY2tNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1vY2tNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJiZWZvcmVBbGwiLCJjbGVhckFsbE1vY2tzIiwiX2hhc05ld0FjdGlvbkZvclN0aWNreSIsImJSZXNwb25zZSIsInRvRXF1YWwiLCJOZXdBY3Rpb24iLCJEaXNjYXJkQWN0aW9uIiwiRWRpdEFjdGlvbiIsIlNhdmVBY3Rpb24iLCJBZGRpdGlvbmFsTmV3QWN0aW9ucyIsInNweUdldFZpZXciLCJzcHlHZXRBcHBDb21wb25lbnQiLCJzcHlHZXRSb3V0ZXJQcm94eSIsInNweUhhc05hdmlnYXRpb25HdWFyZCIsInNweVNldE5hdmlnYXRpb25HdWFyZCIsInNweUdldEhhc2giLCJzcHlHZXRJbnRlcm5hbE1vZGVsIiwic3B5U2V0QmFja05hdmlnYXRpb24iLCJzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInNweUF0dGFjaFNlc3Npb25UaW1lb3V0Iiwic3B5QXR0YWNoUm91dGVNYXRjaGVkIiwibW9ja0dldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwibW9ja0dldFJvdXRlclByb3h5IiwiaGFzTmF2aWdhdGlvbkd1YXJkIiwic2V0TmF2aWdhdGlvbkd1YXJkIiwiZ2V0SGFzaCIsIm1vY2tHZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm1vY2tHZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsImdldFNoZWxsU2VydmljZXMiLCJnZXRSb3V0aW5nU2VydmljZSIsIm1vY2tHZXRNb2RlbCIsImF0dGFjaFNlc3Npb25UaW1lb3V0IiwibW9ja0dldFZpZXciLCJoYW5kbGVTdGlja3lPbiIsInNweVNldEVkaXRNb2RlIiwic3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIiLCJzcHlEaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwic3B5RGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsIm1vY2tEaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiZGlzY2FyZE5hdmlnYXRpb25HdWFyZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJtb2NrRGV0YWNoU2Vzc2lvblRpbWVvdXQiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImZuSGFuZGxlU2Vzc2lvblRpbWVvdXQiLCJmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24iLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImhhbmRsZVN0aWNreU9mZiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFnakJPLGtCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0FBQ3JDLFFBQUk7QUFDSCxVQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7QUFDQSxLQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO0FBQ1YsYUFBT0YsT0FBTyxDQUFDRSxDQUFELENBQWQ7QUFDQTs7QUFDRCxRQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBckIsRUFBMkI7QUFDMUIsYUFBT0YsTUFBTSxDQUFDRSxJQUFQLENBQVksS0FBSyxDQUFqQixFQUFvQkgsT0FBcEIsQ0FBUDtBQUNBOztBQUNELFdBQU9DLE1BQVA7QUFDQTs7QUFyakJERyxFQUFBQSxRQUFRLENBQUMsc0NBQUQsRUFBeUMsWUFBVztBQUMzRCxRQUFNQyxlQUFlLEdBQUc7QUFDdkIsb0JBQWMsQ0FDYjtBQUNDLGdCQUFRLE1BRFQ7QUFFQyxjQUFNO0FBRlAsT0FEYTtBQURTLEtBQXhCO0FBUUFDLElBQUFBLFFB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LENBQU4sQ0FBdUJsRCxxQkFBdkIsQ0FBNkMsQ0FBN0M7QUFDQUgsWUFBQUEsTUFBTSxDQUFDMEIsa0JBQUQsQ0FBTixDQUEyQnZCLHFCQUEzQixDQUFpRCxDQUFqRDtBQUNBSCxZQUFBQSxNQUFNLENBQUN1RCx5QkFBRCxDQUFOLENBQWtDcEQscUJBQWxDLENBQXdELENBQXhEO0FBQ0FILFlBQUFBLE1BQU0sQ0FBQ3dELCtCQUFELENBQU4sQ0FBd0NyRCxxQkFBeEMsQ0FBOEQsQ0FBOUQ7QUFWZ0Y7QUFXaEYsU0FYQztBQUFBO0FBQUE7QUFBQSxRQUFGO0FBWUEsS0ExRk8sQ0FBUjtBQTJGQSxHQWhiTyxDQUFSIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2NrQ29udGV4dCwgTW9ja01ldGFNb2RlbCwgTW9ja01vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcblxuaW1wb3J0IHsgSW50ZXJuYWxFZGl0RmxvdyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9uc1wiO1xuaW1wb3J0IFRyYW5zYWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9UcmFuc2FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL0J1c3lMb2NrZXJcIjtcblxuZGVzY3JpYmUoXCJJbnRlcm5hbEVkaXRGbG93IENvbnRyb2xsZXJFeHRlbnNpb25cIiwgZnVuY3Rpb24oKSB7XG5cdGNvbnN0IG9UZXN0UmVmZXJlbmNlcyA9IHtcblx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0e1xuXHRcdFx0XHRcInR5cGVcIjogXCJKSVJBXCIsXG5cdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0yMjI5NFwiXG5cdFx0XHR9XG5cdFx0XVxuXHR9O1xuXHRhZnRlckFsbCgoKSA9PiB7XG5cdFx0amVzdC5yZXNldEFsbE1vY2tzKCk7XG5cdH0pO1xuXHRkZXNjcmliZShcImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIC0gb25CZWZvcmVDcmVhdGVcIiwgKCkgPT4ge1xuXHRcdGxldCBvVHJhbnNhY3Rpb25IZWxwZXI6IGFueSwgb0ludGVybmFsRWRpdEZsb3c6IGFueTtcblx0XHRsZXQgb0dldFRyYW5zYWN0aW9uSGVscGVyTW9jayxcblx0XHRcdG9HZXRHbG9iYWxVSU1vZGVsbE1vY2ssXG5cdFx0XHRvR2V0Vmlld01vY2ssXG5cdFx0XHRvQnVzeUxvY2tNb2NrLFxuXHRcdFx0b1N5bmNUYXNrTW9jayxcblx0XHRcdG9IYW5kbGVDcmVhdGVFdmVudHNNb2NrLFxuXHRcdFx0b0dldE1lc3NhZ2VIYW5kbGVyTW9jayxcblx0XHRcdG9IYXNUcmFuc2llbnRDb250ZXh0TW9jayxcblx0XHRcdG9CdXN5VW5sb2NrTW9jayxcblx0XHRcdG9PbkJlZm9yZUNyZWF0ZU1vY2ssXG5cdFx0XHRvTGlzdEJpbmRpbmc6IGFueSxcblx0XHRcdG9DcmVhdGVEb2N1bWVudE1vY2s6IGFueTtcblx0XHRsZXQgb01vY2tNb2RlbCA9IG5ldyBNb2NrTW9kZWwoKTtcblx0XHRsZXQgb01vY2tNZXRhTW9kZWwgPSBuZXcgTW9ja01ldGFNb2RlbCgpO1xuXHRcdGxldCBvTW9ja0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogXCJTYWxlc09yZGVySXRlbVwiIH0pO1xuXHRcdG9Nb2NrTW9kZWwuc2V0TWV0YU1vZGVsKG9Nb2NrTWV0YU1vZGVsKTtcblx0XHRiZWZvcmVFYWNoKCgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93ID0gbmV3IEludGVybmFsRWRpdEZsb3coKTtcblx0XHRcdG9UcmFuc2FjdGlvbkhlbHBlciA9IG5ldyBUcmFuc2FjdGlvbkhlbHBlcihudWxsLCBudWxsKTtcblx0XHRcdG9HZXRUcmFuc2FjdGlvbkhlbHBlck1vY2sgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93IGFzIGFueSwgXCJnZXRUcmFuc2FjdGlvbkhlbHBlclwiKTtcblx0XHRcdG9HZXRUcmFuc2FjdGlvbkhlbHBlck1vY2subW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9UcmFuc2FjdGlvbkhlbHBlcjtcblx0XHRcdH0pO1xuXHRcdFx0b0dldEdsb2JhbFVJTW9kZWxsTW9jayA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3cgYXMgYW55LCBcImdldEdsb2JhbFVJTW9kZWxcIik7XG5cdFx0XHRvR2V0R2xvYmFsVUlNb2RlbGxNb2NrLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB1bmRlZmluZWQpO1xuXHRcdFx0b0dldFZpZXdNb2NrID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnksIFwiZ2V0Vmlld1wiKTtcblx0XHRcdG9HZXRWaWV3TW9jay5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGdldENvbnRyb2xsZXI6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0b1Jlc291cmNlQnVuZGxlOiBudWxsXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0Z2V0QmluZGluZ0NvbnRleHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRvQnVzeUxvY2tNb2NrID0gamVzdC5zcHlPbihCdXN5TG9ja2VyLCBcImxvY2tcIik7XG5cdFx0XHRvQnVzeUxvY2tNb2NrLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdG9CdXN5VW5sb2NrTW9jayA9IGplc3Quc3B5T24oQnVzeUxvY2tlciwgXCJ1bmxvY2tcIik7XG5cdFx0XHRvQnVzeVVubG9ja01vY2subW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0b1N5bmNUYXNrTW9jayA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3cgYXMgYW55LCBcInN5bmNUYXNrXCIpO1xuXHRcdFx0b1N5bmNUYXNrTW9jay5tb2NrUmVzb2x2ZWRWYWx1ZShudWxsKTtcblx0XHRcdG9IYW5kbGVDcmVhdGVFdmVudHNNb2NrID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnksIFwiaGFuZGxlQ3JlYXRlRXZlbnRzXCIpO1xuXHRcdFx0b0hhbmRsZUNyZWF0ZUV2ZW50c01vY2subW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0b0dldE1lc3NhZ2VIYW5kbGVyTW9jayA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3cgYXMgYW55LCBcImdldE1lc3NhZ2VIYW5kbGVyXCIpO1xuXHRcdFx0b0dldE1lc3NhZ2VIYW5kbGVyTW9jay5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRvSGFzVHJhbnNpZW50Q29udGV4dE1vY2sgPSBqZXN0LnNweU9uKENvbW1vblV0aWxzLCBcImhhc1RyYW5zaWVudENvbnRleHRcIik7XG5cdFx0XHRvSGFzVHJhbnNpZW50Q29udGV4dE1vY2subW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0b0hhc1RyYW5zaWVudENvbnRleHRNb2NrLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdG9MaXN0QmluZGluZyA9IHtcblx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9ja01vZGVsO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRDb250ZXh0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gb01vY2tDb250ZXh0O1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXRQYXRoOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCIvU2FsZXNPcmRlckl0ZW1cIjtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DcmVhdGVEb2N1bWVudE1vY2sgPSBqZXN0LnNweU9uKG9UcmFuc2FjdGlvbkhlbHBlciwgXCJjcmVhdGVEb2N1bWVudFwiKTtcblx0XHRcdG9DcmVhdGVEb2N1bWVudE1vY2subW9ja1Jlc29sdmVkVmFsdWUoe1xuXHRcdFx0XHRjcmVhdGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdFx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHRcdGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cblx0XHRpdChcIm9uQmVmb3JlQ3JlYXRlIGlzIHJlc29sdmVkXCIsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IGFEYXRhID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJTYWxlc09yZGVyXCI6IDY0Mzdcblx0XHRcdFx0fVxuXHRcdFx0XTtcblxuXHRcdFx0b09uQmVmb3JlQ3JlYXRlTW9jayA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHR9KTtcblx0XHRcdGF3YWl0IChvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnkpLmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKG9MaXN0QmluZGluZywgYURhdGEsIHRydWUsIHRydWUsIG9PbkJlZm9yZUNyZWF0ZU1vY2spO1xuXHRcdFx0ZXhwZWN0KG9PbkJlZm9yZUNyZWF0ZU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHsgY29udGV4dFBhdGg6IG9MaXN0QmluZGluZy5nZXRQYXRoKCkgfSk7XG5cdFx0XHRleHBlY3Qob0NyZWF0ZURvY3VtZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdH0pO1xuXHRcdGl0KFwib25CZWZvcmVDcmVhdGUgaXMgcmVqZWN0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYURhdGEgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcIlNhbGVzT3JkZXJcIjogNjQzN1xuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXG5cdFx0XHRvT25CZWZvcmVDcmVhdGVNb2NrID0gamVzdC5mbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdFx0fSk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCAob0ludGVybmFsRWRpdEZsb3cgYXMgYW55KS5jcmVhdGVNdWx0aXBsZURvY3VtZW50cyhvTGlzdEJpbmRpbmcsIGFEYXRhLCB0cnVlLCB0cnVlLCBvT25CZWZvcmVDcmVhdGVNb2NrKTtcblx0XHRcdH0gY2F0Y2gge1xuXHRcdFx0XHRleHBlY3Qob09uQmVmb3JlQ3JlYXRlTW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBjb250ZXh0UGF0aDogb0xpc3RCaW5kaW5nLmdldFBhdGgoKSB9KTtcblx0XHRcdFx0ZXhwZWN0KG9DcmVhdGVEb2N1bWVudE1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJ0ZXN0aW5nIC0gX2hhc05ld0FjdGlvbkZvclN0aWNreVwiLCAoKSA9PiB7XG5cdFx0bGV0IG9JbnRlcm5hbEVkaXRGbG93OiBhbnksIHNweUdldE1vZGVsOiBhbnksIHNweUdldE1ldGFNb2RlbDogYW55LCBzcHlDb250ZXh0R2V0UGF0aDogYW55LCBzQ3VzdG9tQWN0aW9uOiBzdHJpbmc7XG5cdFx0Y29uc3QgbW9ja0NvbnRleHQgPSB7XG5cdFx0XHRnZXRQYXRoOiBqZXN0LmZuKCgpID0+IFwiXCIpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrVmlldyA9IHtcblx0XHRcdGdldE1vZGVsOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tNb2RlbCA9IHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrTWV0YU1vZGVsID0ge1xuXHRcdFx0Z2V0T2JqZWN0OiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGJlZm9yZUFsbCgoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0RmxvdyA9IG5ldyBJbnRlcm5hbEVkaXRGbG93KCk7XG5cdFx0XHRtb2NrTW9kZWwuZ2V0TWV0YU1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2NrTWV0YU1vZGVsKTtcblx0XHRcdG1vY2tWaWV3LmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2NrTW9kZWwpO1xuXHRcdFx0c3B5R2V0TW9kZWwgPSBqZXN0LnNweU9uKG1vY2tWaWV3LCBcImdldE1vZGVsXCIpO1xuXHRcdFx0c3B5R2V0TWV0YU1vZGVsID0gamVzdC5zcHlPbihtb2NrTW9kZWwsIFwiZ2V0TWV0YU1vZGVsXCIpO1xuXHRcdFx0c3B5Q29udGV4dEdldFBhdGggPSBqZXN0LnNweU9uKG1vY2tDb250ZXh0LCBcImdldFBhdGhcIik7XG5cdFx0fSk7XG5cdFx0YmVmb3JlRWFjaCgoKSA9PiB7fSk7XG5cdFx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHRcdGplc3QuY2xlYXJBbGxNb2NrcygpO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogaW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJzXCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreSh1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0TW9kZWwpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlHZXRNZXRhTW9kZWwpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlDb250ZXh0R2V0UGF0aCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogZW1wdHkgaW5wdXQgcGFyYW1ldGVyc1wiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93Ll9oYXNOZXdBY3Rpb25Gb3JTdGlja3kobW9ja0NvbnRleHQsIG1vY2tWaWV3KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwoZmFsc2UpO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogbWlzc2luZyBjb250ZXh0XCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0bW9ja01ldGFNb2RlbC5nZXRPYmplY3QubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdFx0TmV3QWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc1F1b3RhdGlvblR5cGVcIlxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5faGFzTmV3QWN0aW9uRm9yU3RpY2t5KG1vY2tDb250ZXh0LCBtb2NrVmlldyk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKGZhbHNlKTtcblx0XHR9KTtcblx0XHRpdChcIl9oYXNOZXdBY3Rpb25Gb3JTdGlja3k6IG1pc3NpbmcgTmV3QWN0aW9uL0FkZGl0aW9uYWxOZXdBY3Rpb25cIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrQ29udGV4dC5nZXRQYXRoLm1vY2tSZXR1cm5WYWx1ZShcIi9TYWxlc1F1b3RhdGlvbk1hbmFnZSgnJylcIik7XG5cdFx0XHRzQ3VzdG9tQWN0aW9uID0gXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNRdW90YXRpb25UeXBlXCI7XG5cdFx0XHRtb2NrTWV0YU1vZGVsLmdldE9iamVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0XHREaXNjYXJkQWN0aW9uOiBcIkRpc2NhcmRDaGFuZ2VzXCIsXG5cdFx0XHRcdEVkaXRBY3Rpb246IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuUHJlcGFyZUZvckVkaXRcIixcblx0XHRcdFx0U2F2ZUFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5TYXZlQ2hhbmdlc1wiXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93Ll9oYXNOZXdBY3Rpb25Gb3JTdGlja3kobW9ja0NvbnRleHQsIG1vY2tWaWV3LCBzQ3VzdG9tQWN0aW9uKTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwoZmFsc2UpO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogTmV3QWN0aW9uIGF2YWlsYWJsZVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG1vY2tDb250ZXh0LmdldFBhdGgubW9ja1JldHVyblZhbHVlKFwiL1NhbGVzUXVvdGF0aW9uTWFuYWdlKCcnKVwiKTtcblx0XHRcdHNDdXN0b21BY3Rpb24gPSBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc1F1b3RhdGlvblR5cGVcIjtcblx0XHRcdG1vY2tNZXRhTW9kZWwuZ2V0T2JqZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRcdERpc2NhcmRBY3Rpb246IFwiRGlzY2FyZENoYW5nZXNcIixcblx0XHRcdFx0RWRpdEFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5QcmVwYXJlRm9yRWRpdFwiLFxuXHRcdFx0XHRTYXZlQWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlNhdmVDaGFuZ2VzXCIsXG5cdFx0XHRcdE5ld0FjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNRdW90YXRpb25UeXBlXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreShtb2NrQ29udGV4dCwgbW9ja1ZpZXcsIHNDdXN0b21BY3Rpb24pO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh0cnVlKTtcblx0XHR9KTtcblx0XHRpdChcIl9oYXNOZXdBY3Rpb25Gb3JTdGlja3k6IEFkZGl0aW9uYWxOZXdBY3Rpb24gYXZhaWxhYmxlXCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0bW9ja0NvbnRleHQuZ2V0UGF0aC5tb2NrUmV0dXJuVmFsdWUoXCIvU2FsZXNRdW90YXRpb25NYW5hZ2UoJycpXCIpO1xuXHRcdFx0c0N1c3RvbUFjdGlvbiA9IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFNhbGVzUXVvdGF0aW9uVHlwZVwiO1xuXHRcdFx0bW9ja01ldGFNb2RlbC5nZXRPYmplY3QubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdFx0QWRkaXRpb25hbE5ld0FjdGlvbnM6IFtcblx0XHRcdFx0XHRcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhSZWZGcm9tU2xzSW5xdWlyeVwiLFxuXHRcdFx0XHRcdFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFNhbGVzUXVvdGF0aW9uVHlwZVwiXG5cdFx0XHRcdF0sXG5cdFx0XHRcdERpc2NhcmRBY3Rpb246IFwiRGlzY2FyZENoYW5nZXNcIixcblx0XHRcdFx0RWRpdEFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5QcmVwYXJlRm9yRWRpdFwiLFxuXHRcdFx0XHRTYXZlQWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlNhdmVDaGFuZ2VzXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreShtb2NrQ29udGV4dCwgbW9ja1ZpZXcsIHNDdXN0b21BY3Rpb24pO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh0cnVlKTtcblx0XHRcdGV4cGVjdChzcHlHZXRNb2RlbCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUdldE1ldGFNb2RlbCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUNvbnRleHRHZXRQYXRoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdFx0fSk7XG5cdFx0aXQoXCJfaGFzTmV3QWN0aW9uRm9yU3RpY2t5OiBBZGRpdGlvbmFsTmV3QWN0aW9uIGF2YWlsYWJsZSBidXQgbm90IHRoZSByZWxldmFudCBvbmVcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrQ29udGV4dC5nZXRQYXRoLm1vY2tSZXR1cm5WYWx1ZShcIi9TYWxlc1F1b3RhdGlvbk1hbmFnZSgnJylcIik7XG5cdFx0XHRzQ3VzdG9tQWN0aW9uID0gXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNRdW90YXRpb25UeXBlXCI7XG5cdFx0XHRtb2NrTWV0YU1vZGVsLmdldE9iamVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0XHRBZGRpdGlvbmFsTmV3QWN0aW9uczogW1xuXHRcdFx0XHRcdFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFJlZkZyb21TbHNJbnF1aXJ5XCIsXG5cdFx0XHRcdFx0XCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNPcmRlclR5cGVcIlxuXHRcdFx0XHRdLFxuXHRcdFx0XHREaXNjYXJkQWN0aW9uOiBcIkRpc2NhcmRDaGFuZ2VzXCIsXG5cdFx0XHRcdEVkaXRBY3Rpb246IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuUHJlcGFyZUZvckVkaXRcIixcblx0XHRcdFx0U2F2ZUFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5TYXZlQ2hhbmdlc1wiXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93Ll9oYXNOZXdBY3Rpb25Gb3JTdGlja3kobW9ja0NvbnRleHQsIG1vY2tWaWV3LCBzQ3VzdG9tQWN0aW9uKTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwoZmFsc2UpO1xuXHRcdFx0ZXhwZWN0KHNweUdldE1vZGVsKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0TWV0YU1vZGVsKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5Q29udGV4dEdldFBhdGgpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHR9KTtcblx0fSk7XG5cblx0ZGVzY3JpYmUoXCJ0ZXN0aW5nIGhhbmRsZVN0aWNreU9uKClcIiwgKCkgPT4ge1xuXHRcdGxldCBvSW50ZXJuYWxFZGl0RmxvdzogYW55LFxuXHRcdFx0c3B5R2V0VmlldzogYW55LFxuXHRcdFx0c3B5R2V0QXBwQ29tcG9uZW50OiBhbnksXG5cdFx0XHRzcHlHZXRSb3V0ZXJQcm94eTogYW55LFxuXHRcdFx0c3B5SGFzTmF2aWdhdGlvbkd1YXJkOiBhbnksXG5cdFx0XHRzcHlTZXROYXZpZ2F0aW9uR3VhcmQ6IGFueSxcblx0XHRcdHNweUdldEhhc2g6IGFueSxcblx0XHRcdHNweUdldEludGVybmFsTW9kZWw6IGFueSxcblx0XHRcdHNweVNldEJhY2tOYXZpZ2F0aW9uOiBhbnksXG5cdFx0XHRzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcjogYW55LFxuXHRcdFx0c3B5R2V0TW9kZWw6IGFueSxcblx0XHRcdHNweUF0dGFjaFNlc3Npb25UaW1lb3V0OiBhbnksXG5cdFx0XHRzcHlBdHRhY2hSb3V0ZU1hdGNoZWQ6IGFueTtcblx0XHRjb25zdCBtb2NrR2V0U2hlbGxTZXJ2aWNlcyA9IHtcblx0XHRcdHNldEJhY2tOYXZpZ2F0aW9uOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZCksXG5cdFx0XHRyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcjogamVzdC5mbigpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrR2V0Um91dGVyUHJveHkgPSB7XG5cdFx0XHRoYXNOYXZpZ2F0aW9uR3VhcmQ6IGplc3QuZm4oKSxcblx0XHRcdHNldE5hdmlnYXRpb25HdWFyZDogamVzdC5mbigpLFxuXHRcdFx0Z2V0SGFzaDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShcIlwiKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldFJvdXRpbmdTZXJ2aWNlID0ge1xuXHRcdFx0YXR0YWNoUm91dGVNYXRjaGVkOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRBcHBDb21wb25lbnQgPSB7XG5cdFx0XHRnZXRSb3V0ZXJQcm94eTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0Um91dGVyUHJveHkpLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0U2hlbGxTZXJ2aWNlcyksXG5cdFx0XHRnZXRSb3V0aW5nU2VydmljZTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0Um91dGluZ1NlcnZpY2UpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrQ29udGV4dCA9IHt9O1xuXHRcdGNvbnN0IG1vY2tHZXRNb2RlbCA9IHtcblx0XHRcdGF0dGFjaFNlc3Npb25UaW1lb3V0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRWaWV3ID0ge1xuXHRcdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0dldE1vZGVsKVxuXHRcdH07XG5cdFx0YmVmb3JlQWxsKCgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93ID0gbmV3IEludGVybmFsRWRpdEZsb3coKTtcblx0XHRcdHNweUdldFZpZXcgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93LCBcImdldFZpZXdcIik7XG5cdFx0XHRzcHlHZXRWaWV3Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBtb2NrR2V0Vmlldyk7XG5cdFx0XHRzcHlHZXRNb2RlbCA9IGplc3Quc3B5T24obW9ja0dldFZpZXcsIFwiZ2V0TW9kZWxcIik7XG5cdFx0XHRzcHlBdHRhY2hTZXNzaW9uVGltZW91dCA9IGplc3Quc3B5T24obW9ja0dldE1vZGVsLCBcImF0dGFjaFNlc3Npb25UaW1lb3V0XCIpO1xuXHRcdFx0c3B5R2V0QXBwQ29tcG9uZW50ID0gamVzdC5zcHlPbihDb21tb25VdGlscywgXCJnZXRBcHBDb21wb25lbnRcIik7XG5cdFx0XHRzcHlHZXRSb3V0ZXJQcm94eSA9IGplc3Quc3B5T24obW9ja0dldEFwcENvbXBvbmVudCwgXCJnZXRSb3V0ZXJQcm94eVwiKTtcblx0XHRcdHNweUhhc05hdmlnYXRpb25HdWFyZCA9IGplc3Quc3B5T24obW9ja0dldFJvdXRlclByb3h5LCBcImhhc05hdmlnYXRpb25HdWFyZFwiKTtcblx0XHRcdHNweVNldE5hdmlnYXRpb25HdWFyZCA9IGplc3Quc3B5T24obW9ja0dldFJvdXRlclByb3h5LCBcInNldE5hdmlnYXRpb25HdWFyZFwiKTtcblx0XHRcdHNweUdldEhhc2ggPSBqZXN0LnNweU9uKG1vY2tHZXRSb3V0ZXJQcm94eSwgXCJnZXRIYXNoXCIpO1xuXHRcdFx0c3B5R2V0SW50ZXJuYWxNb2RlbCA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3csIFwiZ2V0SW50ZXJuYWxNb2RlbFwiKTtcblx0XHRcdHNweUdldEludGVybmFsTW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSk7XG5cdFx0XHRzcHlTZXRCYWNrTmF2aWdhdGlvbiA9IGplc3Quc3B5T24obW9ja0dldFNoZWxsU2VydmljZXMsIFwic2V0QmFja05hdmlnYXRpb25cIik7XG5cdFx0XHRzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciA9IGplc3Quc3B5T24obW9ja0dldFNoZWxsU2VydmljZXMsIFwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXJcIik7XG5cdFx0XHRzcHlBdHRhY2hSb3V0ZU1hdGNoZWQgPSBqZXN0LnNweU9uKG1vY2tHZXRSb3V0aW5nU2VydmljZSwgXCJhdHRhY2hSb3V0ZU1hdGNoZWRcIik7XG5cdFx0fSk7XG5cdFx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHRcdGplc3QuY2xlYXJBbGxNb2NrcygpO1xuXHRcdH0pO1xuXHRcdGl0KFwiaGFuZGxlU3RpY2t5T246IGlucHV0IHBhcmFtYXRlciBvQ29udGV4dCBpcyB1bmRlZmluZWRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T24odW5kZWZpbmVkKTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodW5kZWZpbmVkKTtcblx0XHRcdGV4cGVjdChzcHlHZXRBcHBDb21wb25lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImhhbmRsZVN0aWNreU9uOiBpbnB1dCBwYXJhbWF0ZXIgb0NvbnRleHQgaXMgZW1wdHlcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5oYW5kbGVTdGlja3lPbihtb2NrQ29udGV4dCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0QXBwQ29tcG9uZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJoYW5kbGVTdGlja3lPbjogY2hlY2sgdmFsaWQgaW5wdXRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1vY2tHZXRBcHBDb21wb25lbnQ7XG5cdFx0XHR9KTtcblx0XHRcdHNweUhhc05hdmlnYXRpb25HdWFyZC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93LmhhbmRsZVN0aWNreU9uKG1vY2tDb250ZXh0KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodHJ1ZSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0QXBwQ29tcG9uZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHRcdGV4cGVjdChzcHlIYXNOYXZpZ2F0aW9uR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlHZXRIYXNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5U2V0TmF2aWdhdGlvbkd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHRleHBlY3Qoc3B5U2V0QmFja05hdmlnYXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUF0dGFjaFNlc3Npb25UaW1lb3V0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5QXR0YWNoUm91dGVNYXRjaGVkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJoYW5kbGVTdGlja3lPbjogbmF2aWdhdGlvbiBndWFyZCBhbHJlYWR5IHNldFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldEFwcENvbXBvbmVudDtcblx0XHRcdH0pO1xuXHRcdFx0c3B5SGFzTmF2aWdhdGlvbkd1YXJkLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5oYW5kbGVTdGlja3lPbihtb2NrQ29udGV4dCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEFwcENvbXBvbmVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUdldFJvdXRlclByb3h5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5SGFzTmF2aWdhdGlvbkd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0SGFzaCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweVNldE5hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweVNldEJhY2tOYXZpZ2F0aW9uKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHRleHBlY3Qoc3B5UmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlBdHRhY2hTZXNzaW9uVGltZW91dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweUF0dGFjaFJvdXRlTWF0Y2hlZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInRlc3RpbmcgaGFuZGxlU3RpY2t5T2ZmKClcIiwgKCkgPT4ge1xuXHRcdGxldCBvSW50ZXJuYWxFZGl0RmxvdzogYW55LFxuXHRcdFx0b1RyYW5zYWN0aW9uSGVscGVyOiBhbnksXG5cdFx0XHRzcHlHZXRWaWV3OiBhbnksXG5cdFx0XHRzcHlTZXRFZGl0TW9kZTogYW55LFxuXHRcdFx0c3B5R2V0QXBwQ29tcG9uZW50OiBhbnksXG5cdFx0XHRzcHlHZXRUcmFuc2FjdGlvbkhlbHBlcjogYW55LFxuXHRcdFx0c3B5RGlzY2FyZE5hdmlnYXRpb25HdWFyZDogYW55LFxuXHRcdFx0c3B5RGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcjogYW55O1xuXHRcdGNvbnN0IG1vY2tHZXRBcHBDb21wb25lbnQgPSB7XG5cdFx0XHRnZXRSb3V0ZXJQcm94eTogamVzdC5mbigpLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0Um91dGluZ1NlcnZpY2U6IGplc3QuZm4oKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0Rpc2NhcmROYXZpZ2F0aW9uR3VhcmQgPSB7XG5cdFx0XHRkaXNjYXJkTmF2aWdhdGlvbkd1YXJkOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRTaGVsbFNlcnZpY2VzID0ge1xuXHRcdFx0ZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcjogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpLFxuXHRcdFx0c2V0QmFja05hdmlnYXRpb246IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldFJvdXRpbmdTZXJ2aWNlID0ge1xuXHRcdFx0ZGV0YWNoUm91dGVNYXRjaGVkOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRNb2RlbCA9IHtcblx0XHRcdGdldE1vZGVsOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tEZXRhY2hTZXNzaW9uVGltZW91dCA9IHtcblx0XHRcdGRldGFjaFNlc3Npb25UaW1lb3V0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZClcblx0XHR9O1xuXHRcdGJlZm9yZUFsbCgoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0RmxvdyA9IG5ldyBJbnRlcm5hbEVkaXRGbG93KCk7XG5cdFx0XHRvVHJhbnNhY3Rpb25IZWxwZXIgPSBuZXcgVHJhbnNhY3Rpb25IZWxwZXIobnVsbCwgbnVsbCk7XG5cdFx0XHRtb2NrR2V0QXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5Lm1vY2tSZXR1cm5WYWx1ZShtb2NrRGlzY2FyZE5hdmlnYXRpb25HdWFyZCk7XG5cdFx0XHRtb2NrR2V0QXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMubW9ja1JldHVyblZhbHVlKG1vY2tHZXRTaGVsbFNlcnZpY2VzKTtcblx0XHRcdG1vY2tHZXRBcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UubW9ja1JldHVyblZhbHVlKG1vY2tHZXRSb3V0aW5nU2VydmljZSk7XG5cdFx0XHRtb2NrR2V0TW9kZWwuZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vY2tEZXRhY2hTZXNzaW9uVGltZW91dCk7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQgPSBqZXN0LnNweU9uKENvbW1vblV0aWxzLCBcImdldEFwcENvbXBvbmVudFwiKTtcblx0XHRcdHNweURpc2NhcmROYXZpZ2F0aW9uR3VhcmQgPSBqZXN0LnNweU9uKG1vY2tEaXNjYXJkTmF2aWdhdGlvbkd1YXJkLCBcImRpc2NhcmROYXZpZ2F0aW9uR3VhcmRcIik7XG5cdFx0XHRzcHlEZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyID0gamVzdC5zcHlPbihtb2NrR2V0U2hlbGxTZXJ2aWNlcywgXCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyXCIpO1xuXHRcdFx0c3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93LCBcImdldFRyYW5zYWN0aW9uSGVscGVyXCIpO1xuXHRcdFx0c3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9UcmFuc2FjdGlvbkhlbHBlcjtcblx0XHRcdH0pO1xuXHRcdFx0c3B5U2V0RWRpdE1vZGUgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93LCBcInNldEVkaXRNb2RlXCIpO1xuXHRcdFx0c3B5U2V0RWRpdE1vZGUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHVuZGVmaW5lZCk7XG5cdFx0XHRzcHlHZXRWaWV3ID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdywgXCJnZXRWaWV3XCIpO1xuXHRcdFx0c3B5R2V0Vmlldy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldE1vZGVsO1xuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxFZGl0Rmxvdy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9KTtcblx0XHRiZWZvcmVFYWNoKCgpID0+IHt9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5jbGVhckFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJoYW5kbGVTdGlja3lPZmY6IGFwcENvbXBvbmVudCBpcyB1bmRlZmluZWRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0Rmxvdy5mbkRpcnR5U3RhdGVQcm92aWRlciA9IHRydWU7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3Qoc3B5RGlzY2FyZE5hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdH0pO1xuXHRcdGl0KFwiaGFuZGxlU3RpY2t5T2ZmOiB2YWxpZCBmdW5jdGlvbiBjYWxsLCBhbGwgc2V0IGNvcnJlY3RseVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gdHJ1ZTtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldEFwcENvbXBvbmVudDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdFx0ZXhwZWN0KHNweVNldEVkaXRNb2RlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0QXBwQ29tcG9uZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5RGlzY2FyZE5hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweURlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImhhbmRsZVN0aWNreU9mZjogZm5EaXJ0eVN0YXRlUHJvdmlkZXIgbm90IHNldFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gZmFsc2U7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1vY2tHZXRBcHBDb21wb25lbnQ7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93LmhhbmRsZVN0aWNreU9mZigpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh0cnVlKTtcblx0XHRcdGV4cGVjdChzcHlTZXRFZGl0TW9kZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEFwcENvbXBvbmVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweURpc2NhcmROYXZpZ2F0aW9uR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlEZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0fSk7XG5cdH0pO1xufSk7XG4iXX0=
804
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkludGVybmFsRWRpdEZsb3cuc3BlYy50cyJdLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiZGVzY3JpYmUiLCJvVGVzdFJlZmVyZW5jZXMiLCJhZnRlckFsbCIsImplc3QiLCJyZXNldEFsbE1vY2tzIiwib1RyYW5zYWN0aW9uSGVscGVyIiwib0ludGVybmFsRWRpdEZsb3ciLCJvR2V0VHJhbnNhY3Rpb25IZWxwZXJNb2NrIiwib0dldEdsb2JhbFVJTW9kZWxsTW9jayIsIm9HZXRWaWV3TW9jayIsIm9CdXN5TG9ja01vY2siLCJvU3luY1Rhc2tNb2NrIiwib0hhbmRsZUNyZWF0ZUV2ZW50c01vY2siLCJvR2V0TWVzc2FnZUhhbmRsZXJNb2NrIiwib0hhc1RyYW5zaWVudENvbnRleHRNb2NrIiwib0J1c3lVbmxvY2tNb2NrIiwib09uQmVmb3JlQ3JlYXRlTW9jayIsIm9MaXN0QmluZGluZyIsIm9DcmVhdGVEb2N1bWVudE1vY2siLCJvTW9ja01vZGVsIiwiTW9ja01vZGVsIiwib01vY2tNZXRhTW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwib01vY2tDb250ZXh0IiwiTW9ja0NvbnRleHQiLCIkcGF0aCIsInNldE1ldGFNb2RlbCIsImJlZm9yZUVhY2giLCJJbnRlcm5hbEVkaXRGbG93IiwiVHJhbnNhY3Rpb25IZWxwZXIiLCJzcHlPbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsInVuZGVmaW5lZCIsImdldENvbnRyb2xsZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkJ1c3lMb2NrZXIiLCJtb2NrUmV0dXJuVmFsdWUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIkNvbW1vblV0aWxzIiwiZ2V0TW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNyZWF0ZWQiLCJhZnRlckVhY2giLCJyZXN0b3JlQWxsTW9ja3MiLCJpdCIsImFEYXRhIiwiZm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJjb250ZXh0UGF0aCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInJlamVjdCIsInNweUdldE1vZGVsIiwic3B5R2V0TWV0YU1vZGVsIiwic3B5Q29udGV4dEdldFBhdGgiLCJzQ3VzdG9tQWN0aW9uIiwibW9ja0NvbnRleHQiLCJtb2NrVmlldyIsIm1vY2tNb2RlbCIsImdldE1ldGFNb2RlbCIsIm1vY2tNZXRhTW9kZWwiLCJnZXRPYmplY3QiLCJiZWZvcmVBbGwiLCJjbGVhckFsbE1vY2tzIiwiX2hhc05ld0FjdGlvbkZvclN0aWNreSIsImJSZXNwb25zZSIsInRvRXF1YWwiLCJOZXdBY3Rpb24iLCJEaXNjYXJkQWN0aW9uIiwiRWRpdEFjdGlvbiIsIlNhdmVBY3Rpb24iLCJBZGRpdGlvbmFsTmV3QWN0aW9ucyIsInNweUdldFZpZXciLCJzcHlHZXRBcHBDb21wb25lbnQiLCJzcHlHZXRSb3V0ZXJQcm94eSIsInNweUhhc05hdmlnYXRpb25HdWFyZCIsInNweVNldE5hdmlnYXRpb25HdWFyZCIsInNweUdldEhhc2giLCJzcHlHZXRJbnRlcm5hbE1vZGVsIiwic3B5U2V0QmFja05hdmlnYXRpb24iLCJzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInNweUF0dGFjaFNlc3Npb25UaW1lb3V0Iiwic3B5QXR0YWNoUm91dGVNYXRjaGVkIiwibW9ja0dldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwibW9ja0dldFJvdXRlclByb3h5IiwiaGFzTmF2aWdhdGlvbkd1YXJkIiwic2V0TmF2aWdhdGlvbkd1YXJkIiwiZ2V0SGFzaCIsIm1vY2tHZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsIm1vY2tHZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0ZXJQcm94eSIsImdldFNoZWxsU2VydmljZXMiLCJnZXRSb3V0aW5nU2VydmljZSIsIm1vY2tHZXRNb2RlbCIsImF0dGFjaFNlc3Npb25UaW1lb3V0IiwibW9ja0dldFZpZXciLCJoYW5kbGVTdGlja3lPbiIsInNweVNldEVkaXRNb2RlIiwic3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIiLCJzcHlEaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwic3B5RGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsIm1vY2tEaXNjYXJkTmF2aWdhdGlvbkd1YXJkIiwiZGlzY2FyZE5hdmlnYXRpb25HdWFyZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJtb2NrRGV0YWNoU2Vzc2lvblRpbWVvdXQiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImZuSGFuZGxlU2Vzc2lvblRpbWVvdXQiLCJmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24iLCJmbkRpcnR5U3RhdGVQcm92aWRlciIsImhhbmRsZVN0aWNreU9mZiIsIm1vY2tIYXNoVHJhY2tlciIsInNweUlzTmF2aWdhdGlvbkZpbmFsaXplZCIsInNweUNoZWNrSGFzaFdpdGhHdWFyZCIsInNweUlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIiLCJzcHlTZXREaXJ0eUZsYWciLCJtb2Nrb05hdmlnYXRpb25Db250ZXh0IiwiaW5uZXJBcHBSb3V0ZSIsInNldERpcnR5RmxhZyIsImlzTmF2aWdhdGlvbkZpbmFsaXplZCIsImNoZWNrSGFzaFdpdGhHdWFyZCIsImlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIiLCJtb2NrQXBwQ29tcG9uZW50IiwibW9ja0ludGVybmFsTW9kZWwiLCJnZXRQcm9wZXJ0eSIsIl9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInNweVJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNweUFkZERlcGVuZGVudCIsIm1vY2tHZXRNZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsIm1vY2tHZXRSb3V0aW5nTGlzdGVuZXIiLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsImFkZERlcGVuZGVudCIsImdldE1lc3NhZ2VIYW5kbGVyIiwiZ2V0Um91dGluZ0xpc3RlbmVyIiwiZ2V0VmlldyIsIl9hdHRhY2hTZXNzaW9uVGltZW91dCIsInNweURpc2NhcmRTdGlja3lTZXNzaW9uIiwibW9ja0ZuQ29udGV4dCIsImRpc2NhcmRTdGlja3lTZXNzaW9uIiwiX2F0dGFjaFJvdXRlTWF0Y2hlZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFnakJPLGtCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0FBQ3JDLFFBQUk7QUFDSCxVQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7QUFDQSxLQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO0FBQ1YsYUFBT0YsT0FBTyxDQUFDRSxDQUFELENBQWQ7QUFDQTs7QUFDRCxRQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBckIsRUFBMkI7QUFDMUIsYUFBT0YsTUFBTSxDQUFDRSxJQUFQLENBQVksS0FBSyxDQUFqQixFQUFvQkgsT0FBcEIsQ0FBUDtBQUNBOztBQUNELFdBQU9DLE1BQVA7QUFDQTs7QUFyakJERyxFQUFBQSxRQUFRLENBQUMsc0NBQUQsRUFBeUMsWUFBVztBQUMzRCxRQUFNQyxlQUFlLEdBQUc7QUFDdkIsb0JBQWMsQ0FDYjtBQUNDLGdCQUFRLE1BRFQ7QUFFQyxjQUFNO0FBRlAsT0FEYTtBQURTLEtBQXhCO0FBUUFDLElBQUFBLFFBQVEsQ0FBQyxZQUFNO0FBQ2RDLE1BQUFBLElBQUksQ0FBQ0MsYUFBTDtBQUNBLEtBRk8sQ0FBUjtBQUdBSixJQUFBQSxRQUFRLENBQUMsMENBQUQsRUFBNkMsWUFBTTtBQUMxRCxVQUFJSyxrQkFBSixFQUE2QkMsaUJBQTdCO0FBQ0EsVUFBSUMseUJBQUosRUFDQ0Msc0JBREQsRUFFQ0MsWUFGRCxFQUdDQyxhQUhELEVBSUNDLGFBSkQsRUFLQ0MsdUJBTEQsRUFNQ0Msc0JBTkQsRUFPQ0Msd0JBUEQsRUFRQ0MsZUFSRCxFQVNDQyxt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QSxNQUFNLENBQUM4QixVQUFELENBQU4sQ0FBbUIzQixxQkFBbkIsQ0FBeUMsQ0FBekM7QUFDQUgsWUFBQUEsTUFBTSxDQUFDcUUscUJBQUQsQ0FBTixDQUE4QmxFLHFCQUE5QixDQUFvRCxDQUFwRDtBQUNBSCxZQUFBQSxNQUFNLENBQUM2Rix1QkFBRCxDQUFOLENBQWdDMUYscUJBQWhDLENBQXNELENBQXREO0FBUDZGO0FBUTdGLFNBUkM7QUFBQTtBQUFBO0FBQUEsUUFBRjtBQVNBVCxNQUFBQSxFQUFFLENBQUMsMkRBQUQsRUFBOEQ3QyxlQUE5RDtBQUFBLFlBQTJGO0FBQzVGMEYsVUFBQUEsa0JBQWtCLENBQUNHLE9BQW5CLENBQTJCekQsZUFBM0IsQ0FBMkMsS0FBM0M7QUFDQXNELFVBQUFBLGtCQUFrQixDQUFDcUMsa0JBQW5CLENBQXNDM0YsZUFBdEMsQ0FBc0QsSUFBdEQ7O0FBQ0EsY0FBTStFLDhCQUE4QixHQUFHOUcsaUJBQWlCLENBQUM4SSxtQkFBbEIsQ0FBc0NGLGFBQXRDLEVBQXFEbEgsU0FBckQsRUFBZ0VrRyxnQkFBaEUsQ0FBdkM7O0FBSDRGLGlDQUl0RmQsOEJBQThCLEVBSndEO0FBSzVGaEUsWUFBQUEsTUFBTSxDQUFDOEIsVUFBRCxDQUFOLENBQW1CM0IscUJBQW5CLENBQXlDLENBQXpDO0FBQ0FILFlBQUFBLE1BQU0sQ0FBQ3FFLHFCQUFELENBQU4sQ0FBOEJsRSxxQkFBOUIsQ0FBb0QsQ0FBcEQ7QUFDQUgsWUFBQUEsTUFBTSxDQUFDNkYsdUJBQUQsQ0FBTixDQUFnQzFGLHFCQUFoQyxDQUFzRCxDQUF0RDtBQVA0RjtBQVE1RixTQVJDO0FBQUE7QUFBQTtBQUFBLFFBQUY7QUFTQSxLQWpETyxDQUFSO0FBa0RBLEdBOXJCTyxDQUFSIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2NrQ29udGV4dCwgTW9ja01ldGFNb2RlbCwgTW9ja01vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcblxuaW1wb3J0IEludGVybmFsRWRpdEZsb3cgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsRWRpdEZsb3dcIjtcbmltcG9ydCBUcmFuc2FjdGlvbkhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvVHJhbnNhY3Rpb25IZWxwZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9CdXN5TG9ja2VyXCI7XG5cbmRlc2NyaWJlKFwiSW50ZXJuYWxFZGl0RmxvdyBDb250cm9sbGVyRXh0ZW5zaW9uXCIsIGZ1bmN0aW9uKCkge1xuXHRjb25zdCBvVGVzdFJlZmVyZW5jZXMgPSB7XG5cdFx0XCJyZWZlcmVuY2VzXCI6IFtcblx0XHRcdHtcblx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcIklEXCI6IFwiRklPUklURUNIUDEtMjIyOTRcIlxuXHRcdFx0fVxuXHRcdF1cblx0fTtcblx0YWZ0ZXJBbGwoKCkgPT4ge1xuXHRcdGplc3QucmVzZXRBbGxNb2NrcygpO1xuXHR9KTtcblx0ZGVzY3JpYmUoXCJjcmVhdGVNdWx0aXBsZURvY3VtZW50cyAtIG9uQmVmb3JlQ3JlYXRlXCIsICgpID0+IHtcblx0XHRsZXQgb1RyYW5zYWN0aW9uSGVscGVyOiBhbnksIG9JbnRlcm5hbEVkaXRGbG93OiBhbnk7XG5cdFx0bGV0IG9HZXRUcmFuc2FjdGlvbkhlbHBlck1vY2ssXG5cdFx0XHRvR2V0R2xvYmFsVUlNb2RlbGxNb2NrLFxuXHRcdFx0b0dldFZpZXdNb2NrLFxuXHRcdFx0b0J1c3lMb2NrTW9jayxcblx0XHRcdG9TeW5jVGFza01vY2ssXG5cdFx0XHRvSGFuZGxlQ3JlYXRlRXZlbnRzTW9jayxcblx0XHRcdG9HZXRNZXNzYWdlSGFuZGxlck1vY2ssXG5cdFx0XHRvSGFzVHJhbnNpZW50Q29udGV4dE1vY2ssXG5cdFx0XHRvQnVzeVVubG9ja01vY2ssXG5cdFx0XHRvT25CZWZvcmVDcmVhdGVNb2NrLFxuXHRcdFx0b0xpc3RCaW5kaW5nOiBhbnksXG5cdFx0XHRvQ3JlYXRlRG9jdW1lbnRNb2NrOiBhbnk7XG5cdFx0Y29uc3Qgb01vY2tNb2RlbCA9IG5ldyBNb2NrTW9kZWwoKTtcblx0XHRjb25zdCBvTW9ja01ldGFNb2RlbCA9IG5ldyBNb2NrTWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IFwiU2FsZXNPcmRlckl0ZW1cIiB9KTtcblx0XHRvTW9ja01vZGVsLnNldE1ldGFNb2RlbChvTW9ja01ldGFNb2RlbCk7XG5cdFx0YmVmb3JlRWFjaCgoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0RmxvdyA9IG5ldyBJbnRlcm5hbEVkaXRGbG93KCk7XG5cdFx0XHRvVHJhbnNhY3Rpb25IZWxwZXIgPSBuZXcgVHJhbnNhY3Rpb25IZWxwZXIobnVsbCBhcyBhbnksIG51bGwpO1xuXHRcdFx0b0dldFRyYW5zYWN0aW9uSGVscGVyTW9jayA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3cgYXMgYW55LCBcImdldFRyYW5zYWN0aW9uSGVscGVyXCIpO1xuXHRcdFx0b0dldFRyYW5zYWN0aW9uSGVscGVyTW9jay5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gb1RyYW5zYWN0aW9uSGVscGVyO1xuXHRcdFx0fSk7XG5cdFx0XHRvR2V0R2xvYmFsVUlNb2RlbGxNb2NrID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnksIFwiZ2V0R2xvYmFsVUlNb2RlbFwiKTtcblx0XHRcdG9HZXRHbG9iYWxVSU1vZGVsbE1vY2subW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHVuZGVmaW5lZCk7XG5cdFx0XHRvR2V0Vmlld01vY2sgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93IGFzIGFueSwgXCJnZXRWaWV3XCIpO1xuXHRcdFx0b0dldFZpZXdNb2NrLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Z2V0Q29udHJvbGxlcjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGU6IG51bGxcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRCaW5kaW5nQ29udGV4dDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdG9CdXN5TG9ja01vY2sgPSBqZXN0LnNweU9uKEJ1c3lMb2NrZXIsIFwibG9ja1wiKTtcblx0XHRcdG9CdXN5TG9ja01vY2subW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0b0J1c3lVbmxvY2tNb2NrID0gamVzdC5zcHlPbihCdXN5TG9ja2VyLCBcInVubG9ja1wiKTtcblx0XHRcdG9CdXN5VW5sb2NrTW9jay5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRvU3luY1Rhc2tNb2NrID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnksIFwic3luY1Rhc2tcIik7XG5cdFx0XHRvU3luY1Rhc2tNb2NrLm1vY2tSZXNvbHZlZFZhbHVlKG51bGwpO1xuXHRcdFx0b0hhbmRsZUNyZWF0ZUV2ZW50c01vY2sgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93IGFzIGFueSwgXCJoYW5kbGVDcmVhdGVFdmVudHNcIik7XG5cdFx0XHRvSGFuZGxlQ3JlYXRlRXZlbnRzTW9jay5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRvR2V0TWVzc2FnZUhhbmRsZXJNb2NrID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnksIFwiZ2V0TWVzc2FnZUhhbmRsZXJcIik7XG5cdFx0XHRvR2V0TWVzc2FnZUhhbmRsZXJNb2NrLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdG9IYXNUcmFuc2llbnRDb250ZXh0TW9jayA9IGplc3Quc3B5T24oQ29tbW9uVXRpbHMsIFwiaGFzVHJhbnNpZW50Q29udGV4dFwiKTtcblx0XHRcdG9IYXNUcmFuc2llbnRDb250ZXh0TW9jay5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRvSGFzVHJhbnNpZW50Q29udGV4dE1vY2subW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0b0xpc3RCaW5kaW5nID0ge1xuXHRcdFx0XHRnZXRNb2RlbDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Nb2NrTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBvTW9ja0NvbnRleHQ7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFBhdGg6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBcIi9TYWxlc09yZGVySXRlbVwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NyZWF0ZURvY3VtZW50TW9jayA9IGplc3Quc3B5T24ob1RyYW5zYWN0aW9uSGVscGVyLCBcImNyZWF0ZURvY3VtZW50XCIpO1xuXHRcdFx0b0NyZWF0ZURvY3VtZW50TW9jay5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG5cdFx0XHRcdGNyZWF0ZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcblx0XHR9KTtcblxuXHRcdGl0KFwib25CZWZvcmVDcmVhdGUgaXMgcmVzb2x2ZWRcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYURhdGEgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcIlNhbGVzT3JkZXJcIjogNjQzN1xuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXG5cdFx0XHRvT25CZWZvcmVDcmVhdGVNb2NrID0gamVzdC5mbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH0pO1xuXHRcdFx0YXdhaXQgKG9JbnRlcm5hbEVkaXRGbG93IGFzIGFueSkuY3JlYXRlTXVsdGlwbGVEb2N1bWVudHMob0xpc3RCaW5kaW5nLCBhRGF0YSwgdHJ1ZSwgdHJ1ZSwgb09uQmVmb3JlQ3JlYXRlTW9jayk7XG5cdFx0XHRleHBlY3Qob09uQmVmb3JlQ3JlYXRlTW9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBjb250ZXh0UGF0aDogb0xpc3RCaW5kaW5nLmdldFBhdGgoKSB9KTtcblx0XHRcdGV4cGVjdChvQ3JlYXRlRG9jdW1lbnRNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJvbkJlZm9yZUNyZWF0ZSBpcyByZWplY3RlZFwiLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBhRGF0YSA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwiU2FsZXNPcmRlclwiOiA2NDM3XG5cdFx0XHRcdH1cblx0XHRcdF07XG5cblx0XHRcdG9PbkJlZm9yZUNyZWF0ZU1vY2sgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cdFx0XHR9KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IChvSW50ZXJuYWxFZGl0RmxvdyBhcyBhbnkpLmNyZWF0ZU11bHRpcGxlRG9jdW1lbnRzKG9MaXN0QmluZGluZywgYURhdGEsIHRydWUsIHRydWUsIG9PbkJlZm9yZUNyZWF0ZU1vY2spO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdGV4cGVjdChvT25CZWZvcmVDcmVhdGVNb2NrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7IGNvbnRleHRQYXRoOiBvTGlzdEJpbmRpbmcuZ2V0UGF0aCgpIH0pO1xuXHRcdFx0XHRleHBlY3Qob0NyZWF0ZURvY3VtZW50TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInRlc3RpbmcgLSBfaGFzTmV3QWN0aW9uRm9yU3RpY2t5XCIsICgpID0+IHtcblx0XHRsZXQgb0ludGVybmFsRWRpdEZsb3c6IGFueSwgc3B5R2V0TW9kZWw6IGFueSwgc3B5R2V0TWV0YU1vZGVsOiBhbnksIHNweUNvbnRleHRHZXRQYXRoOiBhbnksIHNDdXN0b21BY3Rpb246IHN0cmluZztcblx0XHRjb25zdCBtb2NrQ29udGV4dCA9IHtcblx0XHRcdGdldFBhdGg6IGplc3QuZm4oKCkgPT4gXCJcIilcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tWaWV3ID0ge1xuXHRcdFx0Z2V0TW9kZWw6IGplc3QuZm4oKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja01vZGVsID0ge1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tNZXRhTW9kZWwgPSB7XG5cdFx0XHRnZXRPYmplY3Q6IGplc3QuZm4oKVxuXHRcdH07XG5cdFx0YmVmb3JlQWxsKCgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93ID0gbmV3IEludGVybmFsRWRpdEZsb3coKTtcblx0XHRcdG1vY2tNb2RlbC5nZXRNZXRhTW9kZWwubW9ja1JldHVyblZhbHVlKG1vY2tNZXRhTW9kZWwpO1xuXHRcdFx0bW9ja1ZpZXcuZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vY2tNb2RlbCk7XG5cdFx0XHRzcHlHZXRNb2RlbCA9IGplc3Quc3B5T24obW9ja1ZpZXcsIFwiZ2V0TW9kZWxcIik7XG5cdFx0XHRzcHlHZXRNZXRhTW9kZWwgPSBqZXN0LnNweU9uKG1vY2tNb2RlbCwgXCJnZXRNZXRhTW9kZWxcIik7XG5cdFx0XHRzcHlDb250ZXh0R2V0UGF0aCA9IGplc3Quc3B5T24obW9ja0NvbnRleHQsIFwiZ2V0UGF0aFwiKTtcblx0XHR9KTtcblx0XHRiZWZvcmVFYWNoKCgpID0+IHt9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5jbGVhckFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJfaGFzTmV3QWN0aW9uRm9yU3RpY2t5OiBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnNcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5faGFzTmV3QWN0aW9uRm9yU3RpY2t5KHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodW5kZWZpbmVkKTtcblx0XHRcdGV4cGVjdChzcHlHZXRNb2RlbCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweUdldE1ldGFNb2RlbCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweUNvbnRleHRHZXRQYXRoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJfaGFzTmV3QWN0aW9uRm9yU3RpY2t5OiBlbXB0eSBpbnB1dCBwYXJhbWV0ZXJzXCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreShtb2NrQ29udGV4dCwgbW9ja1ZpZXcpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbChmYWxzZSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJfaGFzTmV3QWN0aW9uRm9yU3RpY2t5OiBtaXNzaW5nIGNvbnRleHRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrTWV0YU1vZGVsLmdldE9iamVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0XHROZXdBY3Rpb246IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFNhbGVzUXVvdGF0aW9uVHlwZVwiXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93Ll9oYXNOZXdBY3Rpb25Gb3JTdGlja3kobW9ja0NvbnRleHQsIG1vY2tWaWV3KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwoZmFsc2UpO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogbWlzc2luZyBOZXdBY3Rpb24vQWRkaXRpb25hbE5ld0FjdGlvblwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG1vY2tDb250ZXh0LmdldFBhdGgubW9ja1JldHVyblZhbHVlKFwiL1NhbGVzUXVvdGF0aW9uTWFuYWdlKCcnKVwiKTtcblx0XHRcdHNDdXN0b21BY3Rpb24gPSBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc1F1b3RhdGlvblR5cGVcIjtcblx0XHRcdG1vY2tNZXRhTW9kZWwuZ2V0T2JqZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRcdERpc2NhcmRBY3Rpb246IFwiRGlzY2FyZENoYW5nZXNcIixcblx0XHRcdFx0RWRpdEFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5QcmVwYXJlRm9yRWRpdFwiLFxuXHRcdFx0XHRTYXZlQWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlNhdmVDaGFuZ2VzXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreShtb2NrQ29udGV4dCwgbW9ja1ZpZXcsIHNDdXN0b21BY3Rpb24pO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbChmYWxzZSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJfaGFzTmV3QWN0aW9uRm9yU3RpY2t5OiBOZXdBY3Rpb24gYXZhaWxhYmxlXCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0bW9ja0NvbnRleHQuZ2V0UGF0aC5tb2NrUmV0dXJuVmFsdWUoXCIvU2FsZXNRdW90YXRpb25NYW5hZ2UoJycpXCIpO1xuXHRcdFx0c0N1c3RvbUFjdGlvbiA9IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFNhbGVzUXVvdGF0aW9uVHlwZVwiO1xuXHRcdFx0bW9ja01ldGFNb2RlbC5nZXRPYmplY3QubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdFx0RGlzY2FyZEFjdGlvbjogXCJEaXNjYXJkQ2hhbmdlc1wiLFxuXHRcdFx0XHRFZGl0QWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlByZXBhcmVGb3JFZGl0XCIsXG5cdFx0XHRcdFNhdmVBY3Rpb246IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuU2F2ZUNoYW5nZXNcIixcblx0XHRcdFx0TmV3QWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc1F1b3RhdGlvblR5cGVcIlxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5faGFzTmV3QWN0aW9uRm9yU3RpY2t5KG1vY2tDb250ZXh0LCBtb2NrVmlldywgc0N1c3RvbUFjdGlvbik7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdH0pO1xuXHRcdGl0KFwiX2hhc05ld0FjdGlvbkZvclN0aWNreTogQWRkaXRpb25hbE5ld0FjdGlvbiBhdmFpbGFibGVcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrQ29udGV4dC5nZXRQYXRoLm1vY2tSZXR1cm5WYWx1ZShcIi9TYWxlc1F1b3RhdGlvbk1hbmFnZSgnJylcIik7XG5cdFx0XHRzQ3VzdG9tQWN0aW9uID0gXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNRdW90YXRpb25UeXBlXCI7XG5cdFx0XHRtb2NrTWV0YU1vZGVsLmdldE9iamVjdC5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0XHRBZGRpdGlvbmFsTmV3QWN0aW9uczogW1xuXHRcdFx0XHRcdFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuQ3JlYXRlV2l0aFJlZkZyb21TbHNJbnF1aXJ5XCIsXG5cdFx0XHRcdFx0XCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoU2FsZXNRdW90YXRpb25UeXBlXCJcblx0XHRcdFx0XSxcblx0XHRcdFx0RGlzY2FyZEFjdGlvbjogXCJEaXNjYXJkQ2hhbmdlc1wiLFxuXHRcdFx0XHRFZGl0QWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlByZXBhcmVGb3JFZGl0XCIsXG5cdFx0XHRcdFNhdmVBY3Rpb246IFwiY29tLnNhcC5nYXRld2F5LnNydmQudWlfc2FsZXNxdW90YXRpb25tYW5hZ2UudjAwMDEuU2F2ZUNoYW5nZXNcIlxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5faGFzTmV3QWN0aW9uRm9yU3RpY2t5KG1vY2tDb250ZXh0LCBtb2NrVmlldywgc0N1c3RvbUFjdGlvbik7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdFx0ZXhwZWN0KHNweUdldE1vZGVsKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0TWV0YU1vZGVsKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5Q29udGV4dEdldFBhdGgpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHR9KTtcblx0XHRpdChcIl9oYXNOZXdBY3Rpb25Gb3JTdGlja3k6IEFkZGl0aW9uYWxOZXdBY3Rpb24gYXZhaWxhYmxlIGJ1dCBub3QgdGhlIHJlbGV2YW50IG9uZVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG1vY2tDb250ZXh0LmdldFBhdGgubW9ja1JldHVyblZhbHVlKFwiL1NhbGVzUXVvdGF0aW9uTWFuYWdlKCcnKVwiKTtcblx0XHRcdHNDdXN0b21BY3Rpb24gPSBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc1F1b3RhdGlvblR5cGVcIjtcblx0XHRcdG1vY2tNZXRhTW9kZWwuZ2V0T2JqZWN0Lm1vY2tSZXR1cm5WYWx1ZSh7XG5cdFx0XHRcdEFkZGl0aW9uYWxOZXdBY3Rpb25zOiBbXG5cdFx0XHRcdFx0XCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5DcmVhdGVXaXRoUmVmRnJvbVNsc0lucXVpcnlcIixcblx0XHRcdFx0XHRcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLkNyZWF0ZVdpdGhTYWxlc09yZGVyVHlwZVwiXG5cdFx0XHRcdF0sXG5cdFx0XHRcdERpc2NhcmRBY3Rpb246IFwiRGlzY2FyZENoYW5nZXNcIixcblx0XHRcdFx0RWRpdEFjdGlvbjogXCJjb20uc2FwLmdhdGV3YXkuc3J2ZC51aV9zYWxlc3F1b3RhdGlvbm1hbmFnZS52MDAwMS5QcmVwYXJlRm9yRWRpdFwiLFxuXHRcdFx0XHRTYXZlQWN0aW9uOiBcImNvbS5zYXAuZ2F0ZXdheS5zcnZkLnVpX3NhbGVzcXVvdGF0aW9ubWFuYWdlLnYwMDAxLlNhdmVDaGFuZ2VzXCJcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuX2hhc05ld0FjdGlvbkZvclN0aWNreShtb2NrQ29udGV4dCwgbW9ja1ZpZXcsIHNDdXN0b21BY3Rpb24pO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbChmYWxzZSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0TW9kZWwpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlHZXRNZXRhTW9kZWwpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlDb250ZXh0R2V0UGF0aCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInRlc3RpbmcgaGFuZGxlU3RpY2t5T24oKVwiLCAoKSA9PiB7XG5cdFx0bGV0IG9JbnRlcm5hbEVkaXRGbG93OiBhbnksXG5cdFx0XHRzcHlHZXRWaWV3OiBhbnksXG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQ6IGFueSxcblx0XHRcdHNweUdldFJvdXRlclByb3h5OiBhbnksXG5cdFx0XHRzcHlIYXNOYXZpZ2F0aW9uR3VhcmQ6IGFueSxcblx0XHRcdHNweVNldE5hdmlnYXRpb25HdWFyZDogYW55LFxuXHRcdFx0c3B5R2V0SGFzaDogYW55LFxuXHRcdFx0c3B5R2V0SW50ZXJuYWxNb2RlbDogYW55LFxuXHRcdFx0c3B5U2V0QmFja05hdmlnYXRpb246IGFueSxcblx0XHRcdHNweVJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyOiBhbnksXG5cdFx0XHRzcHlHZXRNb2RlbDogYW55LFxuXHRcdFx0c3B5QXR0YWNoU2Vzc2lvblRpbWVvdXQ6IGFueSxcblx0XHRcdHNweUF0dGFjaFJvdXRlTWF0Y2hlZDogYW55O1xuXHRcdGNvbnN0IG1vY2tHZXRTaGVsbFNlcnZpY2VzID0ge1xuXHRcdFx0c2V0QmFja05hdmlnYXRpb246IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKSxcblx0XHRcdHJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRSb3V0ZXJQcm94eSA9IHtcblx0XHRcdGhhc05hdmlnYXRpb25HdWFyZDogamVzdC5mbigpLFxuXHRcdFx0c2V0TmF2aWdhdGlvbkd1YXJkOiBqZXN0LmZuKCksXG5cdFx0XHRnZXRIYXNoOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKFwiXCIpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrR2V0Um91dGluZ1NlcnZpY2UgPSB7XG5cdFx0XHRhdHRhY2hSb3V0ZU1hdGNoZWQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldEFwcENvbXBvbmVudCA9IHtcblx0XHRcdGdldFJvdXRlclByb3h5OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2tHZXRSb3V0ZXJQcm94eSksXG5cdFx0XHRnZXRTaGVsbFNlcnZpY2VzOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2tHZXRTaGVsbFNlcnZpY2VzKSxcblx0XHRcdGdldFJvdXRpbmdTZXJ2aWNlOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2tHZXRSb3V0aW5nU2VydmljZSlcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tDb250ZXh0ID0ge307XG5cdFx0Y29uc3QgbW9ja0dldE1vZGVsID0ge1xuXHRcdFx0YXR0YWNoU2Vzc2lvblRpbWVvdXQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldFZpZXcgPSB7XG5cdFx0XHRnZXRNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0TW9kZWwpXG5cdFx0fTtcblx0XHRiZWZvcmVBbGwoKCkgPT4ge1xuXHRcdFx0b0ludGVybmFsRWRpdEZsb3cgPSBuZXcgSW50ZXJuYWxFZGl0RmxvdygpO1xuXHRcdFx0c3B5R2V0VmlldyA9IGplc3Quc3B5T24ob0ludGVybmFsRWRpdEZsb3csIFwiZ2V0Vmlld1wiKTtcblx0XHRcdHNweUdldFZpZXcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tHZXRWaWV3KTtcblx0XHRcdHNweUdldE1vZGVsID0gamVzdC5zcHlPbihtb2NrR2V0VmlldywgXCJnZXRNb2RlbFwiKTtcblx0XHRcdHNweUF0dGFjaFNlc3Npb25UaW1lb3V0ID0gamVzdC5zcHlPbihtb2NrR2V0TW9kZWwsIFwiYXR0YWNoU2Vzc2lvblRpbWVvdXRcIik7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQgPSBqZXN0LnNweU9uKENvbW1vblV0aWxzLCBcImdldEFwcENvbXBvbmVudFwiKTtcblx0XHRcdHNweUdldFJvdXRlclByb3h5ID0gamVzdC5zcHlPbihtb2NrR2V0QXBwQ29tcG9uZW50LCBcImdldFJvdXRlclByb3h5XCIpO1xuXHRcdFx0c3B5SGFzTmF2aWdhdGlvbkd1YXJkID0gamVzdC5zcHlPbihtb2NrR2V0Um91dGVyUHJveHksIFwiaGFzTmF2aWdhdGlvbkd1YXJkXCIpO1xuXHRcdFx0c3B5U2V0TmF2aWdhdGlvbkd1YXJkID0gamVzdC5zcHlPbihtb2NrR2V0Um91dGVyUHJveHksIFwic2V0TmF2aWdhdGlvbkd1YXJkXCIpO1xuXHRcdFx0c3B5R2V0SGFzaCA9IGplc3Quc3B5T24obW9ja0dldFJvdXRlclByb3h5LCBcImdldEhhc2hcIik7XG5cdFx0XHRzcHlHZXRJbnRlcm5hbE1vZGVsID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdywgXCJnZXRJbnRlcm5hbE1vZGVsXCIpO1xuXHRcdFx0c3B5R2V0SW50ZXJuYWxNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHR9KTtcblx0XHRcdHNweVNldEJhY2tOYXZpZ2F0aW9uID0gamVzdC5zcHlPbihtb2NrR2V0U2hlbGxTZXJ2aWNlcywgXCJzZXRCYWNrTmF2aWdhdGlvblwiKTtcblx0XHRcdHNweVJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyID0gamVzdC5zcHlPbihtb2NrR2V0U2hlbGxTZXJ2aWNlcywgXCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlclwiKTtcblx0XHRcdHNweUF0dGFjaFJvdXRlTWF0Y2hlZCA9IGplc3Quc3B5T24obW9ja0dldFJvdXRpbmdTZXJ2aWNlLCBcImF0dGFjaFJvdXRlTWF0Y2hlZFwiKTtcblx0XHR9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5jbGVhckFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJoYW5kbGVTdGlja3lPbjogaW5wdXQgcGFyYW1hdGVyIG9Db250ZXh0IGlzIHVuZGVmaW5lZFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBvSW50ZXJuYWxFZGl0Rmxvdy5oYW5kbGVTdGlja3lPbih1bmRlZmluZWQpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEFwcENvbXBvbmVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdH0pO1xuXHRcdGl0KFwiaGFuZGxlU3RpY2t5T246IGlucHV0IHBhcmFtYXRlciBvQ29udGV4dCBpcyBlbXB0eVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93LmhhbmRsZVN0aWNreU9uKG1vY2tDb250ZXh0KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodW5kZWZpbmVkKTtcblx0XHRcdGV4cGVjdChzcHlHZXRBcHBDb21wb25lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImhhbmRsZVN0aWNreU9uOiBjaGVjayB2YWxpZCBpbnB1dFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldEFwcENvbXBvbmVudDtcblx0XHRcdH0pO1xuXHRcdFx0c3B5SGFzTmF2aWdhdGlvbkd1YXJkLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T24obW9ja0NvbnRleHQpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh0cnVlKTtcblx0XHRcdGV4cGVjdChzcHlHZXRBcHBDb21wb25lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlHZXRSb3V0ZXJQcm94eSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuXHRcdFx0ZXhwZWN0KHNweUhhc05hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEhhc2gpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlTZXROYXZpZ2F0aW9uR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlTZXRCYWNrTmF2aWdhdGlvbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweVJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5QXR0YWNoU2Vzc2lvblRpbWVvdXQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlBdHRhY2hSb3V0ZU1hdGNoZWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImhhbmRsZVN0aWNreU9uOiBuYXZpZ2F0aW9uIGd1YXJkIGFscmVhZHkgc2V0XCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0c3B5R2V0QXBwQ29tcG9uZW50Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtb2NrR2V0QXBwQ29tcG9uZW50O1xuXHRcdFx0fSk7XG5cdFx0XHRzcHlIYXNOYXZpZ2F0aW9uR3VhcmQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93LmhhbmRsZVN0aWNreU9uKG1vY2tDb250ZXh0KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodHJ1ZSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0QXBwQ29tcG9uZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlIYXNOYXZpZ2F0aW9uR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlHZXRIYXNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHRleHBlY3Qoc3B5U2V0TmF2aWdhdGlvbkd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHRleHBlY3Qoc3B5U2V0QmFja05hdmlnYXRpb24pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlSZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweUF0dGFjaFNlc3Npb25UaW1lb3V0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHRleHBlY3Qoc3B5QXR0YWNoUm91dGVNYXRjaGVkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdGRlc2NyaWJlKFwidGVzdGluZyBoYW5kbGVTdGlja3lPZmYoKVwiLCAoKSA9PiB7XG5cdFx0bGV0IG9JbnRlcm5hbEVkaXRGbG93OiBhbnksXG5cdFx0XHRvVHJhbnNhY3Rpb25IZWxwZXI6IGFueSxcblx0XHRcdHNweUdldFZpZXc6IGFueSxcblx0XHRcdHNweVNldEVkaXRNb2RlOiBhbnksXG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQ6IGFueSxcblx0XHRcdHNweUdldFRyYW5zYWN0aW9uSGVscGVyOiBhbnksXG5cdFx0XHRzcHlEaXNjYXJkTmF2aWdhdGlvbkd1YXJkOiBhbnksXG5cdFx0XHRzcHlEZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyOiBhbnk7XG5cdFx0Y29uc3QgbW9ja0dldEFwcENvbXBvbmVudCA9IHtcblx0XHRcdGdldFJvdXRlclByb3h5OiBqZXN0LmZuKCksXG5cdFx0XHRnZXRTaGVsbFNlcnZpY2VzOiBqZXN0LmZuKCksXG5cdFx0XHRnZXRSb3V0aW5nU2VydmljZTogamVzdC5mbigpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrRGlzY2FyZE5hdmlnYXRpb25HdWFyZCA9IHtcblx0XHRcdGRpc2NhcmROYXZpZ2F0aW9uR3VhcmQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldFNoZWxsU2VydmljZXMgPSB7XG5cdFx0XHRkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZCksXG5cdFx0XHRzZXRCYWNrTmF2aWdhdGlvbjogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrR2V0Um91dGluZ1NlcnZpY2UgPSB7XG5cdFx0XHRkZXRhY2hSb3V0ZU1hdGNoZWQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0dldE1vZGVsID0ge1xuXHRcdFx0Z2V0TW9kZWw6IGplc3QuZm4oKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0RldGFjaFNlc3Npb25UaW1lb3V0ID0ge1xuXHRcdFx0ZGV0YWNoU2Vzc2lvblRpbWVvdXQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKVxuXHRcdH07XG5cdFx0YmVmb3JlQWxsKCgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93ID0gbmV3IEludGVybmFsRWRpdEZsb3coKTtcblx0XHRcdG9UcmFuc2FjdGlvbkhlbHBlciA9IG5ldyBUcmFuc2FjdGlvbkhlbHBlcihudWxsIGFzIGFueSwgbnVsbCk7XG5cdFx0XHRtb2NrR2V0QXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5Lm1vY2tSZXR1cm5WYWx1ZShtb2NrRGlzY2FyZE5hdmlnYXRpb25HdWFyZCk7XG5cdFx0XHRtb2NrR2V0QXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMubW9ja1JldHVyblZhbHVlKG1vY2tHZXRTaGVsbFNlcnZpY2VzKTtcblx0XHRcdG1vY2tHZXRBcHBDb21wb25lbnQuZ2V0Um91dGluZ1NlcnZpY2UubW9ja1JldHVyblZhbHVlKG1vY2tHZXRSb3V0aW5nU2VydmljZSk7XG5cdFx0XHRtb2NrR2V0TW9kZWwuZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vY2tEZXRhY2hTZXNzaW9uVGltZW91dCk7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQgPSBqZXN0LnNweU9uKENvbW1vblV0aWxzLCBcImdldEFwcENvbXBvbmVudFwiKTtcblx0XHRcdHNweURpc2NhcmROYXZpZ2F0aW9uR3VhcmQgPSBqZXN0LnNweU9uKG1vY2tEaXNjYXJkTmF2aWdhdGlvbkd1YXJkLCBcImRpc2NhcmROYXZpZ2F0aW9uR3VhcmRcIik7XG5cdFx0XHRzcHlEZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyID0gamVzdC5zcHlPbihtb2NrR2V0U2hlbGxTZXJ2aWNlcywgXCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyXCIpO1xuXHRcdFx0c3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93LCBcImdldFRyYW5zYWN0aW9uSGVscGVyXCIpO1xuXHRcdFx0c3B5R2V0VHJhbnNhY3Rpb25IZWxwZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9UcmFuc2FjdGlvbkhlbHBlcjtcblx0XHRcdH0pO1xuXHRcdFx0c3B5U2V0RWRpdE1vZGUgPSBqZXN0LnNweU9uKG9JbnRlcm5hbEVkaXRGbG93LCBcInNldEVkaXRNb2RlXCIpO1xuXHRcdFx0c3B5U2V0RWRpdE1vZGUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHVuZGVmaW5lZCk7XG5cdFx0XHRzcHlHZXRWaWV3ID0gamVzdC5zcHlPbihvSW50ZXJuYWxFZGl0RmxvdywgXCJnZXRWaWV3XCIpO1xuXHRcdFx0c3B5R2V0Vmlldy5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldE1vZGVsO1xuXHRcdFx0fSk7XG5cdFx0XHRvSW50ZXJuYWxFZGl0Rmxvdy5mbkhhbmRsZVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IHVuZGVmaW5lZDtcblx0XHR9KTtcblx0XHRiZWZvcmVFYWNoKCgpID0+IHt9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5jbGVhckFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJoYW5kbGVTdGlja3lPZmY6IGFwcENvbXBvbmVudCBpcyB1bmRlZmluZWRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0Rmxvdy5mbkRpcnR5U3RhdGVQcm92aWRlciA9IHRydWU7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3Qoc3B5RGlzY2FyZE5hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdH0pO1xuXHRcdGl0KFwiaGFuZGxlU3RpY2t5T2ZmOiB2YWxpZCBmdW5jdGlvbiBjYWxsLCBhbGwgc2V0IGNvcnJlY3RseVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gdHJ1ZTtcblx0XHRcdHNweUdldEFwcENvbXBvbmVudC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbW9ja0dldEFwcENvbXBvbmVudDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgb0ludGVybmFsRWRpdEZsb3cuaGFuZGxlU3RpY2t5T2ZmKCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdFx0ZXhwZWN0KHNweVNldEVkaXRNb2RlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0QXBwQ29tcG9uZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5RGlzY2FyZE5hdmlnYXRpb25HdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweURlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImhhbmRsZVN0aWNreU9mZjogZm5EaXJ0eVN0YXRlUHJvdmlkZXIgbm90IHNldFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93LmZuRGlydHlTdGF0ZVByb3ZpZGVyID0gZmFsc2U7XG5cdFx0XHRzcHlHZXRBcHBDb21wb25lbnQubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1vY2tHZXRBcHBDb21wb25lbnQ7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IG9JbnRlcm5hbEVkaXRGbG93LmhhbmRsZVN0aWNreU9mZigpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh0cnVlKTtcblx0XHRcdGV4cGVjdChzcHlTZXRFZGl0TW9kZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEFwcENvbXBvbmVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0ZXhwZWN0KHNweURpc2NhcmROYXZpZ2F0aW9uR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlEZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdGRlc2NyaWJlKFwidGVzdGluZyBmbkRpcnR5U3RhdGVQcm92aWRlcigpXCIsICgpID0+IHtcblx0XHRsZXQgb0ludGVybmFsRWRpdEZsb3c6IGFueSxcblx0XHRcdG1vY2tIYXNoVHJhY2tlcjogc3RyaW5nLFxuXHRcdFx0c3B5R2V0Um91dGVyUHJveHk6IGFueSxcblx0XHRcdHNweUlzTmF2aWdhdGlvbkZpbmFsaXplZDogYW55LFxuXHRcdFx0c3B5Q2hlY2tIYXNoV2l0aEd1YXJkOiBhbnksXG5cdFx0XHRzcHlJc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyOiBhbnksXG5cdFx0XHRzcHlTZXREaXJ0eUZsYWc6IGFueTtcblxuXHRcdGNvbnN0IG1vY2tvTmF2aWdhdGlvbkNvbnRleHQgPSB7XG5cdFx0XHRpbm5lckFwcFJvdXRlOiBcIlwiXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrR2V0U2hlbGxTZXJ2aWNlcyA9IHtcblx0XHRcdHNldERpcnR5RmxhZzogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrR2V0Um91dGVyUHJveHkgPSB7XG5cdFx0XHRpc05hdmlnYXRpb25GaW5hbGl6ZWQ6IGplc3QuZm4oKSxcblx0XHRcdGNoZWNrSGFzaFdpdGhHdWFyZDogamVzdC5mbigpLFxuXHRcdFx0aXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlcjogamVzdC5mbigpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrQXBwQ29tcG9uZW50ID0ge1xuXHRcdFx0Z2V0Um91dGVyUHJveHk6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0dldFJvdXRlclByb3h5KSxcblx0XHRcdGdldFNoZWxsU2VydmljZXM6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0dldFNoZWxsU2VydmljZXMpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrSW50ZXJuYWxNb2RlbCA9IHtcblx0XHRcdGdldFByb3BlcnR5OiBqZXN0LmZuKClcblx0XHR9O1xuXG5cdFx0YmVmb3JlQWxsKCgpID0+IHtcblx0XHRcdG9JbnRlcm5hbEVkaXRGbG93ID0gbmV3IEludGVybmFsRWRpdEZsb3coKTtcblx0XHRcdHNweUdldFJvdXRlclByb3h5ID0gamVzdC5zcHlPbihtb2NrQXBwQ29tcG9uZW50LCBcImdldFJvdXRlclByb3h5XCIpO1xuXHRcdFx0c3B5SXNOYXZpZ2F0aW9uRmluYWxpemVkID0gamVzdC5zcHlPbihtb2NrR2V0Um91dGVyUHJveHksIFwiaXNOYXZpZ2F0aW9uRmluYWxpemVkXCIpO1xuXHRcdFx0c3B5Q2hlY2tIYXNoV2l0aEd1YXJkID0gamVzdC5zcHlPbihtb2NrR2V0Um91dGVyUHJveHksIFwiY2hlY2tIYXNoV2l0aEd1YXJkXCIpO1xuXHRcdFx0c3B5SXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlciA9IGplc3Quc3B5T24obW9ja0dldFJvdXRlclByb3h5LCBcImlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXJcIik7XG5cdFx0XHRzcHlTZXREaXJ0eUZsYWcgPSBqZXN0LnNweU9uKG1vY2tHZXRTaGVsbFNlcnZpY2VzLCBcInNldERpcnR5RmxhZ1wiKTtcblx0XHR9KTtcblx0XHRhZnRlckVhY2goKCkgPT4ge1xuXHRcdFx0amVzdC5jbGVhckFsbE1vY2tzKCk7XG5cdFx0fSk7XG5cdFx0aXQoXCJmbkRpcnR5U3RhdGVQcm92aWRlcjogaW5wdXQgcGFyYW1hdGVyIG9OYXZpZ2F0aW9uQ29udGV4dCBpcyB1bmRlZmluZWRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrSGFzaFRyYWNrZXIgPSBcImFiY1wiO1xuXHRcdFx0bW9ja0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZCk7XG5cdFx0XHRjb25zdCBmbkRpcnR5U3RhdGVQcm92aWRlciA9IG9JbnRlcm5hbEVkaXRGbG93Ll9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihcblx0XHRcdFx0bW9ja0FwcENvbXBvbmVudCxcblx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwsXG5cdFx0XHRcdG1vY2tIYXNoVHJhY2tlclxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IGZuRGlydHlTdGF0ZVByb3ZpZGVyKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHR9KTtcblx0XHRpdChcImZuRGlydHlTdGF0ZVByb3ZpZGVyOiBtaXNzaW5nIHByb3BlcnR5IG9mIGludGVybmFsTW9kZWxcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrSGFzaFRyYWNrZXIgPSBcImFiY1wiO1xuXHRcdFx0bW9ja0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZCk7XG5cdFx0XHRjb25zdCBmbkRpcnR5U3RhdGVQcm92aWRlciA9IG9JbnRlcm5hbEVkaXRGbG93Ll9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihcblx0XHRcdFx0bW9ja0FwcENvbXBvbmVudCxcblx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwsXG5cdFx0XHRcdG1vY2tIYXNoVHJhY2tlclxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IGZuRGlydHlTdGF0ZVByb3ZpZGVyKG1vY2tvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuXHRcdFx0ZXhwZWN0KHNweUdldFJvdXRlclByb3h5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0fSk7XG5cdFx0aXQoXCJmbkRpcnR5U3RhdGVQcm92aWRlcjogaXNOYXZpZ2F0aW9uRmluYWxpemVkKCkgcmV0dXJucyBmYWxzZVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG1vY2tIYXNoVHJhY2tlciA9IFwiYWJjXCI7XG5cdFx0XHRtb2NrSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eS5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRtb2NrR2V0Um91dGVyUHJveHkuaXNOYXZpZ2F0aW9uRmluYWxpemVkLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cdFx0XHRjb25zdCBmbkRpcnR5U3RhdGVQcm92aWRlciA9IG9JbnRlcm5hbEVkaXRGbG93Ll9yZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcihcblx0XHRcdFx0bW9ja0FwcENvbXBvbmVudCxcblx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwsXG5cdFx0XHRcdG1vY2tIYXNoVHJhY2tlclxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IGZuRGlydHlTdGF0ZVByb3ZpZGVyKG1vY2tvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbChmYWxzZSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlJc05hdmlnYXRpb25GaW5hbGl6ZWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlDaGVja0hhc2hXaXRoR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlTZXREaXJ0eUZsYWcpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHR9KTtcblx0XHRpdChcImZuRGlydHlTdGF0ZVByb3ZpZGVyOiBpc05hdmlnYXRpb25GaW5hbGl6ZWQoKSByZXR1cm5zIHRydWUsIEhhc2hUcmFja2VyPVRhcmdldEhhc2hcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrSGFzaFRyYWNrZXIgPSBcImFiY1wiO1xuXHRcdFx0bW9ja29OYXZpZ2F0aW9uQ29udGV4dC5pbm5lckFwcFJvdXRlID0gXCJhYmNcIjtcblx0XHRcdG1vY2tJbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5Lm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5pc05hdmlnYXRpb25GaW5hbGl6ZWQubW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0Y29uc3QgZm5EaXJ0eVN0YXRlUHJvdmlkZXIgPSBvSW50ZXJuYWxFZGl0Rmxvdy5fcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoXG5cdFx0XHRcdG1vY2tBcHBDb21wb25lbnQsXG5cdFx0XHRcdG1vY2tJbnRlcm5hbE1vZGVsLFxuXHRcdFx0XHRtb2NrSGFzaFRyYWNrZXJcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBiUmVzcG9uc2UgPSBhd2FpdCBmbkRpcnR5U3RhdGVQcm92aWRlcihtb2Nrb05hdmlnYXRpb25Db250ZXh0KTtcblx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwodHJ1ZSk7XG5cdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlJc05hdmlnYXRpb25GaW5hbGl6ZWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlDaGVja0hhc2hXaXRoR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlTZXREaXJ0eUZsYWcpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHR9KTtcblx0XHRpdChcblx0XHRcdFwiZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpIHJldHVybnMgdHJ1ZSwgSGFzaFRyYWNrZXI8PlRhcmdldEhhc2gsIGNoZWNrSGFzaFdpdGhHdWFyZCgpPXRydWVcIixcblx0XHRcdG9UZXN0UmVmZXJlbmNlcyxcblx0XHRcdGFzeW5jICgpID0+IHtcblx0XHRcdFx0bW9ja0hhc2hUcmFja2VyID0gXCJhYmNcIjtcblx0XHRcdFx0bW9ja29OYXZpZ2F0aW9uQ29udGV4dC5pbm5lckFwcFJvdXRlID0gXCJ4eXpcIjtcblx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkubW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0XHRtb2NrR2V0Um91dGVyUHJveHkuaXNOYXZpZ2F0aW9uRmluYWxpemVkLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdFx0bW9ja0dldFJvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZC5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IGZuRGlydHlTdGF0ZVByb3ZpZGVyID0gb0ludGVybmFsRWRpdEZsb3cuX3JlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKFxuXHRcdFx0XHRcdG1vY2tBcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwsXG5cdFx0XHRcdFx0bW9ja0hhc2hUcmFja2VyXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IGZuRGlydHlTdGF0ZVByb3ZpZGVyKG1vY2tvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKGZhbHNlKTtcblx0XHRcdFx0ZXhwZWN0KHNweUdldFJvdXRlclByb3h5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRcdGV4cGVjdChzcHlJc05hdmlnYXRpb25GaW5hbGl6ZWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdFx0ZXhwZWN0KHNweUNoZWNrSGFzaFdpdGhHdWFyZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0XHRleHBlY3Qoc3B5SXNHdWFyZENyb3NzQWxsb3dlZEJ5VXNlcikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0XHRleHBlY3Qoc3B5U2V0RGlydHlGbGFnKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0XHR9XG5cdFx0KTtcblx0XHRpdChcblx0XHRcdFwiZm5EaXJ0eVN0YXRlUHJvdmlkZXI6IGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpIHJldHVybnMgdHJ1ZSwgSGFzaFRyYWNrZXI8PlRhcmdldEhhc2gsIGNoZWNrSGFzaFdpdGhHdWFyZCgpPWZhbHNlLCBpc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKCk9dHJ1ZVwiLFxuXHRcdFx0b1Rlc3RSZWZlcmVuY2VzLFxuXHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRtb2NrSGFzaFRyYWNrZXIgPSBcImFiY1wiO1xuXHRcdFx0XHRtb2Nrb05hdmlnYXRpb25Db250ZXh0LmlubmVyQXBwUm91dGUgPSBcInh5elwiO1xuXHRcdFx0XHRtb2NrSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eS5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5pc05hdmlnYXRpb25GaW5hbGl6ZWQubW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0XHRtb2NrR2V0Um91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cdFx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5pc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyLm1vY2tSZXR1cm5WYWx1ZSh0cnVlKTtcblx0XHRcdFx0Y29uc3QgZm5EaXJ0eVN0YXRlUHJvdmlkZXIgPSBvSW50ZXJuYWxFZGl0Rmxvdy5fcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoXG5cdFx0XHRcdFx0bW9ja0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRtb2NrSW50ZXJuYWxNb2RlbCxcblx0XHRcdFx0XHRtb2NrSGFzaFRyYWNrZXJcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgZm5EaXJ0eVN0YXRlUHJvdmlkZXIobW9ja29OYXZpZ2F0aW9uQ29udGV4dCk7XG5cdFx0XHRcdGV4cGVjdChiUmVzcG9uc2UpLnRvRXF1YWwoZmFsc2UpO1xuXHRcdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdFx0ZXhwZWN0KHNweUlzTmF2aWdhdGlvbkZpbmFsaXplZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0XHRleHBlY3Qoc3B5Q2hlY2tIYXNoV2l0aEd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRcdGV4cGVjdChzcHlJc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRcdGV4cGVjdChzcHlTZXREaXJ0eUZsYWcpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdH1cblx0XHQpO1xuXHRcdGl0KFxuXHRcdFx0XCJmbkRpcnR5U3RhdGVQcm92aWRlcjogaXNOYXZpZ2F0aW9uRmluYWxpemVkKCkgcmV0dXJucyB0cnVlLCBIYXNoVHJhY2tlcjw+VGFyZ2V0SGFzaCwgY2hlY2tIYXNoV2l0aEd1YXJkKCk9ZmFsc2UsIGlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIoKT1mYWxzZVwiLFxuXHRcdFx0b1Rlc3RSZWZlcmVuY2VzLFxuXHRcdFx0YXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRtb2NrSGFzaFRyYWNrZXIgPSBcImFiY1wiO1xuXHRcdFx0XHRtb2Nrb05hdmlnYXRpb25Db250ZXh0LmlubmVyQXBwUm91dGUgPSBcInh5elwiO1xuXHRcdFx0XHRtb2NrSW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eS5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5pc05hdmlnYXRpb25GaW5hbGl6ZWQubW9ja1JldHVyblZhbHVlKHRydWUpO1xuXHRcdFx0XHRtb2NrR2V0Um91dGVyUHJveHkuY2hlY2tIYXNoV2l0aEd1YXJkLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cdFx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5pc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cdFx0XHRcdGNvbnN0IGZuRGlydHlTdGF0ZVByb3ZpZGVyID0gb0ludGVybmFsRWRpdEZsb3cuX3JlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKFxuXHRcdFx0XHRcdG1vY2tBcHBDb21wb25lbnQsXG5cdFx0XHRcdFx0bW9ja0ludGVybmFsTW9kZWwsXG5cdFx0XHRcdFx0bW9ja0hhc2hUcmFja2VyXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGJSZXNwb25zZSA9IGF3YWl0IGZuRGlydHlTdGF0ZVByb3ZpZGVyKG1vY2tvTmF2aWdhdGlvbkNvbnRleHQpO1xuXHRcdFx0XHRleHBlY3QoYlJlc3BvbnNlKS50b0VxdWFsKHRydWUpO1xuXHRcdFx0XHRleHBlY3Qoc3B5R2V0Um91dGVyUHJveHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdFx0ZXhwZWN0KHNweUlzTmF2aWdhdGlvbkZpbmFsaXplZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdFx0XHRleHBlY3Qoc3B5Q2hlY2tIYXNoV2l0aEd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRcdGV4cGVjdChzcHlJc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRcdGV4cGVjdChzcHlTZXREaXJ0eUZsYWcpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdH1cblx0XHQpO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInRlc3RpbmcgZm5IYW5kbGVTZXNzaW9uVGltZW91dCgpXCIsICgpID0+IHtcblx0XHRsZXQgb0ludGVybmFsRWRpdEZsb3c6IGFueSwgc3B5UmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzOiBhbnksIHNweUFkZERlcGVuZGVudDogYW55O1xuXG5cdFx0Y29uc3QgbW9ja0dldFJvdXRlclByb3h5ID0ge1xuXHRcdFx0Z2V0SGFzaDogamVzdC5mbigpLFxuXHRcdFx0Y2hlY2tIYXNoV2l0aEd1YXJkOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tBcHBDb21wb25lbnQgPSB7XG5cdFx0XHRnZXRSb3V0ZXJQcm94eTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0Um91dGVyUHJveHkpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG1vY2tHZXRNZXNzYWdlSGFuZGxlciA9IHtcblx0XHRcdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSlcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRSb3V0aW5nTGlzdGVuZXIgPSB7XG5cdFx0XHRuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSlcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tHZXRWaWV3ID0ge1xuXHRcdFx0YWRkRGVwZW5kZW50OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKGZhbHNlKVxuXHRcdH07XG5cdFx0Y29uc3QgbW9ja0NvbnRleHQgPSB7XG5cdFx0XHRnZXRNZXNzYWdlSGFuZGxlcjogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0TWVzc2FnZUhhbmRsZXIpLFxuXHRcdFx0aGFuZGxlU3RpY2t5T2ZmOiBqZXN0LmZuKCksXG5cdFx0XHRnZXRSb3V0aW5nTGlzdGVuZXI6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9ja0dldFJvdXRpbmdMaXN0ZW5lciksXG5cdFx0XHRnZXRWaWV3OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2tHZXRWaWV3KVxuXHRcdH07XG5cblx0XHRiZWZvcmVBbGwoKCkgPT4ge1xuXHRcdFx0b0ludGVybmFsRWRpdEZsb3cgPSBuZXcgSW50ZXJuYWxFZGl0RmxvdygpO1xuXHRcdFx0c3B5UmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzID0gamVzdC5zcHlPbihtb2NrR2V0TWVzc2FnZUhhbmRsZXIsIFwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzXCIpO1xuXHRcdFx0c3B5QWRkRGVwZW5kZW50ID0gamVzdC5zcHlPbihtb2NrR2V0VmlldywgXCJhZGREZXBlbmRlbnRcIik7XG5cdFx0fSk7XG5cdFx0YWZ0ZXJFYWNoKCgpID0+IHtcblx0XHRcdGplc3QuY2xlYXJBbGxNb2NrcygpO1xuXHRcdH0pO1xuXHRcdGl0KFwiZm5IYW5kbGVTZXNzaW9uVGltZW91dDogY2FsbGluZyB3aXRoIHZhbGlkIGlucHV0XCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm5IYW5kbGVTZXNzaW9uVGltZW91dCA9IG9JbnRlcm5hbEVkaXRGbG93Ll9hdHRhY2hTZXNzaW9uVGltZW91dChtb2NrQ29udGV4dCwgdW5kZWZpbmVkKTtcblx0XHRcdGF3YWl0IGZuSGFuZGxlU2Vzc2lvblRpbWVvdXQoKTtcblx0XHRcdGV4cGVjdChzcHlSZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlBZGREZXBlbmRlbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHR9KTtcblx0XHRpdChcImZuSGFuZGxlU2Vzc2lvblRpbWVvdXQ6IGNvbnRleHQgaXMgaW52YWxpZFwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IGZuSGFuZGxlU2Vzc2lvblRpbWVvdXQgPSBvSW50ZXJuYWxFZGl0Rmxvdy5fYXR0YWNoU2Vzc2lvblRpbWVvdXQodW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuXHRcdFx0Y29uc3QgYlJlc3BvbnNlID0gYXdhaXQgZm5IYW5kbGVTZXNzaW9uVGltZW91dCgpO1xuXHRcdFx0ZXhwZWN0KGJSZXNwb25zZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuXHRcdFx0ZXhwZWN0KHNweVJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdFx0ZXhwZWN0KHNweUFkZERlcGVuZGVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdH0pO1xuXHR9KTtcblxuXHRkZXNjcmliZShcInRlc3RpbmcgZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uKClcIiwgKCkgPT4ge1xuXHRcdGxldCBvSW50ZXJuYWxFZGl0RmxvdzogYW55LCBzcHlHZXRIYXNoOiBhbnksIHNweUNoZWNrSGFzaFdpdGhHdWFyZDogYW55LCBzcHlEaXNjYXJkU3RpY2t5U2Vzc2lvbjogYW55O1xuXG5cdFx0Y29uc3QgbW9ja0dldFJvdXRlclByb3h5ID0ge1xuXHRcdFx0Z2V0SGFzaDogamVzdC5mbigpLFxuXHRcdFx0Y2hlY2tIYXNoV2l0aEd1YXJkOiBqZXN0LmZuKClcblx0XHR9O1xuXHRcdGNvbnN0IG1vY2tBcHBDb21wb25lbnQgPSB7XG5cdFx0XHRnZXRSb3V0ZXJQcm94eTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrR2V0Um91dGVyUHJveHkpXG5cdFx0fTtcblx0XHRjb25zdCBtb2NrRm5Db250ZXh0ID0ge1xuXHRcdFx0ZGlzY2FyZFN0aWNreVNlc3Npb246IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpXG5cdFx0fTtcblxuXHRcdGJlZm9yZUFsbCgoKSA9PiB7XG5cdFx0XHRvSW50ZXJuYWxFZGl0RmxvdyA9IG5ldyBJbnRlcm5hbEVkaXRGbG93KCk7XG5cdFx0XHRzcHlHZXRIYXNoID0gamVzdC5zcHlPbihtb2NrR2V0Um91dGVyUHJveHksIFwiZ2V0SGFzaFwiKTtcblx0XHRcdHNweUNoZWNrSGFzaFdpdGhHdWFyZCA9IGplc3Quc3B5T24obW9ja0dldFJvdXRlclByb3h5LCBcImNoZWNrSGFzaFdpdGhHdWFyZFwiKTtcblx0XHRcdHNweURpc2NhcmRTdGlja3lTZXNzaW9uID0gamVzdC5zcHlPbihtb2NrRm5Db250ZXh0LCBcImRpc2NhcmRTdGlja3lTZXNzaW9uXCIpO1xuXHRcdH0pO1xuXHRcdGFmdGVyRWFjaCgoKSA9PiB7XG5cdFx0XHRqZXN0LmNsZWFyQWxsTW9ja3MoKTtcblx0XHR9KTtcblx0XHRpdChcImZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbjogSGFzaCB1bmRlZmluZWRcIiwgb1Rlc3RSZWZlcmVuY2VzLCBhc3luYyAoKSA9PiB7XG5cdFx0XHRtb2NrR2V0Um91dGVyUHJveHkuZ2V0SGFzaC5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKTtcblx0XHRcdGNvbnN0IGZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IG9JbnRlcm5hbEVkaXRGbG93Ll9hdHRhY2hSb3V0ZU1hdGNoZWQobW9ja0ZuQ29udGV4dCwgdW5kZWZpbmVkLCBtb2NrQXBwQ29tcG9uZW50KTtcblx0XHRcdGF3YWl0IGZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbigpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEhhc2gpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlDaGVja0hhc2hXaXRoR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRcdGV4cGVjdChzcHlEaXNjYXJkU3RpY2t5U2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdH0pO1xuXHRcdGl0KFwiZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uOiBjaGVja0hhc2hXaXRoR3VhcmQoKT1mYWxzZVwiLCBvVGVzdFJlZmVyZW5jZXMsIGFzeW5jICgpID0+IHtcblx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5nZXRIYXNoLm1vY2tSZXR1cm5WYWx1ZShcImFiY1wiKTtcblx0XHRcdG1vY2tHZXRSb3V0ZXJQcm94eS5jaGVja0hhc2hXaXRoR3VhcmQubW9ja1JldHVyblZhbHVlKGZhbHNlKTtcblx0XHRcdGNvbnN0IGZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbiA9IG9JbnRlcm5hbEVkaXRGbG93Ll9hdHRhY2hSb3V0ZU1hdGNoZWQobW9ja0ZuQ29udGV4dCwgdW5kZWZpbmVkLCBtb2NrQXBwQ29tcG9uZW50KTtcblx0XHRcdGF3YWl0IGZuU3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbigpO1xuXHRcdFx0ZXhwZWN0KHNweUdldEhhc2gpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlDaGVja0hhc2hXaXRoR3VhcmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRcdGV4cGVjdChzcHlEaXNjYXJkU3RpY2t5U2Vzc2lvbikudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdH0pO1xuXHRcdGl0KFwiZm5TdGlja3lEaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uOiBjaGVja0hhc2hXaXRoR3VhcmQoKT10cnVlXCIsIG9UZXN0UmVmZXJlbmNlcywgYXN5bmMgKCkgPT4ge1xuXHRcdFx0bW9ja0dldFJvdXRlclByb3h5LmdldEhhc2gubW9ja1JldHVyblZhbHVlKFwiYWJjXCIpO1xuXHRcdFx0bW9ja0dldFJvdXRlclByb3h5LmNoZWNrSGFzaFdpdGhHdWFyZC5tb2NrUmV0dXJuVmFsdWUodHJ1ZSk7XG5cdFx0XHRjb25zdCBmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24gPSBvSW50ZXJuYWxFZGl0Rmxvdy5fYXR0YWNoUm91dGVNYXRjaGVkKG1vY2tGbkNvbnRleHQsIHVuZGVmaW5lZCwgbW9ja0FwcENvbXBvbmVudCk7XG5cdFx0XHRhd2FpdCBmblN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb24oKTtcblx0XHRcdGV4cGVjdChzcHlHZXRIYXNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5Q2hlY2tIYXNoV2l0aEd1YXJkKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0XHRleHBlY3Qoc3B5RGlzY2FyZFN0aWNreVNlc3Npb24pLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHR9KTtcblx0fSk7XG59KTtcbiJdfQ==