@sapui5/sap.fe.core 1.141.2 → 1.142.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -1,6 +1,6 @@
1
1
  import Log from "sap/base/Log";
2
2
  import type FlexibleColumnLayout from "sap/f/FlexibleColumnLayout";
3
- import { defineUI5Class,implementInterface } from "sap/fe/base/ClassSupport";
3
+ import { defineUI5Class, implementInterface } from "sap/fe/base/ClassSupport";
4
4
  import AppStateHandler from "sap/fe/core/AppStateHandler";
5
5
  import RouterProxy from "sap/fe/core/controllerextensions/routing/RouterProxy";
6
6
  import HTTP503Handler from "sap/fe/core/helpers/HTTP503Handler";
@@ -45,12 +45,15 @@ import type { ViewPreloaderService } from "./services/ViewPreloaderServiceFactor
45
45
  * Represents the additional configuration that can be provided by libraries.
46
46
  */
47
47
  export type AdditionalConfiguration = {
48
+ "sap.fe.core.fpm"?: {
49
+ i18nBundles?: string[];
50
+ };
48
51
  /**
49
52
  * Configuration options for SAP Fiori elements macros.
50
53
  */
51
54
  "sap.fe.macros"?: {
52
55
  /**
53
- * Configuration for the Status macro.
56
+ * Configuration for the Status building block.
54
57
  */
55
58
  Status?: {
56
59
  /**
@@ -60,7 +63,7 @@ export type AdditionalConfiguration = {
60
63
  /**
61
64
  * Color mapping for different status values.
62
65
  */
63
- colorMap?: Record<string, string>;
66
+ colorPalette?: "Standard" | "Pastel";
64
67
  };
65
68
  };
66
69
  };
@@ -94,12 +97,14 @@ const _mRouter = Router;
94
97
 
95
98
  export type StartupParameters = {
96
99
  preferredMode?: string[];
100
+ preferredAction?: string[];
97
101
  } & Record<string, unknown[]>;
102
+
98
103
  /**
99
104
  * Main class for components used for an application in SAP Fiori elements.
100
105
  *
101
106
  * Application developers using the templates and building blocks provided by SAP Fiori elements should create their apps by extending this component.
102
- * This ensures that all the necessary services that you need for the building blocks and templates to work properly are started.
107
+ * This ensures that all the necessary services that you need for the building blocks and templates to work are started.
103
108
  *
104
109
  * When you use sap.fe.core.AppComponent as the base component, you also need to use a rootView. SAP Fiori elements provides two options: <br/>
105
110
  * - sap.fe.core.rootView.NavContainer when using sap.m.routing.Router <br/>
@@ -241,6 +246,16 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
241
246
 
242
247
  private startupMode: string = StartupMode.Normal;
243
248
 
249
+ public eagerViewCreation?: boolean;
250
+
251
+ public hideViewDuringCreation?: boolean;
252
+
253
+ public delayFcl?: boolean;
254
+
255
+ public delayTime = 100;
256
+
257
+ public delayMetadataCheck = false;
258
+
244
259
  private _startedServices: Service<unknown>[] = [];
245
260
 
246
261
  public initialized!: Promise<void>;
@@ -265,6 +280,33 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
265
280
 
266
281
  private _routeMatchHandler?: Function;
267
282
 
283
+ private oComponentData?: ComponentData;
284
+
285
+ /**
286
+ * Status of the preferred action execution to prevent duplicate triggering.
287
+ * - NotSet: Initial state, no preferred action has been evaluated
288
+ * - CanPerform: Preferred action can be performed (conditions are met)
289
+ * - AlreadyPerformed: Preferred action has been executed and should not be triggered again
290
+ */
291
+ public preferredActionStatus: (typeof library.PreferredActionStatusType)[keyof typeof library.PreferredActionStatusType] =
292
+ library.PreferredActionStatusType.NotSet;
293
+
294
+ /**
295
+ * Gets the current status of the preferred action.
296
+ * @returns The current preferred action status
297
+ */
298
+ getPreferredActionStatus(): (typeof library.PreferredActionStatusType)[keyof typeof library.PreferredActionStatusType] {
299
+ return this.preferredActionStatus;
300
+ }
301
+
302
+ /**
303
+ * Sets the status of the preferred action.
304
+ * @param status The new status to set
305
+ */
306
+ setPreferredActionStatus(status: (typeof library.PreferredActionStatusType)[keyof typeof library.PreferredActionStatusType]): void {
307
+ this.preferredActionStatus = status;
308
+ }
309
+
268
310
  /**
269
311
  * Singleton to hold processes from libraries that need to be run for every instance prior to startup.
270
312
  */
@@ -405,12 +447,31 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
405
447
  }
406
448
 
407
449
  init(): void {
450
+ this.oComponentData ??= {};
408
451
  const params = new URLSearchParams(window.location.search);
409
452
  if (params.has("sap-ui-xx-fe-support")) {
410
453
  setTimeout(function () {
411
454
  Library.load({ name: "sap.fe.tools" });
412
455
  }, 2000);
413
456
  }
457
+ if (params.has("sap-ui-xx-fe-eager-view")) {
458
+ this.eagerViewCreation = true;
459
+ }
460
+ if (params.has("sap-ui-xx-fe-hide-view")) {
461
+ this.hideViewDuringCreation = true;
462
+ }
463
+ if (params.has("sap-ui-xx-fe-field-opt")) {
464
+ // STABLE-ISH
465
+ this.delayMetadataCheck = true;
466
+ }
467
+ if (params.has("sap-ui-xx-fe-delay")) {
468
+ // STABLE
469
+ this.delayTime = parseInt(params.get("sap-ui-xx-fe-delay")!, 10);
470
+ }
471
+ if (params.has("sap-ui-xx-fe-fcl-opt")) {
472
+ // STABLE
473
+ this.delayFcl = true;
474
+ }
414
475
  this._initializedKeeper = new PromiseKeeper<void>();
415
476
  this.initialized = this._initializedKeeper.promise;
416
477
  const uiModel = new JSONModel({
@@ -461,6 +522,8 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
461
522
  return fnProcess.call(this, oManifestUI5);
462
523
  });
463
524
 
525
+ this.preloadLibraries(oManifestUI5);
526
+
464
527
  // the init function configures the routing according to the settings above
465
528
  // it will call the createContent function to instantiate the RootView and add it to the UIComponent aggregations
466
529
 
@@ -472,6 +535,18 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
472
535
  return HTTP503Handler.handle503Delay(error, this.getRootControl(), getResourceModel(this));
473
536
  }
474
537
 
538
+ private preloadLibraries(oManifestUI5: ManifestContent["sap.ui5"]): void {
539
+ for (const targetsKey in oManifestUI5.routing?.targets) {
540
+ if (oManifestUI5.routing?.targets[targetsKey].name === "sap.fe.templates.ObjectPage") {
541
+ Library.load({ name: "sap.uxap" }); // fire and forget
542
+ }
543
+ const settings = JSON.stringify(oManifestUI5.routing?.targets[targetsKey]?.options?.settings?.controlConfiguration);
544
+ if (settings?.includes("GridTable") || settings?.includes("TreeTable")) {
545
+ Library.load({ name: "sap.ui.table" }); // fire and forget
546
+ }
547
+ }
548
+ }
549
+
475
550
  private checkRoutingConfiguration(oManifestUI5: ManifestContent["sap.ui5"]): void {
476
551
  if (oManifestUI5?.rootView?.viewName) {
477
552
  // The application specified an own root view in the manifest
@@ -525,6 +600,9 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
525
600
  const finalizedRoutingInitialization = (): void => {
526
601
  this.entityContainer
527
602
  .then(async () => {
603
+ // Preload currencyCodes and UoM if they exists
604
+ (this.getMetaModel() as { requestCodeList?: Function }).requestCodeList?.("CurrencyCodes");
605
+ (this.getMetaModel() as { requestCodeList?: Function }).requestCodeList?.("UnitOfMeasures");
528
606
  if (this.getRootViewController().attachRouteMatchers) {
529
607
  this.getRootViewController().attachRouteMatchers();
530
608
  }
@@ -678,8 +756,14 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
678
756
  }
679
757
 
680
758
  async getStartupParameters(): Promise<StartupParameters> {
681
- const oComponentData = this.getComponentData();
682
- return Promise.resolve((oComponentData && oComponentData.startupParameters) || {});
759
+ const startupParams = this.getComponentData()?.startupParameters;
760
+ if (
761
+ startupParams?.preferredAction?.[0].includes("summary") &&
762
+ this.getPreferredActionStatus() === library.PreferredActionStatusType.NotSet
763
+ ) {
764
+ this.setPreferredActionStatus(library.PreferredActionStatusType.CanPerform);
765
+ }
766
+ return startupParams ?? {};
683
767
  }
684
768
 
685
769
  restore(): void {
@@ -709,7 +793,7 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
709
793
  return this.suspended;
710
794
  }
711
795
 
712
- async isAppComponentBusy() : Promise<void> {
796
+ async isAppComponentBusy(): Promise<void> {
713
797
  return this.discardPromise;
714
798
  }
715
799
 
@@ -816,10 +900,12 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
816
900
  * @returns True if the component is embedded, false otherwise.
817
901
  */
818
902
  _isEmbedded(): boolean {
819
- return !!this.getComponentData().feEnvironment;
903
+ return !!this.getComponentData()?.feEnvironment;
820
904
  }
821
905
  }
822
906
 
907
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
908
+ // @ts-ignore
823
909
  interface AppComponent extends UIComponent {
824
910
  isAdaptationMode(): boolean;
825
911
  getManifest(): ManifestContent;
@@ -59,9 +59,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
59
59
  routerProxy = appComponent.getRouterProxy(),
60
60
  hash = routerProxy.getHash(),
61
61
  isStickyMode = ModelHelper.isStickySessionSupported(appComponent.getMetaModel()),
62
+ isHiddenDraftEnabled = this.oAppComponent.getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false,
62
63
  newHash = navigationService.replaceInnerAppStateKey(routerProxy.getHash(), appStateKey);
63
64
  if (newHash && this.simultaneousCreateRequest[stateIdentifier] === 0 && newHash !== hash) {
64
- routerProxy.navToHash(newHash, undefined, undefined, undefined, !isStickyMode);
65
+ routerProxy.navToHash(newHash, undefined, undefined, undefined, isStickyMode || isHiddenDraftEnabled);
65
66
  this.bNoRouteChange = true;
66
67
  }
67
68
  Log.info("APPSTATE: navToHash");
@@ -240,23 +241,23 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
240
241
  }
241
242
  }
242
243
  if (appStateData?.appState) {
243
- return {
244
+ return key ? {
244
245
  [Object.keys(appStateData.appState)[i]]: appStateData.appState[key] || {}
245
- };
246
+ } : {};
246
247
  }
247
248
  }
248
249
 
249
250
  /**
250
251
  * Applies an appstate by fetching appdata and passing it to _applyAppstateToPage.
251
- * @param viewId
252
- * @param view
252
+ * @param view The view for which the app state must be applied. If no view is provided, then app state of all the views is applied.
253
253
  * @returns A promise for async handling
254
254
  */;
255
- _proto.applyAppState = async function applyAppState(viewId, view) {
255
+ _proto.applyAppState = async function applyAppState(view) {
256
256
  if (AppStateHandler.getRTAVersionWasActivated(this.oAppComponent.getId())) {
257
257
  AppStateHandler.setRTAVersionWasActivated(this.oAppComponent.getId(), false);
258
258
  return Promise.resolve();
259
259
  }
260
+ const viewId = view?.getId();
260
261
  if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this, viewId)) {
261
262
  return Promise.resolve();
262
263
  }
@@ -305,7 +306,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
305
306
  }
306
307
  shouldApplyState = false;
307
308
  }
308
- const applyViewState = await oRootController.viewState.applyViewState(this._mCurrentAppState, this._createNavigationParameters(oAppData, sNavType), skipMerge);
309
+ const applyViewState = await oRootController.viewState.applyViewState(viewId ? appStateData : this._mCurrentAppState, this._createNavigationParameters(oAppData, sNavType), skipMerge);
309
310
  if (!shouldApplyState) {
310
311
  return {};
311
312
  } else {
@@ -357,4 +358,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
357
358
  */
358
359
  return AppStateHandler;
359
360
  }, true);
360
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwibmV3SGFzaCIsInJlcGxhY2VJbm5lckFwcFN0YXRlS2V5IiwibmF2VG9IYXNoIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUFwcFN0YXRlS2V5IiwiYXBwU3RhdGVEYXRhIiwic3RvcmVJbm5lckFwcFN0YXRlQXN5bmMiLCJfZ2V0QXBwU3RhdGVJbmZvIiwiY3JlYXRlQXBwUGFyYW1ldGVycyIsInJlcGxhY2VIYXNoIiwidmlld0lkIiwiYXBwU3RhdGUiLCJjdXJyZW50U3RhdGVUb1VwZGF0ZSIsImRlZXBFcXVhbCIsIm9FcnJvciIsImVycm9yIiwiZmluZEFwcFN0YXRlSW5IYXNoIiwiY3JlYXRlQXBwU3RhdGUiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkFwcFN0YXRlIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwic2tpcE1lcmdlIiwicm9vdENvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJFcnJvciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJvdXRpbmdJc0NvbXBsZXRlIiwicmV0cmlldmVWaWV3U3RhdGUiLCJfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvQXBwRGF0YSIsInNOYXZUeXBlIiwiT2JqZWN0IiwiYXNzaWduIiwic2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIiwib0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsImJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHkiLCJuYXZpZ2F0aW9uVHlwZSIsInNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJpZCIsInZhbHVlIiwidmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJnZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkIiwiX2NoZWNrSWZMYXN0U2VlblJlY29yZCIsInZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJ0ZWNobmljYWxLZXlzT2JqZWN0IiwiYmluZGluZ0NvbnRleHQiLCJwYXRoIiwiZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJlbGVtZW50Iiwia2V5VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIl9nZXRBcHBTdGF0ZURhdGEiLCJuYXZUeXBlIiwia2V5IiwiaSIsImh5YnJpZCIsImlBcHBTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0lmTGFzdFNlZW5SZWNvcmQiLCJsb2NrIiwib05hdmlnYXRpb25TZXJ2aWNlIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsInRoZW4iLCJhUmVzdWx0cyIsImluaXRpYWwiLCJvUm9vdENvbnRyb2xsZXIiLCJzaG91bGRBcHBseVN0YXRlIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiYXBwbHlWaWV3U3RhdGUiLCJmaW5hbGx5IiwidW5sb2NrIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImhhc093blByb3BlcnR5IiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5uZXJBcHBEYXRhIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL05hdmlnYXRpb25IYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcblxuY29uc3QgTmF2VHlwZSA9IGxpYnJhcnkuTmF2VHlwZTtcbnR5cGUgQXBwU3RhdGUgPSB7XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgQXBwRGF0YSA9IHtcblx0b0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50O1xuXHRiTmF2U2VsVmFySGFzRGVmYXVsdHNPbmx5OiBib29sZWFuO1xuXHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdGlBcHBTdGF0ZT86IHtcblx0XHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdH07XG59O1xuY29uc3QgU0tJUF9NRVJHRV9LRVkgPSBcInNraXBNZXJnZVwiO1xuZXhwb3J0IHR5cGUgSUFwcFN0YXRlID0ge1xuXHRhcHBTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEYXRhSW5mbyA9IHtcblx0YXBwU3RhdGVEYXRhOiB7IGFwcFN0YXRlOiBvYmplY3QgfCB1bmRlZmluZWQgfTtcblx0YXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVBcHBQYXJhbWV0ZXJzID0ge1xuXHRyZXBsYWNlSGFzaD86IGJvb2xlYW47XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdHZpZXdJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZlcnNpb25BY3RpdmF0ZWQgPSB7XG5cdHZlcnNpb25XYXNBY3RpdmF0ZWQ6IGJvb2xlYW47XG59O1xuXG5jb25zdCBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFID0gXCJSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcFN0YXRlSGFuZGxlclwiKVxuY2xhc3MgQXBwU3RhdGVIYW5kbGVyIGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdHB1YmxpYyBzSWQ6IHN0cmluZztcblxuXHRwdWJsaWMgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXG5cdHB1YmxpYyBiTm9Sb3V0ZUNoYW5nZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9tQ3VycmVudEFwcFN0YXRlPzogQXBwU3RhdGUgPSB7fTtcblxuXHRzaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG5cdHN0YXRpYyB2ZXJzaW9uQWN0aXZhdGlvblN0YXR1czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5zSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldElkKCl9L0FwcFN0YXRlSGFuZGxlcmA7XG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0ID0ge307XG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0Z2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEBwYXJhbSBpbm5lckFwcFN0YXRlIE92ZXJhbGwgYXBwc3RhdGVcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKiBAcmV0dXJucyBJbm5lciBhcHBzdGF0ZVxuXHQgKi9cblx0X2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgc3RhdGVJZGVudGlmaWVyOiBzdHJpbmcpOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzdGF0ZUlkZW50aWZpZXIgPT09IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfHwgIWlubmVyQXBwU3RhdGUpIHtcblx0XHRcdC8vIG92ZXJhbGwgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cdFx0XHRyZXR1cm4gaW5uZXJBcHBTdGF0ZTtcblx0XHR9XG5cblx0XHQvLyB3ZSB0YWtlIHRoZSBzdWJzZXQgb2YgdGhlIGFwcCBzdGF0ZSB3cnQgdG8gdGhlIGxvY2FsIHZpZXcgaWQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtzdGF0ZUlkZW50aWZpZXJdOiBpbm5lckFwcFN0YXRlW3N0YXRlSWRlbnRpZmllciBhcyBrZXlvZiB0eXBlb2YgaW5uZXJBcHBTdGF0ZV0gfHwge31cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhcHBzdGF0ZSBpbiBoYXNoLlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVLZXkgQXBwc3RhdGUga2V5XG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICovXG5cdF9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleTogc3RyaW5nLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudCxcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdGlzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0bmV3SGFzaCA9IG5hdmlnYXRpb25TZXJ2aWNlLnJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHJvdXRlclByb3h5LmdldEhhc2goKSwgYXBwU3RhdGVLZXkpO1xuXG5cdFx0aWYgKG5ld0hhc2ggJiYgdGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPT09IDAgJiYgbmV3SGFzaCAhPT0gaGFzaCkge1xuXHRcdFx0cm91dGVyUHJveHkubmF2VG9IYXNoKG5ld0hhc2gsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFpc1N0aWNreU1vZGUpO1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IG5hdlRvSGFzaFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgQXBwc3RhdGUgS2V5LlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVEYXRhIEFwcHN0YXRlXG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICogQHJldHVybnMgQXBwc3RhdGUgS2V5XG5cdCAqL1xuXHRhc3luYyBfY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhOiBJbm5lckFwcERhdGEsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQsXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXG5cdFx0aWYgKHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKSB7XG5cdFx0XHQvLyBhbnkgb3RoZXIgdmFsdWVcblx0XHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIDAgb3IgdW5kZWZpbmVkXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9IDE7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwU3RhdGVLZXkgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5zdG9yZUlubmVyQXBwU3RhdGVBc3luYyhhcHBTdGF0ZURhdGEsIHRydWUsIHRydWUpO1xuXG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0tLTtcblxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IEFwcHN0YXRlIHN0b3JlZFwiKTtcblx0XHRyZXR1cm4gYXBwU3RhdGVLZXk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhcHBzdGF0ZSBpbmZvLlxuXHQgKiBAcGFyYW0gaW5uZXJBcHBTdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBfZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgY3JlYXRlQXBwUGFyYW1ldGVycz86IENyZWF0ZUFwcFBhcmFtZXRlcnMpOiBQcm9taXNlPEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IHsgcmVwbGFjZUhhc2ggPSB0cnVlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge307XG5cblx0XHRsZXQgYXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdGxldCBhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGVUb1VwZGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KHRoaXMuX21DdXJyZW50QXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKGlubmVyQXBwU3RhdGUgJiYgIWRlZXBFcXVhbChjdXJyZW50U3RhdGVUb1VwZGF0ZSwgaW5uZXJBcHBTdGF0ZSkpIHtcblx0XHRcdC8vXG5cdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID0geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi4oaW5uZXJBcHBTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcblx0XHRcdGFwcFN0YXRlRGF0YSA9IHsgYXBwU3RhdGU6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUgfTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGFwcFN0YXRlS2V5ID0gYXdhaXQgdGhpcy5fY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdFx0XHRpZiAocmVwbGFjZUhhc2ggPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgcm91dGVyUHJveHkgPSBhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKSxcblx0XHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKTtcblx0XHRcdGFwcFN0YXRlS2V5ID0gcm91dGVyUHJveHkuZmluZEFwcFN0YXRlSW5IYXNoKGhhc2gpIGFzIHN0cmluZztcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFwcFN0YXRlRGF0YSxcblx0XHRcdGFwcFN0YXRlS2V5XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGFwcHN0YXRlLlxuXHQgKiBSZXBsYWNlcyB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgYXBwc3RhdGUgYmFzZWQgb24gcmVwbGFjZUhhc2guXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIG5ldyBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5yZXBsYWNlSGFzaCBCb29sZWFuIHdoaWNoIGRldGVybWluZXMgdG8gcmVwbGFjZSB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgZ2VuZXJhdGVkIGtleVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5za2lwTWVyZ2UgQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHNraXAgdGhlIGtleSB1c2VyIHNoaW5lIHRocm91Z2hcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBzdG9yZWQgZGF0YSBvciBhcHBzdGF0ZSBrZXlcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUFwcFN0YXRlKGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgQXBwRGF0YUluZm8+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQ7XG5cdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgc2tpcE1lcmdlID0gZmFsc2UsIHZpZXdJZDogc3RhdGVJZGVudGlmaWVyID0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB9ID0gY3JlYXRlQXBwUGFyYW1ldGVycyA/PyB7fSxcblx0XHRcdHJvb3RDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0aWYgKCFyb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXI6ICR7cm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSwgb24gbG9hZCBvZiBGQ0wgYXBwIHdlIGhhdmUgbXVsdGlwbGUgdmlld3MoTFIsIE9QLCBzdWItT1AuLi4pIGFuZCB1cmwgaGFzIGlBcHBTdGF0ZSgxKS5cblx0XHQvLyBUaGUgTFIgdmlldyBsb2FkcyB3aXRoIGFwcGxpZWQgaUFwcFN0YXRlKDEpIGFuZCBjYWxscyBjcmVhdGVBcHBTdGF0ZShleGFtcGxlOiBvblNlYXJjaCBldmVudCBpbiBMUikgYmVmb3JlIE9QIGlzIGxvYWRlZC5cblx0XHQvLyBUaGlzIGNyZWF0ZXMgaUFwcFN0YXRlKDIpIGJlZm9yZSBpQXBwU3RhdGUoMSkgaXMgYXBwbGllZCB0byBPUC5cblx0XHQvLyBTbywgd2UgdHJ5IHRvIHdhaXQgdGlsbCB0aGUgcm91dGluZyBpcyBjb21wbGV0ZS5cblx0XHRhd2FpdCByb290Q29udHJvbGxlci5yb3V0aW5nSXNDb21wbGV0ZSgpO1xuXG5cdFx0Ly8gR2V0IGFwcFN0YXRlIHRvIHVwZGF0ZVxuXHRcdGxldCBpbm5lckFwcFN0YXRlID0gKGF3YWl0IHJvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpKSBhcyBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQ7XG5cdFx0aW5uZXJBcHBTdGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKHNraXBNZXJnZSkge1xuXHRcdFx0aW5uZXJBcHBTdGF0ZSA9IHsgLi4uaW5uZXJBcHBTdGF0ZSwgLi4ueyBza2lwTWVyZ2UgfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9nZXRBcHBTdGF0ZUluZm8oaW5uZXJBcHBTdGF0ZSwgY3JlYXRlQXBwUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGE6IEFwcERhdGEsIHNOYXZUeXBlOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUGFyYW1ldGVyIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb0FwcERhdGEsIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0czogb0FwcERhdGEub0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvQXBwRGF0YS5vU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50OiAhb0FwcERhdGEuYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSxcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBzTmF2VHlwZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgUlRBIHZlcnNpb24gd2FzIGFjdGl2YXRlZC5cblx0ICovXG5cdHN0YXRpYyBzZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKGlkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aXZhdGlvbiBzdGF0dXMgb3IgdW5kZWZpbmVkIGlmIG5vdCBzZXQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdO1xuXHR9XG5cblx0X2NoZWNrSWZMYXN0U2VlblJlY29yZCh2aWV3PzogVmlldyk6IGJvb2xlYW4ge1xuXHRcdC8vZ2V0dGluZyB0aGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpbiBvcmRlciB0byBmZXRjaCB0aGUgdGVjaG5pY2Fsa2V5cyBvZiBsYXN0IHNlZW4gcmVjb3JkIGFuZCBjbG9zZSBjb2x1bW4gZmxhZyBzZXQgaW4gdGhlIGludGVybmFscm91dGluZyBmb3IgcmV0YWluaW5nIHNldHRpbmdzIGluIHBlcnNpc3RlbmNlIG1vZGVcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcgJiYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0ICYmIGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzT2JqZWN0ID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ0ZWNobmljYWxLZXlzT2ZMYXN0U2VlblJlY29yZFwiKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0Y29uc3QgcGF0aCA9IChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBiaW5kaW5nQ29udGV4dD8uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsPy5nZXRNZXRhUGF0aChwYXRoKTtcblx0XHRcdGNvbnN0IHRlY2huaWNhbEtleXMgPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHttZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0aWYgKHRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBrZXlWYWx1ZSA9IGJpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpW2VsZW1lbnRdO1xuXHRcdFx0XHRcdGlmIChrZXlWYWx1ZSAhPT0gdGVjaG5pY2FsS2V5c09iamVjdFtlbGVtZW50XSkge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmY2xDb2x1bW5DbG9zZWRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL3RoZSByZWNvcmQgb3BlbmVkIGlzIG5vdCB0aGUgbGFzdCBzZWVuIG9uZSA6IG5vIG5lZWQgdG8gcGVyc2lzdCB0aGUgY2hhbmdlcywgcmVzZXQgdG8gZGVmYXVsdCBpbnN0ZWFkXG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBTdGF0ZURhdGEob0FwcERhdGE6IEFwcERhdGEsIHZpZXdJZD86IHN0cmluZywgbmF2VHlwZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQga2V5ID0gXCJcIixcblx0XHRcdGkgPSAwO1xuXHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IG5hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8gb0FwcERhdGEuaUFwcFN0YXRlIDogb0FwcERhdGE7XG5cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0Zm9yIChpOyBpIDwgT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXSA9PT0gdmlld0lkKSB7XG5cdFx0XHRcdFx0a2V5ID0gT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W09iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV1dOiBhcHBTdGF0ZURhdGEuYXBwU3RhdGVba2V5XSB8fCB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKiBAcGFyYW0gdmlld0lkXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIGFwcGx5QXBwU3RhdGUodmlld0lkPzogc3RyaW5nLCB2aWV3PzogVmlldyk6IFByb21pc2U8dm9pZCB8IHt9PiB7XG5cdFx0aWYgKEFwcFN0YXRlSGFuZGxlci5nZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKHRoaXMub0FwcENvbXBvbmVudC5nZXRJZCgpKSkge1xuXHRcdFx0QXBwU3RhdGVIYW5kbGVyLnNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCksIGZhbHNlKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkFwcFN0YXRlIHx8IEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcywgdmlld0lkKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNoZWNrSWZMYXN0U2VlblJlY29yZCA9IHRoaXMuX2NoZWNrSWZMYXN0U2VlblJlY29yZCh2aWV3KTtcblx0XHRpZiAoY2hlY2tJZkxhc3RTZWVuUmVjb3JkID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdC8vIGxvY2sgdGhlIGFwcGx5IHN0YXRlIGZvciB0aGUgY3VycmVudCB2aWV3XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMsIHZpZXdJZCk7XG5cdFx0Ly8gbG9jayB0aGUgQXBwIFN0YXRlIGhhbmRsZXIsIHVzZWQgdG8gYXZvaWQgYSBjcmVhdGlvbiBvZiBhcHAgc3RhdGUgZHVyaW5nIGFwcGx5XG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMpO1xuXHRcdC8vIERvbmUgZm9yIGJ1c3kgaW5kaWNhdG9yXG5cdFx0QnVzeUxvY2tlci5sb2NrKHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0XHQvLyBUT0RPIG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSBzaG91bGQgcmV0dXJuIEVTNiBwcm9taXNlIGluc3RlYWQgalF1ZXJ5LnByb21pc2Vcblx0XHRyZXR1cm4gdG9FUzZQcm9taXNlPHVua25vd25bXT4ob05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpKVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChhRXJyb3JEYXRhOiB1bmtub3duW10pIHtcblx0XHRcdFx0aWYgKCFhRXJyb3JEYXRhKSB7XG5cdFx0XHRcdFx0YUVycm9yRGF0YSA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdExvZy53YXJuaW5nKFwiQVBQU1RBVEU6IFBhcnNlIE5hdmlnYXRpb24gZmFpbGVkXCIsIGFFcnJvckRhdGFbMF0gYXMgc3RyaW5nKTtcblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQvKiBhcHAgZGF0YSAqL1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsxXSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzJdXG5cdFx0XHRcdF07XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oYXN5bmMgKGFSZXN1bHRzOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0TG9nLmluZm8oXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBkb25lXCIpO1xuXG5cdFx0XHRcdC8vIGFSZXN1bHRzWzFdID0+IG9TdGFydHVwUGFyYW1ldGVycyAobm90IGV2YWx1YXRlZClcblx0XHRcdFx0Y29uc3Qgb0FwcERhdGEgPSAoYVJlc3VsdHNbMF0gfHwge30pIGFzIEFwcERhdGEsXG5cdFx0XHRcdFx0c05hdlR5cGUgPSAoYVJlc3VsdHNbMl0gYXMgc3RyaW5nKSB8fCBOYXZUeXBlLmluaXRpYWwsXG5cdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHQvLyBhcHBseSB0aGUgYXBwc3RhdGUgZGVwZW5kaW5nIHVwb24gdGhlIHZpZXcgKExSL09QKVxuXHRcdFx0XHRjb25zdCBhcHBTdGF0ZURhdGEgPSB0aGlzLl9nZXRBcHBTdGF0ZURhdGEob0FwcERhdGEsIHZpZXdJZCwgc05hdlR5cGUpO1xuXHRcdFx0XHQvLyBmZXRjaCB0aGUgc2tpcE1lcmdlIGZsYWcgZnJvbSBhcHBTdGF0ZSBmb3Igc2F2ZSBhcyB0aWxlXG5cdFx0XHRcdGNvbnN0IHNraXBNZXJnZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IG9BcHBEYXRhPy5hcHBTdGF0ZT8uW1NLSVBfTUVSR0VfS0VZXTtcblx0XHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9XG5cdFx0XHRcdFx0c05hdlR5cGUgPT09IE5hdlR5cGUuaUFwcFN0YXRlIHx8IHNOYXZUeXBlID09PSBOYXZUeXBlLmh5YnJpZCA/IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uYXBwU3RhdGVEYXRhIH0gOiB7fTtcblx0XHRcdFx0bGV0IHNob3VsZEFwcGx5U3RhdGUgPSB0cnVlO1xuXG5cdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGV4dGVuc2lvbiByZXF1aXJlZCBmb3IgY29udHJvbGxlciAke29Sb290Q29udHJvbGxlci5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5faXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZShvQXBwRGF0YSwgc05hdlR5cGUpKSB7XG5cdFx0XHRcdFx0aWYgKCFvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkpIHtcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2hvdWxkQXBwbHlTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGFwcGx5Vmlld1N0YXRlID0gYXdhaXQgb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShcblx0XHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdHRoaXMuX2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhLCBzTmF2VHlwZSksXG5cdFx0XHRcdFx0c2tpcE1lcmdlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICghc2hvdWxkQXBwbHlTdGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gYXBwbHlWaWV3U3RhdGU7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJhcHBTdGF0ZSBjb3VsZCBub3QgYmUgYXBwbGllZFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0dGhyb3cgb0Vycm9yO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0Ly8gdW5sb2NrIGFwcGx5IHN0YXRlIGZvciB0aGUgY3VycmVudCB2aWV3XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMsIHZpZXdJZCk7XG5cdFx0XHRcdC8vIHVubG9jayB0aGUgYXBwIHN0YXRlIGhhbmRsZXIsIHNvIHRoYXQgYXBwIHN0YXRlIGNyZWF0aW9uIGNhbiBoYXBwZW4gbm93LlxuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzKTtcblx0XHRcdFx0Ly8gdW5sb2NrIHRoZSBSb290Q29udHJvbCB0byByZW1vdmUgdGhlIGJ1c3kgaW5kaWNhdG9yLlxuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBjaGVjayBpcyByb3V0ZSBpcyBjaGFuZ2VkIGJ5IGNoYW5nZSBpbiB0aGUgaUFQUFN0YXRlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdXRlIGhhcyBjaG5hZ2VkXG5cdCAqL1xuXHRjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJOb1JvdXRlQ2hhbmdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICovXG5cdHJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJOb1JvdXRlQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVzZXQgYWxsIGFjdGl2YXRpb24gc3RhdHVzZXMgaW4gQXBwU3RhdGVIYW5kbGVyLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIHRvIGZhbHNlXG5cdHN0YXRpYyByZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1cykge1xuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzLCBpZCkpIHtcblx0XHRcdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAZ2xvYmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXRlSGFuZGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7RUFnQkEsTUFBTUEsT0FBTyxHQUFHQyxP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QUFDLENBQUMsQ0FDRFgsS0FBSyxDQUFDLFVBQVV0RSxNQUFlLEVBQUU7UUFDakNuQyxHQUFHLENBQUNvQyxLQUFLLENBQUMsK0JBQStCLEVBQUVELE1BQWdCLENBQUM7UUFDNUQsTUFBTUEsTUFBTTtNQUNiLENBQUMsQ0FBQyxDQUNEa0YsT0FBTyxDQUFDLE1BQU07UUFDZDtRQUNBM0UsVUFBVSxDQUFDNEUsTUFBTSxDQUFDLElBQUksRUFBRXZGLE1BQU0sQ0FBQztRQUMvQjtRQUNBVyxVQUFVLENBQUM0RSxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3ZCO1FBQ0E1RSxVQUFVLENBQUM0RSxNQUFNLENBQUMsSUFBSSxDQUFDOUgsYUFBYSxDQUFDc0QsY0FBYyxDQUFDLENBQUMsQ0FBQztNQUN2RCxDQUFDLENBQUM7SUFDSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUEzQyxNQUFBLENBSUFvSCx5QkFBeUIsR0FBekIsU0FBQUEseUJBQXlCQSxDQUFBLEVBQVk7TUFDcEMsT0FBTyxJQUFJLENBQUN4SCxjQUFjO0lBQzNCOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFJLE1BQUEsQ0FHQXFILHVCQUF1QixHQUF2QixTQUFBQSx1QkFBdUJBLENBQUEsRUFBUztNQUMvQixJQUFJLElBQUksQ0FBQ3pILGNBQWMsRUFBRTtRQUN4QixJQUFJLENBQUNBLGNBQWMsR0FBRyxLQUFLO01BQzVCO0lBQ0Q7O0lBRUE7SUFBQTtJQUFBYixlQUFBLENBQ091SSw0QkFBNEIsR0FBbkMsU0FBT0EsNEJBQTRCQSxDQUFBLEVBQVM7TUFDM0MsS0FBSyxNQUFNdEQsRUFBRSxJQUFJLElBQUksQ0FBQ0UsdUJBQXVCLEVBQUU7UUFDOUMsSUFBSVosTUFBTSxDQUFDckQsU0FBUyxDQUFDc0gsY0FBYyxDQUFDaEksSUFBSSxDQUFDLElBQUksQ0FBQzJFLHVCQUF1QixFQUFFRixFQUFFLENBQUMsRUFBRTtVQUMzRSxJQUFJLENBQUNFLHVCQUF1QixDQUFDRixFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3pDO01BQ0Q7SUFDRCxDQUFDO0lBQUEsT0FBQWpGLGVBQUE7RUFBQSxFQWhXNEJ5SSxVQUFVLEdBQUFySSxnQkFBQSxDQVdoQytFLHVCQUF1QixHQUE0QixDQUFDLENBQUMsRUFBQS9FLGdCQUFBLE1BQUFELE1BQUE7RUF3VjdEO0FBQ0E7QUFDQTtFQUZBLE9BR2VILGVBQWU7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
361
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwiaXNIaWRkZW5EcmFmdEVuYWJsZWQiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkhpZGRlbkRyYWZ0IiwiZW5hYmxlZCIsIm5ld0hhc2giLCJyZXBsYWNlSW5uZXJBcHBTdGF0ZUtleSIsIm5hdlRvSGFzaCIsInVuZGVmaW5lZCIsIl9jcmVhdGVBcHBTdGF0ZUtleSIsImFwcFN0YXRlRGF0YSIsInN0b3JlSW5uZXJBcHBTdGF0ZUFzeW5jIiwiX2dldEFwcFN0YXRlSW5mbyIsImNyZWF0ZUFwcFBhcmFtZXRlcnMiLCJyZXBsYWNlSGFzaCIsInZpZXdJZCIsImFwcFN0YXRlIiwiY3VycmVudFN0YXRlVG9VcGRhdGUiLCJkZWVwRXF1YWwiLCJvRXJyb3IiLCJlcnJvciIsImZpbmRBcHBTdGF0ZUluSGFzaCIsImNyZWF0ZUFwcFN0YXRlIiwiQXBwU3RhdGUiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJza2lwTWVyZ2UiLCJyb290Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsIkVycm9yIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwicm91dGluZ0lzQ29tcGxldGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm9BcHBEYXRhIiwic05hdlR5cGUiLCJPYmplY3QiLCJhc3NpZ24iLCJzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsInJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSIsIm5hdmlnYXRpb25UeXBlIiwic2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCIsImlkIiwidmFsdWUiLCJ2ZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJfY2hlY2tJZkxhc3RTZWVuUmVjb3JkIiwidmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRQcm9wZXJ0eSIsInRlY2huaWNhbEtleXNPYmplY3QiLCJiaW5kaW5nQ29udGV4dCIsInBhdGgiLCJnZXRQYXRoIiwibWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJtZXRhUGF0aCIsImdldE1ldGFQYXRoIiwidGVjaG5pY2FsS2V5cyIsImdldE9iamVjdCIsImVsZW1lbnQiLCJrZXlWYWx1ZSIsInNldFByb3BlcnR5IiwiX2dldEFwcFN0YXRlRGF0YSIsIm5hdlR5cGUiLCJrZXkiLCJpIiwiaHlicmlkIiwiaUFwcFN0YXRlIiwia2V5cyIsImxlbmd0aCIsImFwcGx5QXBwU3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoZWNrSWZMYXN0U2VlblJlY29yZCIsImxvY2siLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJ0b0VTNlByb21pc2UiLCJwYXJzZU5hdmlnYXRpb24iLCJjYXRjaCIsImFFcnJvckRhdGEiLCJ3YXJuaW5nIiwidGhlbiIsImFSZXN1bHRzIiwiaW5pdGlhbCIsIm9Sb290Q29udHJvbGxlciIsInNob3VsZEFwcGx5U3RhdGUiLCJfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQiLCJhcHBseVZpZXdTdGF0ZSIsImZpbmFsbHkiLCJ1bmxvY2siLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAiLCJyZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIiwiaGFzT3duUHJvcGVydHkiLCJCYXNlT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBTdGF0ZUhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBFcXVhbFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdG9FUzZQcm9taXNlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1RvRVM2UHJvbWlzZVwiO1xuaW1wb3J0IHR5cGUgeyBJbm5lckFwcERhdGEgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vTmF2aWdhdGlvbkhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgbGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuXG5jb25zdCBOYXZUeXBlID0gbGlicmFyeS5OYXZUeXBlO1xudHlwZSBBcHBTdGF0ZSA9IHtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5leHBvcnQgdHlwZSBBcHBEYXRhID0ge1xuXHRvRGVmYXVsdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0b1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdGJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk6IGJvb2xlYW47XG5cdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0aUFwcFN0YXRlPzoge1xuXHRcdGFwcFN0YXRlOiBBcHBTdGF0ZTtcblx0fTtcbn07XG5jb25zdCBTS0lQX01FUkdFX0tFWSA9IFwic2tpcE1lcmdlXCI7XG5leHBvcnQgdHlwZSBJQXBwU3RhdGUgPSB7XG5cdGFwcFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn07XG5cbmV4cG9ydCB0eXBlIEFwcERhdGFJbmZvID0ge1xuXHRhcHBTdGF0ZURhdGE6IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9O1xuXHRhcHBTdGF0ZUtleTogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZUFwcFBhcmFtZXRlcnMgPSB7XG5cdHJlcGxhY2VIYXNoPzogYm9vbGVhbjtcblx0c2tpcE1lcmdlPzogYm9vbGVhbjtcblx0dmlld0lkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVmVyc2lvbkFjdGl2YXRlZCA9IHtcblx0dmVyc2lvbldhc0FjdGl2YXRlZDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgPSBcIlJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEVcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwU3RhdGVIYW5kbGVyXCIpXG5jbGFzcyBBcHBTdGF0ZUhhbmRsZXIgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0cHVibGljIHNJZDogc3RyaW5nO1xuXG5cdHB1YmxpYyBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cblx0cHVibGljIGJOb1JvdXRlQ2hhbmdlOiBib29sZWFuO1xuXG5cdHByaXZhdGUgX21DdXJyZW50QXBwU3RhdGU/OiBBcHBTdGF0ZSA9IHt9O1xuXG5cdHNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG5cblx0c3RhdGljIHZlcnNpb25BY3RpdmF0aW9uU3RhdHVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG5cdGNvbnN0cnVjdG9yKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0FwcENvbXBvbmVudDtcblx0XHR0aGlzLnNJZCA9IGAke29BcHBDb21wb25lbnQuZ2V0SWQoKX0vQXBwU3RhdGVIYW5kbGVyYDtcblx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3QgPSB7fTtcblx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0TG9nLmluZm8oXCJBUFBTVEFURSA6IEFwcHN0YXRlIGhhbmRsZXIgaW5pdGlhbGl6ZWRcIik7XG5cdH1cblxuXHRnZXRJZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNJZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGUgT3ZlcmFsbCBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIElubmVyIGFwcHN0YXRlXG5cdCAqL1xuXHRfZ2V0SW5uZXJBcHBTdGF0ZUZvclZpZXcoaW5uZXJBcHBTdGF0ZTogSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHN0YXRlSWRlbnRpZmllciA9PT0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB8fCAhaW5uZXJBcHBTdGF0ZSkge1xuXHRcdFx0Ly8gb3ZlcmFsbCBhcHAgc3RhdGUgbmVlZHMgdG8gYmUgY29uc2lkZXJlZC5cblx0XHRcdHJldHVybiBpbm5lckFwcFN0YXRlO1xuXHRcdH1cblxuXHRcdC8vIHdlIHRha2UgdGhlIHN1YnNldCBvZiB0aGUgYXBwIHN0YXRlIHdydCB0byB0aGUgbG9jYWwgdmlldyBpZC5cblx0XHRyZXR1cm4ge1xuXHRcdFx0W3N0YXRlSWRlbnRpZmllcl06IGlubmVyQXBwU3RhdGVbc3RhdGVJZGVudGlmaWVyIGFzIGtleW9mIHR5cGVvZiBpbm5lckFwcFN0YXRlXSB8fCB7fVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGFwcHN0YXRlIGluIGhhc2guXG5cdCAqIEBwYXJhbSBhcHBTdGF0ZUtleSBBcHBzdGF0ZSBrZXlcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKi9cblx0X2FkZEFwcFN0YXRlSW5IYXNoKGFwcFN0YXRlS2V5OiBzdHJpbmcsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKSxcblx0XHRcdHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRoYXNoID0gcm91dGVyUHJveHkuZ2V0SGFzaCgpLFxuXHRcdFx0aXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKGFwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRpc0hpZGRlbkRyYWZ0RW5hYmxlZCA9XG5cdFx0XHRcdCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHwgZmFsc2UsXG5cdFx0XHRuZXdIYXNoID0gbmF2aWdhdGlvblNlcnZpY2UucmVwbGFjZUlubmVyQXBwU3RhdGVLZXkocm91dGVyUHJveHkuZ2V0SGFzaCgpLCBhcHBTdGF0ZUtleSk7XG5cblx0XHRpZiAobmV3SGFzaCAmJiB0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9PT0gMCAmJiBuZXdIYXNoICE9PSBoYXNoKSB7XG5cdFx0XHRyb3V0ZXJQcm94eS5uYXZUb0hhc2gobmV3SGFzaCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaXNTdGlja3lNb2RlIHx8IGlzSGlkZGVuRHJhZnRFbmFibGVkKTtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSB0cnVlO1xuXHRcdH1cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBuYXZUb0hhc2hcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIEFwcHN0YXRlIEtleS5cblx0ICogQHBhcmFtIGFwcFN0YXRlRGF0YSBBcHBzdGF0ZVxuXHQgKiBAcGFyYW0gc3RhdGVJZGVudGlmaWVyIFN0YXRlIGlkZW50aWZpZXIuIElkIG9mIHRoZSBsb2NhbCB2aWV3XG5cdCAqIEByZXR1cm5zIEFwcHN0YXRlIEtleVxuXHQgKi9cblx0YXN5bmMgX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YTogSW5uZXJBcHBEYXRhLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LFxuXHRcdFx0bmF2aWdhdGlvblNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblxuXHRcdGlmICh0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHZhbHVlXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSsrO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAwIG9yIHVuZGVmaW5lZFxuXHRcdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPSAxO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcFN0YXRlS2V5ID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2Uuc3RvcmVJbm5lckFwcFN0YXRlQXN5bmMoYXBwU3RhdGVEYXRhLCB0cnVlLCB0cnVlKTtcblxuXHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdLS07XG5cblx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBBcHBzdGF0ZSBzdG9yZWRcIik7XG5cdFx0cmV0dXJuIGFwcFN0YXRlS2V5O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYXBwc3RhdGUgaW5mby5cblx0ICogQHBhcmFtIGlubmVyQXBwU3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgY3JlYXRpbmcgbmV3IGFwcHN0YXRlXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnJlcGxhY2VIYXNoIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byByZXBsYWNlIHRoZSBoYXNoIHdpdGggdGhlIG5ldyBnZW5lcmF0ZWQga2V5XG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZpbmcgdGhlIHN0b3JlZCBkYXRhIG9yIGFwcHN0YXRlIGtleVxuXHQgKi9cblx0YXN5bmMgX2dldEFwcFN0YXRlSW5mbyhpbm5lckFwcFN0YXRlOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQsIGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTxBcHBEYXRhSW5mbz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudDtcblx0XHRjb25zdCB7IHJlcGxhY2VIYXNoID0gdHJ1ZSwgdmlld0lkOiBzdGF0ZUlkZW50aWZpZXIgPSBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFIH0gPSBjcmVhdGVBcHBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0bGV0IGFwcFN0YXRlS2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0XHRsZXQgYXBwU3RhdGVEYXRhID0geyBhcHBTdGF0ZTogdGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSB9O1xuXG5cdFx0Y29uc3QgY3VycmVudFN0YXRlVG9VcGRhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyh0aGlzLl9tQ3VycmVudEFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChpbm5lckFwcFN0YXRlICYmICFkZWVwRXF1YWwoY3VycmVudFN0YXRlVG9VcGRhdGUsIGlubmVyQXBwU3RhdGUpKSB7XG5cdFx0XHQvL1xuXHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSA9IHsgLi4udGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSwgLi4uKGlubmVyQXBwU3RhdGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG5cdFx0XHRhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhcHBTdGF0ZUtleSA9IGF3YWl0IHRoaXMuX2NyZWF0ZUFwcFN0YXRlS2V5KGFwcFN0YXRlRGF0YSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0aWYgKHJlcGxhY2VIYXNoID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dGhpcy5fYWRkQXBwU3RhdGVJbkhhc2goYXBwU3RhdGVLZXksIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJvdXRlclByb3h5ID0gYXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCksXG5cdFx0XHRcdGhhc2ggPSByb3V0ZXJQcm94eS5nZXRIYXNoKCk7XG5cdFx0XHRhcHBTdGF0ZUtleSA9IHJvdXRlclByb3h5LmZpbmRBcHBTdGF0ZUluSGFzaChoYXNoKSBhcyBzdHJpbmc7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRhcHBTdGF0ZURhdGEsXG5cdFx0XHRhcHBTdGF0ZUtleVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBhcHBzdGF0ZS5cblx0ICogUmVwbGFjZXMgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGFwcHN0YXRlIGJhc2VkIG9uIHJlcGxhY2VIYXNoLlxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMuc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzLnZpZXdJZCBJZCBvZiB0aGUgdmlldyBmb3Igd2hpY2ggd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFwcCBzdGF0ZS4gVGhpcyBpcyB0byBjcmVhdGUgb3IgdXBkYXRlIHZpZXcgc3BlY2lmaWMgYXBwc3RhdGVcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBjcmVhdGVBcHBTdGF0ZShjcmVhdGVBcHBQYXJhbWV0ZXJzPzogQ3JlYXRlQXBwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZCB8IEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGlmICghYXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCB7IHNraXBNZXJnZSA9IGZhbHNlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge30sXG5cdFx0XHRyb290Q29udHJvbGxlciA9IGFwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblxuXHRcdGlmICghcm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBjb250cm9sbGVyIGV4dGVuc2lvbiBub3QgYXZhaWxhYmxlIGZvciBjb250cm9sbGVyOiAke3Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdH1cblxuXHRcdC8vIEluIGNhc2UsIG9uIGxvYWQgb2YgRkNMIGFwcCB3ZSBoYXZlIG11bHRpcGxlIHZpZXdzKExSLCBPUCwgc3ViLU9QLi4uKSBhbmQgdXJsIGhhcyBpQXBwU3RhdGUoMSkuXG5cdFx0Ly8gVGhlIExSIHZpZXcgbG9hZHMgd2l0aCBhcHBsaWVkIGlBcHBTdGF0ZSgxKSBhbmQgY2FsbHMgY3JlYXRlQXBwU3RhdGUoZXhhbXBsZTogb25TZWFyY2ggZXZlbnQgaW4gTFIpIGJlZm9yZSBPUCBpcyBsb2FkZWQuXG5cdFx0Ly8gVGhpcyBjcmVhdGVzIGlBcHBTdGF0ZSgyKSBiZWZvcmUgaUFwcFN0YXRlKDEpIGlzIGFwcGxpZWQgdG8gT1AuXG5cdFx0Ly8gU28sIHdlIHRyeSB0byB3YWl0IHRpbGwgdGhlIHJvdXRpbmcgaXMgY29tcGxldGUuXG5cdFx0YXdhaXQgcm9vdENvbnRyb2xsZXIucm91dGluZ0lzQ29tcGxldGUoKTtcblxuXHRcdC8vIEdldCBhcHBTdGF0ZSB0byB1cGRhdGVcblx0XHRsZXQgaW5uZXJBcHBTdGF0ZSA9IChhd2FpdCByb290Q29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKSkgYXMgSW5uZXJBcHBEYXRhIHwgdW5kZWZpbmVkO1xuXHRcdGlubmVyQXBwU3RhdGUgPSB0aGlzLl9nZXRJbm5lckFwcFN0YXRlRm9yVmlldyhpbm5lckFwcFN0YXRlLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdGlmIChza2lwTWVyZ2UpIHtcblx0XHRcdGlubmVyQXBwU3RhdGUgPSB7IC4uLmlubmVyQXBwU3RhdGUsIC4uLnsgc2tpcE1lcmdlIH0gfTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGUsIGNyZWF0ZUFwcFBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2NyZWF0ZU5hdmlnYXRpb25QYXJhbWV0ZXJzKG9BcHBEYXRhOiBBcHBEYXRhLCBzTmF2VHlwZTogc3RyaW5nKTogTmF2aWdhdGlvblBhcmFtZXRlciB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9BcHBEYXRhLCB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IG9BcHBEYXRhLm9EZWZhdWx0ZWRTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb0FwcERhdGEub1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudDogIW9BcHBEYXRhLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHksXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc05hdlR5cGVcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFJUQSB2ZXJzaW9uIHdhcyBhY3RpdmF0ZWQuXG5cdCAqL1xuXHRzdGF0aWMgc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdID0gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBSVEEgKFJ1bnRpbWUgQWRhcHRhdGlvbikgdmVyc2lvbiBhY3RpdmF0aW9uIHN0YXR1cyBmb3IgYSBzcGVjaWZpYyBJRC5cblx0ICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllci5cblx0ICogQHJldHVybnMgVGhlIGFjdGl2YXRpb24gc3RhdHVzIG9yIHVuZGVmaW5lZCBpZiBub3Qgc2V0LlxuXHQgKi9cblx0c3RhdGljIGdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXTtcblx0fVxuXG5cdF9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldz86IFZpZXcpOiBib29sZWFuIHtcblx0XHQvL2dldHRpbmcgdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgaW4gb3JkZXIgdG8gZmV0Y2ggdGhlIHRlY2huaWNhbGtleXMgb2YgbGFzdCBzZWVuIHJlY29yZCBhbmQgY2xvc2UgY29sdW1uIGZsYWcgc2V0IGluIHRoZSBpbnRlcm5hbHJvdXRpbmcgZm9yIHJldGFpbmluZyBzZXR0aW5ncyBpbiBwZXJzaXN0ZW5jZSBtb2RlXG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCAmJiBpbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImZjbENvbHVtbkNsb3NlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgdGVjaG5pY2FsS2V5c09iamVjdCA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwidGVjaG5pY2FsS2V5c09mTGFzdFNlZW5SZWNvcmRcIik7XG5cdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdGNvbnN0IHBhdGggPSAoYmluZGluZ0NvbnRleHQgJiYgYmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKSB8fCBcIlwiO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gYmluZGluZ0NvbnRleHQ/LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aCA9IG1ldGFNb2RlbD8uZ2V0TWV0YVBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzID0gbWV0YU1vZGVsPy5nZXRPYmplY3QoYCR7bWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0XHRcdGlmICh0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiB0ZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKVtlbGVtZW50XTtcblx0XHRcdFx0XHRpZiAoa2V5VmFsdWUgIT09IHRlY2huaWNhbEtleXNPYmplY3RbZWxlbWVudF0pIHtcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIsIGZhbHNlKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly90aGUgcmVjb3JkIG9wZW5lZCBpcyBub3QgdGhlIGxhc3Qgc2VlbiBvbmUgOiBubyBuZWVkIHRvIHBlcnNpc3QgdGhlIGNoYW5nZXMsIHJlc2V0IHRvIGRlZmF1bHQgaW5zdGVhZFxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRfZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhOiBBcHBEYXRhLCB2aWV3SWQ/OiBzdHJpbmcsIG5hdlR5cGU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGtleSA9IFwiXCIsXG5cdFx0XHRpID0gMDtcblx0XHRjb25zdCBhcHBTdGF0ZURhdGEgPSBuYXZUeXBlID09PSBOYXZUeXBlLmh5YnJpZCA/IG9BcHBEYXRhLmlBcHBTdGF0ZSA6IG9BcHBEYXRhO1xuXG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdGZvciAoaTsgaSA8IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSkubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV0gPT09IHZpZXdJZCkge1xuXHRcdFx0XHRcdGtleSA9IE9iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFwcFN0YXRlRGF0YT8uYXBwU3RhdGUpIHtcblx0XHRcdHJldHVybiBrZXlcblx0XHRcdFx0PyB7XG5cdFx0XHRcdFx0XHRbT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXV06IGFwcFN0YXRlRGF0YS5hcHBTdGF0ZVtrZXldIHx8IHt9XG5cdFx0XHRcdCAgfVxuXHRcdFx0XHQ6IHt9O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIGFuIGFwcHN0YXRlIGJ5IGZldGNoaW5nIGFwcGRhdGEgYW5kIHBhc3NpbmcgaXQgdG8gX2FwcGx5QXBwc3RhdGVUb1BhZ2UuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IGZvciB3aGljaCB0aGUgYXBwIHN0YXRlIG11c3QgYmUgYXBwbGllZC4gSWYgbm8gdmlldyBpcyBwcm92aWRlZCwgdGhlbiBhcHAgc3RhdGUgb2YgYWxsIHRoZSB2aWV3cyBpcyBhcHBsaWVkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgZm9yIGFzeW5jIGhhbmRsaW5nXG5cdCAqL1xuXHRhc3luYyBhcHBseUFwcFN0YXRlKHZpZXc/OiBWaWV3KTogUHJvbWlzZTx2b2lkIHwge30+IHtcblx0XHRpZiAoQXBwU3RhdGVIYW5kbGVyLmdldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCkpKSB7XG5cdFx0XHRBcHBTdGF0ZUhhbmRsZXIuc2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZCh0aGlzLm9BcHBDb21wb25lbnQuZ2V0SWQoKSwgZmFsc2UpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB2aWV3Py5nZXRJZCgpO1xuXHRcdGlmICghdGhpcy5vQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkuQXBwU3RhdGUgfHwgQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLCB2aWV3SWQpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2hlY2tJZkxhc3RTZWVuUmVjb3JkID0gdGhpcy5fY2hlY2tJZkxhc3RTZWVuUmVjb3JkKHZpZXcpO1xuXHRcdGlmIChjaGVja0lmTGFzdFNlZW5SZWNvcmQgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Ly8gbG9jayB0aGUgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcywgdmlld0lkKTtcblx0XHQvLyBsb2NrIHRoZSBBcHAgU3RhdGUgaGFuZGxlciwgdXNlZCB0byBhdm9pZCBhIGNyZWF0aW9uIG9mIGFwcCBzdGF0ZSBkdXJpbmcgYXBwbHlcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcyk7XG5cdFx0Ly8gRG9uZSBmb3IgYnVzeSBpbmRpY2F0b3Jcblx0XHRCdXN5TG9ja2VyLmxvY2sodGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdC8vIFRPRE8gb05hdmlnYXRpb25TZXJ2aWNlLnBhcnNlTmF2aWdhdGlvbigpIHNob3VsZCByZXR1cm4gRVM2IHByb21pc2UgaW5zdGVhZCBqUXVlcnkucHJvbWlzZVxuXHRcdHJldHVybiB0b0VTNlByb21pc2U8dW5rbm93bltdPihvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkpXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGFFcnJvckRhdGE6IHVua25vd25bXSkge1xuXHRcdFx0XHRpZiAoIWFFcnJvckRhdGEpIHtcblx0XHRcdFx0XHRhRXJyb3JEYXRhID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0TG9nLndhcm5pbmcoXCJBUFBTVEFURTogUGFyc2UgTmF2aWdhdGlvbiBmYWlsZWRcIiwgYUVycm9yRGF0YVswXSBhcyBzdHJpbmcpO1xuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8qIGFwcCBkYXRhICovXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhRXJyb3JEYXRhWzFdLFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMl1cblx0XHRcdFx0XTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihhc3luYyAoYVJlc3VsdHM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGRvbmVcIik7XG5cblx0XHRcdFx0Ly8gYVJlc3VsdHNbMV0gPT4gb1N0YXJ0dXBQYXJhbWV0ZXJzIChub3QgZXZhbHVhdGVkKVxuXHRcdFx0XHRjb25zdCBvQXBwRGF0YSA9IChhUmVzdWx0c1swXSB8fCB7fSkgYXMgQXBwRGF0YSxcblx0XHRcdFx0XHRzTmF2VHlwZSA9IChhUmVzdWx0c1syXSBhcyBzdHJpbmcpIHx8IE5hdlR5cGUuaW5pdGlhbCxcblx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdC8vIGFwcGx5IHRoZSBhcHBzdGF0ZSBkZXBlbmRpbmcgdXBvbiB0aGUgdmlldyAoTFIvT1ApXG5cdFx0XHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IHRoaXMuX2dldEFwcFN0YXRlRGF0YShvQXBwRGF0YSwgdmlld0lkLCBzTmF2VHlwZSk7XG5cdFx0XHRcdC8vIGZldGNoIHRoZSBza2lwTWVyZ2UgZmxhZyBmcm9tIGFwcFN0YXRlIGZvciBzYXZlIGFzIHRpbGVcblx0XHRcdFx0Y29uc3Qgc2tpcE1lcmdlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gb0FwcERhdGE/LmFwcFN0YXRlPy5bU0tJUF9NRVJHRV9LRVldO1xuXHRcdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID1cblx0XHRcdFx0XHRzTmF2VHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgc05hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi5hcHBTdGF0ZURhdGEgfSA6IHt9O1xuXHRcdFx0XHRsZXQgc2hvdWxkQXBwbHlTdGF0ZSA9IHRydWU7XG5cblx0XHRcdFx0aWYgKCFvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB2aWV3U3RhdGUgZXh0ZW5zaW9uIHJlcXVpcmVkIGZvciBjb250cm9sbGVyICR7b1Jvb3RDb250cm9sbGVyLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9BcHBEYXRhLCBzTmF2VHlwZSkpIHtcblx0XHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzaG91bGRBcHBseVN0YXRlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYXBwbHlWaWV3U3RhdGUgPSBhd2FpdCBvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKFxuXHRcdFx0XHRcdHZpZXdJZCA/IGFwcFN0YXRlRGF0YSA6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUsXG5cdFx0XHRcdFx0dGhpcy5fY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGEsIHNOYXZUeXBlKSxcblx0XHRcdFx0XHRza2lwTWVyZ2Vcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKCFzaG91bGRBcHBseVN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBhcHBseVZpZXdTdGF0ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcImFwcFN0YXRlIGNvdWxkIG5vdCBiZSBhcHBsaWVkXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR0aHJvdyBvRXJyb3I7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQvLyB1bmxvY2sgYXBwbHkgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHZpZXdcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcywgdmlld0lkKTtcblx0XHRcdFx0Ly8gdW5sb2NrIHRoZSBhcHAgc3RhdGUgaGFuZGxlciwgc28gdGhhdCBhcHAgc3RhdGUgY3JlYXRpb24gY2FuIGhhcHBlbiBub3cuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHQvLyB1bmxvY2sgdGhlIFJvb3RDb250cm9sIHRvIHJlbW92ZSB0aGUgYnVzeSBpbmRpY2F0b3IuXG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIGNoZWNrIGlzIHJvdXRlIGlzIGNoYW5nZWQgYnkgY2hhbmdlIGluIHRoZSBpQVBQU3RhdGUuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcm91dGUgaGFzIGNobmFnZWRcblx0ICovXG5cdGNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuYk5vUm91dGVDaGFuZ2U7XG5cdH1cblxuXHQvKipcblx0ICogUmVzZXQgdGhlIHJvdXRlIGNoYW5nZWQgYnkgaUFQUFN0YXRlLlxuXHQgKi9cblx0cmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuYk5vUm91dGVDaGFuZ2UpIHtcblx0XHRcdHRoaXMuYk5vUm91dGVDaGFuZ2UgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXNldCBhbGwgYWN0aXZhdGlvbiBzdGF0dXNlcyBpbiBBcHBTdGF0ZUhhbmRsZXIudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0c3RhdGljIHJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBpZCBpbiB0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKSB7XG5cdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXMsIGlkKSkge1xuXHRcdFx0XHR0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzW2lkXSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBnbG9iYWxcbiAqL1xuZXhwb3J0IGRlZmF1bHQgQXBwU3RhdGVIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztFQWlCQSxNQUFNQSxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0QsT0FBTztFQWMvQixNQUFNRSxjQUFjLEdBQUcsV0FBVztFQW9CbEMsTUFBTUMseUJBQXlCLEdBQUcsMkJBQTJCO0VBQUMsSUFHeERDLGVBQWUsSUFBQUMsSUFBQSxHQURwQkMsY0FBYyxDQUFDLDZCQUE2QixDQUFDLEVBQUFELElBQUEsQ0FBQUUsTUFBQSxJQUFBQyxnQkFBQSwwQkFBQUMsV0FBQTtJQWM3QyxTQUFBTCxnQkFBWU0sYUFBMkIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDeENBLEtBQUEsR0FBQUYsV0FBQSxDQUFBRyxJQUFBLEtBQU0sQ0FBQztNQUFDRCxLQUFBLENBUERFLGlCQUFpQixHQUFjLENBQUMsQ0FBQztNQVF4Q0YsS0FBQSxDQUFLRCxhQUFhLEdBQUdBLGFBQWE7TUFDbENDLEtBQUEsQ0FBS0csR0FBRyxHQUFHLEdBQUdKLGFBQWEsQ0FBQ0ssS0FBSyxDQUFDLENBQUMsa0JBQWtCO01BQ3JESixLQUFBLENBQUtLLHlCQUF5QixHQUFHLENBQUMsQ0FBQztNQUNuQ0wsS0FBQSxD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
@@ -12,6 +12,7 @@ import BaseObject from "sap/ui/base/Object";
12
12
  import type View from "sap/ui/core/mvc/View";
13
13
  import type Context from "sap/ui/model/odata/v4/Context";
14
14
  import BusyLocker from "./controllerextensions/BusyLocker";
15
+ import type { HiddenDraft } from "./converters/ManifestSettings";
15
16
  import ModelHelper from "./helpers/ModelHelper";
16
17
 
17
18
  const NavType = library.NavType;
@@ -106,10 +107,12 @@ class AppStateHandler extends BaseObject {
106
107
  routerProxy = appComponent.getRouterProxy(),
107
108
  hash = routerProxy.getHash(),
108
109
  isStickyMode = ModelHelper.isStickySessionSupported(appComponent.getMetaModel()),
110
+ isHiddenDraftEnabled =
111
+ (this.oAppComponent.getEnvironmentCapabilities().getCapabilities().HiddenDraft as HiddenDraft)?.enabled || false,
109
112
  newHash = navigationService.replaceInnerAppStateKey(routerProxy.getHash(), appStateKey);
110
113
 
111
114
  if (newHash && this.simultaneousCreateRequest[stateIdentifier] === 0 && newHash !== hash) {
112
- routerProxy.navToHash(newHash, undefined, undefined, undefined, !isStickyMode);
115
+ routerProxy.navToHash(newHash, undefined, undefined, undefined, isStickyMode || isHiddenDraftEnabled);
113
116
  this.bNoRouteChange = true;
114
117
  }
115
118
  Log.info("APPSTATE: navToHash");
@@ -282,24 +285,25 @@ class AppStateHandler extends BaseObject {
282
285
  }
283
286
  }
284
287
  if (appStateData?.appState) {
285
- return {
286
- [Object.keys(appStateData.appState)[i]]: appStateData.appState[key] || {}
287
- };
288
+ return key
289
+ ? {
290
+ [Object.keys(appStateData.appState)[i]]: appStateData.appState[key] || {}
291
+ }
292
+ : {};
288
293
  }
289
294
  }
290
295
 
291
296
  /**
292
297
  * Applies an appstate by fetching appdata and passing it to _applyAppstateToPage.
293
- * @param viewId
294
- * @param view
298
+ * @param view The view for which the app state must be applied. If no view is provided, then app state of all the views is applied.
295
299
  * @returns A promise for async handling
296
300
  */
297
- async applyAppState(viewId?: string, view?: View): Promise<void | {}> {
301
+ async applyAppState(view?: View): Promise<void | {}> {
298
302
  if (AppStateHandler.getRTAVersionWasActivated(this.oAppComponent.getId())) {
299
303
  AppStateHandler.setRTAVersionWasActivated(this.oAppComponent.getId(), false);
300
304
  return Promise.resolve();
301
305
  }
302
-
306
+ const viewId = view?.getId();
303
307
  if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this, viewId)) {
304
308
  return Promise.resolve();
305
309
  }
@@ -355,7 +359,7 @@ class AppStateHandler extends BaseObject {
355
359
  shouldApplyState = false;
356
360
  }
357
361
  const applyViewState = await oRootController.viewState.applyViewState(
358
- this._mCurrentAppState as Record<string, unknown>,
362
+ viewId ? appStateData : this._mCurrentAppState,
359
363
  this._createNavigationParameters(oAppData, sNavType),
360
364
  skipMerge
361
365
  );
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/ui/core/mvc/Controller"], function (ClassSupport, CommonUtils, Controller) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _class, _class2;
8
+ var _dec, _dec2, _dec3, _class, _class2;
9
9
  var publicExtension = ClassSupport.publicExtension;
10
10
  var defineUI5Class = ClassSupport.defineUI5Class;
11
11
  function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
@@ -19,7 +19,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/ui/co
19
19
  * @public
20
20
  * @since 1.90.0
21
21
  */
22
- let BaseController = (_dec = defineUI5Class("sap.fe.core.BaseController"), _dec2 = publicExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_Controller) {
22
+ let BaseController = (_dec = defineUI5Class("sap.fe.core.BaseController"), _dec2 = publicExtension(), _dec3 = publicExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_Controller) {
23
23
  function BaseController() {
24
24
  return _Controller.apply(this, arguments) || this;
25
25
  }
@@ -36,6 +36,9 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/ui/co
36
36
  this._oAppComponent = CommonUtils.getAppComponent(this.getView());
37
37
  }
38
38
  return this._oAppComponent;
39
+ };
40
+ _proto.getOwnerComponent = function getOwnerComponent() {
41
+ return _Controller.prototype.getOwnerComponent.call(this);
39
42
  }
40
43
 
41
44
  /**
@@ -45,7 +48,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/ui/co
45
48
  * @returns The model instance
46
49
  */;
47
50
  _proto.getModel = function getModel(sName) {
48
- return this.getView().getModel(sName);
51
+ return this.getView().getModel(sName) ?? this.getOwnerComponent().getModel(sName);
49
52
  }
50
53
 
51
54
  /**
@@ -65,7 +68,7 @@ sap.ui.define(["sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/ui/co
65
68
  return this.getAppComponent().getModel(sI18nModelName).getResourceBundle();
66
69
  };
67
70
  return BaseController;
68
- }(Controller), _applyDecoratedDescriptor(_class2.prototype, "getAppComponent", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "getAppComponent"), _class2.prototype), _class2)) || _class);
71
+ }(Controller), _applyDecoratedDescriptor(_class2.prototype, "getAppComponent", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "getAppComponent"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getOwnerComponent", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "getOwnerComponent"), _class2.prototype), _class2)) || _class);
69
72
  return BaseController;
70
73
  }, false);
71
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHVibGljRXh0ZW5zaW9uIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sbGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEFwcENvbXBvbmVudCIsIl9vQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJzTmFtZSIsInNldE1vZGVsIiwib01vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJzSTE4bk1vZGVsTmFtZSIsIkNvbnRyb2xsZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCYXNlQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbi8qKlxuICogSW50ZXJuYWwgYmFzZSBjb250cm9sbGVyIGNsYXNzIGZvciBTQVAgRmlvcmkgZWxlbWVudHMgYXBwbGljYXRpb24uXG4gKlxuICogSWYgeW91IHdhbnQgdG8gZXh0ZW5kIGEgYmFzZSBjb250cm9sbGVyIGZvciB5b3VyIGN1c3RvbSBwYWdlLCBwbGVhc2UgdXNlIGZvciBzYXAuZmUuY29yZS5QYWdlQ29udHJvbGxlci5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjkwLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIEJhc2VDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XG5cdHByaXZhdGUgX29BcHBDb21wb25lbnQ/OiBBcHBDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgYXBwIGNvbXBvbmVudC5cblx0ICogQHJldHVybnMgVGhlIGFwcCBjb21wb25lbnQgb3IsIGlmIG5vdCBmb3VuZCwgbnVsbFxuXHQgKiBAcHVibGljXG5cdCAqIEBzaW5jZSAxLjkxLjBcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRnZXRBcHBDb21wb25lbnQoKTogQXBwQ29tcG9uZW50IHtcblx0XHRpZiAoIXRoaXMuX29BcHBDb21wb25lbnQpIHtcblx0XHRcdHRoaXMuX29BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fb0FwcENvbXBvbmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHRvIGVuYWJsZSBhcHBsaWNhdGlvbnMgdG8gaW5jbHVkZSB0aGUgdmlldyBtb2RlbCBieSBuYW1lIGludG8gZWFjaCBjb250cm9sbGVyLlxuXHQgKiBAcHVibGljXG5cdCAqIEBwYXJhbSBzTmFtZSBUaGUgbW9kZWwgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgbW9kZWwgaW5zdGFuY2Vcblx0ICovXG5cdGdldE1vZGVsKHNOYW1lPzogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChzTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBzZXR0aW5nIHRoZSB2aWV3IG1vZGVsIGluIGV2ZXJ5IGNvbnRyb2xsZXIgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqIEBwYXJhbSBvTW9kZWwgVGhlIG1vZGVsIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBzTmFtZSBUaGUgbW9kZWwgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgdmlldyBpbnN0YW5jZVxuXHQgKi9cblx0c2V0TW9kZWwob01vZGVsOiBNb2RlbCwgc05hbWU6IHN0cmluZyk6IFZpZXcge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5zZXRNb2RlbChvTW9kZWwsIHNOYW1lKTtcblx0fVxuXG5cdGdldFJlc291cmNlQnVuZGxlKHNJMThuTW9kZWxOYW1lOiBzdHJpbmcpOiBSZXNvdXJjZUJ1bmRsZSB8IFByb21pc2U8UmVzb3VyY2VCdW5kbGU+IHtcblx0XHRpZiAoIXNJMThuTW9kZWxOYW1lKSB7XG5cdFx0XHRzSTE4bk1vZGVsTmFtZSA9IFwiaTE4blwiO1xuXHRcdH1cblx0XHRyZXR1cm4gKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoc0kxOG5Nb2RlbE5hbWUpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cbn1cbmV4cG9ydCB0eXBlIEZFVmlldyA9IHtcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCIpOiBSZXNvdXJjZU1vZGVsO1xuXHRnZXRNb2RlbChtb2RlbE5hbWU6IFwidWlcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobW9kZWxOYW1lOiBcImludGVybmFsXCIpOiBKU09OTW9kZWw7XG5cdGdldE1vZGVsKG1vZGVsTmFtZTogXCJfcGFnZU1vZGVsXCIpOiBKU09OTW9kZWw7XG5cdGdldE1vZGVsKG1vZGVsTmFtZTogXCJmY2xoZWxwZXJcIik6IEpTT05Nb2RlbDtcblx0Z2V0Q29udHJvbGxlcigpOiBQYWdlQ29udHJvbGxlcjtcblx0Z2V0QmluZGluZ0NvbnRleHQoKTogT0RhdGFWNENvbnRleHQ7XG5cdGdldFZpZXdEYXRhKCk6IFZpZXdEYXRhO1xufSAmIFZpZXc7XG5cbmludGVyZmFjZSBCYXNlQ29udHJvbGxlciB7XG5cdGdldE93bmVyQ29tcG9uZW50KCk6IFRlbXBsYXRlQ29tcG9uZW50O1xuXHRnZXRNb2RlbCgpOiBPRGF0YU1vZGVsO1xuXHRnZXRNb2RlbChtb2RlbE5hbWU6IFwidWlcIik6IEpTT05Nb2RlbDtcblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHZpZXcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udHJvbGxlci5cblx0ICogQHJldHVybnMgVmlldyBjb25uZWN0ZWQgdG8gdGhpcyBjb250cm9sbGVyLlxuXHQgKi9cblx0Z2V0VmlldygpOiBGRVZpZXc7XG59XG5leHBvcnQgZGVmYXVsdCBCYXNlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFQQSxJQVNNQSxjQUFjLElBQUFDLElBQUEsR0FEbkJDLGNBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFBQyxLQUFBLEdBVTNDQyxlQUFlLENBQUMsQ0FBQyxFQUFBSCxJQUFBLENBQUFJLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsV0FBQTtJQUFBLFNBQUFQLGVBQUE7TUFBQSxPQUFBTyxXQUFBLENBQUFDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0lBQUFDLGNBQUEsQ0FBQVYsY0FBQSxFQUFBTyxXQUFBO0lBQUEsSUFBQUksTUFBQSxHQUFBWCxjQUFBLENBQUFZLFNBQUE7SUFObEI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTENELE1BQUEsQ0FPQUUsZUFBZSxHQURmLFNBQ0FBLGVBQWVBLENBQUEsRUFBaUI7TUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQ0MsY0FBYyxFQUFFO1FBQ3pCLElBQUksQ0FBQ0EsY0FBYyxHQUFHQyxXQUFXLENBQUNGLGVBQWUsQ0FBQyxJQUFJLENBQUNHLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDbEU7TUFDQSxPQUFPLElBQUksQ0FBQ0YsY0FBYztJQUMzQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBSCxNQUFBLENBTUFNLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDQyxLQUFjLEVBQXFCO01BQzNDLE9BQU8sSUFBSSxDQUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUNDLEtBQUssQ0FBQztJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFQLE1BQUEsQ0FPQVEsUUFBUSxHQUFSLFNBQUFBLFFBQVFBLENBQUNDLE1BQWEsRUFBRUYsS0FBYSxFQUFRO01BQzVDLE9BQU8sSUFBSSxDQUFDRixPQUFPLENBQUMsQ0FBQyxDQUFDRyxRQUFRLENBQUNDLE1BQU0sRUFBRUYsS0FBSyxDQUFDO0lBQzlDLENBQUM7SUFBQVAsTUFBQSxDQUVEVSxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFDQyxjQUFzQixFQUE0QztNQUNuRixJQUFJLENBQUNBLGNBQWMsRUFBRTtRQUNwQkEsY0FBYyxHQUFHLE1BQU07TUFDeEI7TUFDQSxPQUFRLElBQUksQ0FBQ1QsZUFBZSxDQUFDLENBQUMsQ0FBQ0ksUUFBUSxDQUFDSyxjQUFjLENBQUMsQ0FBbUJELGlCQUFpQixDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUFBLE9BQUFyQixjQUFBO0VBQUEsRUEzQzJCdUIsVUFBVSxHQUFBQyx5QkFBQSxDQUFBbEIsT0FBQSxDQUFBTSxTQUFBLHNCQUFBVCxLQUFBLEdBQUFzQixNQUFBLENBQUFDLHdCQUFBLENBQUFwQixPQUFBLENBQUFNLFNBQUEsc0JBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBTixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQW1FeEJMLGNBQWM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
74
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlQ29udHJvbGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHVibGljRXh0ZW5zaW9uIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXIiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0QXBwQ29tcG9uZW50IiwiX29BcHBDb21wb25lbnQiLCJDb21tb25VdGlscyIsImdldFZpZXciLCJnZXRPd25lckNvbXBvbmVudCIsImNhbGwiLCJnZXRNb2RlbCIsInNOYW1lIiwic2V0TW9kZWwiLCJvTW9kZWwiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsInNJMThuTW9kZWxOYW1lIiwiQ29udHJvbGxlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJhc2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBiYXNlIGNvbnRyb2xsZXIgY2xhc3MgZm9yIFNBUCBGaW9yaSBlbGVtZW50cyBhcHBsaWNhdGlvbi5cbiAqXG4gKiBJZiB5b3Ugd2FudCB0byBleHRlbmQgYSBiYXNlIGNvbnRyb2xsZXIgZm9yIHlvdXIgY3VzdG9tIHBhZ2UsIHBsZWFzZSB1c2UgZm9yIHNhcC5mZS5jb3JlLlBhZ2VDb250cm9sbGVyLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuOTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5CYXNlQ29udHJvbGxlclwiKVxuY2xhc3MgQmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudD86IEFwcENvbXBvbmVudDtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBhcHAgY29tcG9uZW50LlxuXHQgKiBAcmV0dXJucyBUaGUgYXBwIGNvbXBvbmVudCBvciwgaWYgbm90IGZvdW5kLCBudWxsXG5cdCAqIEBwdWJsaWNcblx0ICogQHNpbmNlIDEuOTEuMFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGdldEFwcENvbXBvbmVudCgpOiBBcHBDb21wb25lbnQge1xuXHRcdGlmICghdGhpcy5fb0FwcENvbXBvbmVudCkge1xuXHRcdFx0dGhpcy5fb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9vQXBwQ29tcG9uZW50O1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdGdldE93bmVyQ29tcG9uZW50KCk6IFRlbXBsYXRlQ29tcG9uZW50IHtcblx0XHRyZXR1cm4gc3VwZXIuZ2V0T3duZXJDb21wb25lbnQoKSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHRvIGVuYWJsZSBhcHBsaWNhdGlvbnMgdG8gaW5jbHVkZSB0aGUgdmlldyBtb2RlbCBieSBuYW1lIGludG8gZWFjaCBjb250cm9sbGVyLlxuXHQgKiBAcHVibGljXG5cdCAqIEBwYXJhbSBzTmFtZSBUaGUgbW9kZWwgbmFtZVxuXHQgKiBAcmV0dXJucyBUaGUgbW9kZWwgaW5zdGFuY2Vcblx0ICovXG5cdGdldE1vZGVsKHNOYW1lPzogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChzTmFtZSkgPz8gdGhpcy5nZXRPd25lckNvbXBvbmVudCgpLmdldE1vZGVsKHNOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIHNldHRpbmcgdGhlIHZpZXcgbW9kZWwgaW4gZXZlcnkgY29udHJvbGxlciBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICogQHBhcmFtIG9Nb2RlbCBUaGUgbW9kZWwgaW5zdGFuY2Vcblx0ICogQHBhcmFtIHNOYW1lIFRoZSBtb2RlbCBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSB2aWV3IGluc3RhbmNlXG5cdCAqL1xuXHRzZXRNb2RlbChvTW9kZWw6IE1vZGVsLCBzTmFtZTogc3RyaW5nKTogVmlldyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLnNldE1vZGVsKG9Nb2RlbCwgc05hbWUpO1xuXHR9XG5cblx0Z2V0UmVzb3VyY2VCdW5kbGUoc0kxOG5Nb2RlbE5hbWU6IHN0cmluZyk6IFJlc291cmNlQnVuZGxlIHwgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4ge1xuXHRcdGlmICghc0kxOG5Nb2RlbE5hbWUpIHtcblx0XHRcdHNJMThuTW9kZWxOYW1lID0gXCJpMThuXCI7XG5cdFx0fVxuXHRcdHJldHVybiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNb2RlbChzSTE4bk1vZGVsTmFtZSkgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0fVxufVxuZXhwb3J0IHR5cGUgRkVWaWV3ID0ge1xuXHRnZXRNb2RlbCgpOiBPRGF0YU1vZGVsO1xuXHRnZXRNb2RlbChtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIik6IFJlc291cmNlTW9kZWw7XG5cdGdldE1vZGVsKG1vZGVsTmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChtb2RlbE5hbWU6IFwiaW50ZXJuYWxcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobW9kZWxOYW1lOiBcIl9wYWdlTW9kZWxcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobW9kZWxOYW1lOiBcImZjbGhlbHBlclwiKTogSlNPTk1vZGVsO1xuXHRnZXRDb250cm9sbGVyKCk6IFBhZ2VDb250cm9sbGVyO1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpOiBPRGF0YVY0Q29udGV4dDtcblx0Z2V0Vmlld0RhdGEoKTogVmlld0RhdGE7XG59ICYgVmlldztcblxuaW50ZXJmYWNlIEJhc2VDb250cm9sbGVyIHtcblx0Z2V0T3duZXJDb21wb25lbnQoKTogVGVtcGxhdGVDb21wb25lbnQ7XG5cdGdldE1vZGVsKCk6IE9EYXRhTW9kZWw7XG5cdGdldE1vZGVsKG1vZGVsTmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdmlldyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyBWaWV3IGNvbm5lY3RlZCB0byB0aGlzIGNvbnRyb2xsZXIuXG5cdCAqL1xuXHRnZXRWaWV3KCk6IEZFVmlldztcbn1cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBLElBU01BLGNBQWMsSUFBQUMsSUFBQSxHQURuQkMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLEVBQUFDLEtBQUEsR0FVM0NDLGVBQWUsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRakJELGVBQWUsQ0FBQyxDQUFDLEVBQUFILElBQUEsQ0FBQUssTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxXQUFBO0lBQUEsU0FBQVIsZUFBQTtNQUFBLE9BQUFRLFdBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsY0FBQSxDQUFBWCxjQUFBLEVBQUFRLFdBQUE7SUFBQSxJQUFBSSxNQUFBLEdBQUFaLGNBQUEsQ0FBQWEsU0FBQTtJQWRsQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMQ0QsTUFBQSxDQU9BRSxlQUFlLEdBRGYsU0FDQUEsZUFBZUEsQ0FBQSxFQUFpQjtNQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDQyxjQUFjLEVBQUU7UUFDekIsSUFBSSxDQUFDQSxjQUFjLEdBQUdDLFdBQVcsQ0FBQ0YsZUFBZSxDQUFDLElBQUksQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQztNQUNsRTtNQUNBLE9BQU8sSUFBSSxDQUFDRixjQUFjO0lBQzNCLENBQUM7SUFBQUgsTUFBQSxDQUdETSxpQkFBaUIsR0FEakIsU0FDQUEsaUJBQWlCQSxDQUFBLEVBQXNCO01BQ3RDLE9BQUFWLFdBQUEsQ0FBQUssU0FBQSxDQUFhSyxpQkFBaUIsQ0FBQUMsSUFBQTtJQUMvQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBUCxNQUFBLENBTUFRLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDQyxLQUFjLEVBQXFCO01BQzNDLE9BQU8sSUFBSSxDQUFDSixPQUFPLENBQUMsQ0FBQyxDQUFDRyxRQUFRLENBQUNDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQ0gsaUJBQWlCLENBQUMsQ0FBQyxDQUFDRSxRQUFRLENBQUNDLEtBQUssQ0FBQztJQUNsRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFULE1BQUEsQ0FPQVUsUUFBUSxHQUFSLFNBQUFBLFFBQVFBLENBQUNDLE1BQWEsRUFBRUYsS0FBYSxFQUFRO01BQzVDLE9BQU8sSUFBSSxDQUFDSixPQUFPLENBQUMsQ0FBQyxDQUFDSyxRQUFRLENBQUNDLE1BQU0sRUFBRUYsS0FBSyxDQUFDO0lBQzlDLENBQUM7SUFBQVQsTUFBQSxDQUVEWSxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFDQyxjQUFzQixFQUE0QztNQUNuRixJQUFJLENBQUNBLGNBQWMsRUFBRTtRQUNwQkEsY0FBYyxHQUFHLE1BQU07TUFDeEI7TUFDQSxPQUFRLElBQUksQ0FBQ1gsZUFBZSxDQUFDLENBQUMsQ0FBQ00sUUFBUSxDQUFDSyxjQUFjLENBQUMsQ0FBbUJELGlCQUFpQixDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUFBLE9BQUF4QixjQUFBO0VBQUEsRUFoRDJCMEIsVUFBVSxHQUFBQyx5QkFBQSxDQUFBcEIsT0FBQSxDQUFBTSxTQUFBLHNCQUFBVixLQUFBLEdBQUF5QixNQUFBLENBQUFDLHdCQUFBLENBQUF0QixPQUFBLENBQUFNLFNBQUEsc0JBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBYyx5QkFBQSxDQUFBcEIsT0FBQSxDQUFBTSxTQUFBLHdCQUFBUixLQUFBLEdBQUF1QixNQUFBLENBQUFDLHdCQUFBLENBQUF0QixPQUFBLENBQUFNLFNBQUEsd0JBQUFOLE9BQUEsQ0FBQU0sU0FBQSxHQUFBTixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQXdFeEJOLGNBQWM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -39,6 +39,11 @@ class BaseController extends Controller {
39
39
  return this._oAppComponent;
40
40
  }
41
41
 
42
+ @publicExtension()
43
+ getOwnerComponent(): TemplateComponent {
44
+ return super.getOwnerComponent() as TemplateComponent;
45
+ }
46
+
42
47
  /**
43
48
  * Convenience method provided by SAP Fiori elements to enable applications to include the view model by name into each controller.
44
49
  * @public
@@ -46,7 +51,7 @@ class BaseController extends Controller {
46
51
  * @returns The model instance
47
52
  */
48
53
  getModel(sName?: string): Model | undefined {
49
- return this.getView().getModel(sName);
54
+ return this.getView().getModel(sName) ?? this.getOwnerComponent().getModel(sName);
50
55
  }
51
56
 
52
57
  /**