@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
@@ -7,6 +7,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
7
7
 
8
8
  var _exports = {};
9
9
  var getTableID = ID.getTableID;
10
+ var getPageVariantManagementID = ID.getPageVariantManagementID;
10
11
  var getIconTabBarID = ID.getIconTabBarID;
11
12
  var getFilterVariantManagementID = ID.getFilterVariantManagementID;
12
13
  var getFilterBarID = ID.getFilterBarID;
@@ -32,6 +33,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
32
33
  var getManifestFilterFields = FilterBar.getManifestFilterFields;
33
34
  var getFilterBarHideBasicSearch = FilterBar.getFilterBarHideBasicSearch;
34
35
  var getActionsFromManifest = Action.getActionsFromManifest;
36
+ var addSeparators = Action.addSeparators;
35
37
  var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
36
38
  var compileExpression = BindingToolkit.compileExpression;
37
39
  var ViewSettingsType = /*#__PURE__*/function (ViewSettingsType) {
@@ -533,9 +535,13 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
533
535
  }
534
536
  const getHeaderActions = function (converterContext) {
535
537
  const manifestWrapper = converterContext.getManifestWrapper();
536
- const headerActions = insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext).actions);
538
+ let headerActions = insertCustomElements([], getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext).actions);
537
539
  // Apply primary action overflow protection
538
- return ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions);
540
+ headerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions);
541
+ // Add toolbar separators in case of grouped actions
542
+ const overflowGroupsConfig = manifestWrapper.getHeaderOverflowGroups();
543
+ headerActions = addSeparators(headerActions, overflowGroupsConfig);
544
+ return headerActions;
539
545
  };
540
546
 
541
547
  /**
@@ -581,6 +587,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
581
587
  const dynamicListReportId = getDynamicListReportID();
582
588
  const filterBarId = getFilterBarID(sContextPath);
583
589
  const filterVariantManagementID = getFilterVariantManagementID(filterBarId);
590
+ const pageVariantManagementID = getPageVariantManagementID();
584
591
  const fbConfig = manifestWrapper.getFilterConfiguration();
585
592
  const filterInitialLayout = fbConfig?.initialLayout !== undefined ? fbConfig?.initialLayout.toLowerCase() : "compact";
586
593
  const filterLayout = fbConfig?.layout !== undefined ? fbConfig?.layout.toLowerCase() : "compact";
@@ -648,6 +655,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
648
655
  },
649
656
  variantManagement: {
650
657
  id: filterVariantManagementID,
658
+ pageId: pageVariantManagementID,
651
659
  targetControlIds: targetControlIds.join(",")
652
660
  },
653
661
  hasMultiVisualizations: hasMultiVisualizations(converterContext),
@@ -682,4 +690,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/controls/Co
682
690
  }
683
691
  return _exports;
684
692
  }, false);
685
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3U2V0dGluZ3NUeXBlIiwiVmlld0RlZmluaXRpb25UeXBlIiwiaXNWaWV3U2V0dGluZ3NPZlR5cGUiLCJwb3RlbnRpYWxWaWV3U2V0dGluZ3MiLCJ0eXBlIiwiaXNWaWV3RGVmaW5pdGlvbk9mVHlwZSIsInBvdGVudGlhbFZpZXdEZWZpbml0aW9uIiwidmlld1R5cGUiLCJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsIkN1c3RvbSIsInZpc3VhbGl6YXRpb25zIiwiQ29tYmluZWQiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNBTFAiLCJhbm5vdGF0aW9uUGF0aCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJlcnJvck1lc3NhZ2VGb3JBTFAiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJ1bmRlZmluZWQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImFubm90YXRpb25zIiwiVUkiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJjcmVhdGVBbHBWaWV3IiwicHJlc2VudGF0aW9ucyIsImRlZmF1bHRQYXRoIiwidmlld1NldHRpbmdzIiwiY3JlYXRlQWxwVmlzdWFsaXphdGlvbiIsInRhYmxlQ29udHJvbElkIiwiYW5ub3RhdGlvbiIsImlkIiwiY2hhcnRDb250cm9sSWQiLCJ2aXNpYmxlIiwiTXVsdGkiLCJjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyIsInRhYmxlSWQiLCJnZXRWaWV3Q29udHJvbCIsImJhc2VTZXR0aW5ncyIsInRpdGxlIiwiZ2V0Vmlld1RpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCIsIlNpbmdsZVRhYmxlIiwiU2luZ2xlQ2hhcnQiLCJpc1ByaW1hcnkiLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJmaW5kIiwibWVzc2FnZUluZm8iLCJnZXRBbHBQcmVzZW50YXRpb24iLCJpdGVtIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInRhcmdldEFubm90YXRpb24iLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImNvbmZpZ3VyZU11bHRpVmlld3MiLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbiIsImdldFRhYmxlSUQiLCJrZXkiLCJhcGlJZCIsImdlbmVyYXRlIiwiZ2V0Q2hhcnRJRCIsIm11bHRpVmlld3MiLCJnZXRDdXN0b21WaWV3IiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsInZpc3VhbGl6YXRpb25UeXBlIiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZWxlY3Rpb25WYXJpYW50Iiwic3BsaXQiLCJnZXRWaWV3VmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaWV3IiwibXVsdGlWaWV3U2V0dGluZ3MiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJpc01hY3JvT3JNdWx0aXBsZVZpZXciLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwiaW5NdWx0aVZpZXciLCJnZXRWaWV3cyIsIm11bHRpcGxlVmlld0NvbmZpZyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwibWFuaWZlc3RXcmFwcGVyIiwicGF0aCIsImlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbiIsImlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwidGVybSIsImNyZWF0ZUFscFZpZXdTZXR0aW5ncyIsIkRlZmF1bHQiLCJtYXAiLCJ2aWV3Q29udmVydGVyQ29uZmlnIiwiZ2V0TXVsdGlWaWV3c0NvbnRyb2wiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpVmlzdWFsaXphdGlvbnMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsImdldEljb25UYWJCYXJJRCIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaGVhZGVyQWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImFjdGlvbnMiLCJBY3Rpb25VdGlsaXRpZXMiLCJlbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MiLCJfZXhwb3J0cyIsImNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCIsImZpbHRlckJhcklkIiwidmlzdWFsaXphdGlvbkRlZmluaXRpb24iLCJmaWx0ZXJJZCIsImNvbnZlcnRQYWdlIiwiY2FwYWJpbGl0aWVzIiwic0NvbnRleHRQYXRoIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZHluYW1pY0xpc3RSZXBvcnRJZCIsImdldER5bmFtaWNMaXN0UmVwb3J0SUQiLCJnZXRGaWx0ZXJCYXJJRCIsImZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZmJDb25maWciLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVySW5pdGlhbExheW91dCIsImluaXRpYWxMYXlvdXQiLCJ0b0xvd2VyQ2FzZSIsImZpbHRlckxheW91dCIsImxheW91dCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwic2hvd0NsZWFyQnV0dG9uIiwiY29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ1c2VIaWRkZW5GaWx0ZXJCYXIiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoIiwibXVsdGlWaWV3Q29udHJvbCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJ0YXJnZXRDb250cm9sSWRzIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwic3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIiLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXIiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJldmVyeSIsInRhYmxlVmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImNvbGxlY3Rpb24iLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJtdWx0aVZpZXdzQ29udHJvbCIsImVhc3lGaWx0ZXJFbmFibGVkIiwiTWFnaWNGaWx0ZXJpbmciLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm8iLCJzaG93RHJhZnRFZGl0U3RhdHVzIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiLCJjb2xsYXBzZWRIZWFkZXJGcmFnbWVudCIsImdldENvbGxhcHNlZEhlYWRlckZyYWdtZW50IiwiZXhwYW5kZWRIZWFkZXJGcmFnbWVudCIsImdldEV4cGFuZGVkSGVhZGVyRnJhZ21lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCwgRmlsdGVyRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0Z2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzLFxuXHRzaG93RHJhZnRFZGl0U3RhdHVzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgQWN0aW9uVXRpbGl0aWVzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0FjdGlvblV0aWxpdGllc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbWJpbmVkVmlld0RlZmF1bHRQYXRoLFxuXHREZWZhdWx0T3BlcmF0b3IsXG5cdEhpZGRlbkRyYWZ0LFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBLUElEZWZpbml0aW9uIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IGdldEtQSURlZmluaXRpb25zIH0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7XG5cdGdldENoYXJ0SUQsXG5cdGdldEN1c3RvbVRhYklELFxuXHRnZXREeW5hbWljTGlzdFJlcG9ydElELFxuXHRnZXRGaWx0ZXJCYXJJRCxcblx0Z2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0Z2V0SWNvblRhYkJhcklELFxuXHRnZXRUYWJsZUlEXG59IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5cbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHR0YXJnZXRDb250cm9sSWRzOiBzdHJpbmc7XG59O1xuXG5lbnVtIFZpZXdTZXR0aW5nc1R5cGUge1xuXHRNdWx0aSA9IFwiTXVsdGlcIixcblx0Q29tYmluZWQgPSBcIkNvbWJpbmVkXCIsXG5cdEN1c3RvbSA9IFwiQ3VzdG9tXCIsXG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIlxufVxuXG50eXBlIENvbWJpbmVkVmlld1NldHRpbmdzID0ge1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD47XG5cdHByaW1hcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdO1xuXHRzZWNvbmRhcnk6IFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbltdO1xuXHRkZWZhdWx0UGF0aD86IENvbWJpbmVkVmlld0RlZmF1bHRQYXRoO1xuXHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkO1xufTtcbnR5cGUgQ3VzdG9tVmlld1NldHRpbmdzID0ge1xuXHRrZXk/OiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xuXHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkN1c3RvbTtcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgTXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzID0ge1xuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD47XG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50VHlwZTtcblx0YW5ub3RhdGlvbj86IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBDaGFydDtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0a2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uPzogYm9vbGVhbjtcblx0a2V5Pzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLk11bHRpO1xufTtcbnR5cGUgRGVmYXVsdFZpZXdTZXR0aW5ncyA9IHtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xuXHRhbm5vdGF0aW9uPzogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5EZWZhdWx0O1xufTtcblxudHlwZSBWaWV3Q29udmVydGVyU2V0dGluZ3MgPSBEZWZhdWx0Vmlld1NldHRpbmdzIHwgQ29tYmluZWRWaWV3U2V0dGluZ3MgfCBNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3MgfCBDdXN0b21WaWV3U2V0dGluZ3M7XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG50eXBlIE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47XG59O1xudHlwZSBMclZpc3VhbGl6YXRpb25UeXBlPFQ+ID0gVCBleHRlbmRzIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlID8gVGFibGVWaXN1YWxpemF0aW9uIHwgdW5kZWZpbmVkIDogQ2hhcnRWaXN1YWxpemF0aW9uIHwgdW5kZWZpbmVkO1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiA9IHtcblx0bWFpbkVudGl0eVNldDogc3RyaW5nO1xuXHRtYWluRW50aXR5VHlwZTogc3RyaW5nOyAvLyBlbnRpdHlUeXBlPiBhdCB0aGUgc3RhcnQgb2YgTFIgdGVtcGxhdGluZ1xuXHRzaW5nbGVUYWJsZUlkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0c2luZ2xlQ2hhcnRJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdGR5bmFtaWNMaXN0UmVwb3J0SWQ6IHN0cmluZztcblx0c3RpY2t5U3ViaGVhZGVyUHJvdmlkZXI/OiBzdHJpbmc7XG5cdG11bHRpVmlld3NDb250cm9sPzogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRoZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGVhc3lGaWx0ZXJFbmFibGVkPzogYm9vbGVhbjtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBzdHJpbmc7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0XHRzaG93Q2xlYXJCdXR0b24/OiBib29sZWFuO1xuXHRcdGRpc2FibGVEcmFmdEVkaXRTdGF0ZUZpbHRlcjogYm9vbGVhbjtcblx0XHRzaG93RHJhZnRFZGl0U3RhdHVzOiBib29sZWFuO1xuXHR9O1xuXHR2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW107XG5cdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50VHlwZSB8IHVuZGVmaW5lZDtcblx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4gfCB7fTtcblx0fTtcblx0ZmlsdGVyQmFySWQ6IHN0cmluZztcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbjtcblx0aGFzTXVsdGlWaXN1YWxpemF0aW9uczogYm9vbGVhbjtcblx0dGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGU7XG5cdHVzZVNlbWFudGljRGF0ZVJhbmdlPzogYm9vbGVhbjtcblx0ZmlsdGVySW5pdGlhbExheW91dD86IHN0cmluZztcblx0ZmlsdGVyTGF5b3V0Pzogc3RyaW5nO1xuXHRrcGlEZWZpbml0aW9uczogS1BJRGVmaW5pdGlvbltdO1xuXHRoaWRlRmlsdGVyQmFyOiBib29sZWFuO1xuXHR1c2VIaWRkZW5GaWx0ZXJCYXI6IGJvb2xlYW47XG5cdGV4cGFuZGVkSGVhZGVyRnJhZ21lbnQ/OiBzdHJpbmc7XG5cdGNvbGxhcHNlZEhlYWRlckZyYWdtZW50Pzogc3RyaW5nO1xufTtcbnR5cGUgTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uID0gU2luZ2xlVmlld0RlZmluaXRpb24gfCBDdXN0b21WaWV3RGVmaW5pdGlvbiB8IENvbWJpbmVkVmlld0RlZmluaXRpb247XG5cbmVudW0gVmlld0RlZmluaXRpb25UeXBlIHtcblx0U2luZ2xlVGFibGUgPSBcIlNpbmdsZVRhYmxlXCIsXG5cdFNpbmdsZUNoYXJ0ID0gXCJTaW5nbGVDaGFydFwiLFxuXHRDb21iaW5lZCA9IFwiQ29tYmluZWRcIixcblx0Q3VzdG9tID0gXCJDdXN0b21cIlxufVxuXG5leHBvcnQgdHlwZSBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHNlY29uZGFyeVZpc3VhbGl6YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbjtcblx0dGFibGVDb250cm9sSWQ6IHN0cmluZztcblx0Y2hhcnRDb250cm9sSWQ6IHN0cmluZztcblx0ZGVmYXVsdFBhdGg/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQ7XG59O1xuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVZpZXdEZWZpbml0aW9uID0gU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb247XG5leHBvcnQgdHlwZSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gPSB7XG5cdHNlbGVjdGlvblZhcmlhbnRQYXRoPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggb24gbXVsdGkgVGFibGUgbW9kZVxuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGU7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0Y2hhcnRDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlQ2hhcnQ7XG59O1xuXG50eXBlIENvbnRlbnRBcmVhSUQgPSB7XG5cdGNoYXJ0SWQ6IHN0cmluZztcblx0dGFibGVJZDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHZpZXcgc2V0dGluZ3MgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZS5cbiAqIEBwYXJhbSBwb3RlbnRpYWxWaWV3U2V0dGluZ3MgVGhlIHZpZXcgc2V0dGluZ3NcbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIHRvIG1hdGNoXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZpZXcgc2V0dGluZ3MgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZVxuICovXG5jb25zdCBpc1ZpZXdTZXR0aW5nc09mVHlwZSA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgVmlld0NvbnZlcnRlclNldHRpbmdzPihcblx0cG90ZW50aWFsVmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MsXG5cdHR5cGU6IFRbXCJ0eXBlXCJdXG4pOiBwb3RlbnRpYWxWaWV3U2V0dGluZ3MgaXMgVCB7XG5cdHJldHVybiBwb3RlbnRpYWxWaWV3U2V0dGluZ3MudHlwZSA9PT0gdHlwZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3IGRlZmluaXRpb24gbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZS5cbiAqIEBwYXJhbSBwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbiBUaGUgdmlldyBkZWZpbml0aW9uXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byBtYXRjaFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2aWV3IGRlZmluaXRpb24gbWF0Y2hlcyB0aGUgcHJvdmlkZWQgdHlwZVxuICovXG5jb25zdCBpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24+KFxuXHRwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbjogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uLFxuXHR0eXBlOiBUW1widmlld1R5cGVcIl1cbik6IHBvdGVudGlhbFZpZXdEZWZpbml0aW9uIGlzIFQge1xuXHRyZXR1cm4gcG90ZW50aWFsVmlld0RlZmluaXRpb24udmlld1R5cGUgPT09IHR5cGU7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICogQHBhcmFtIHZpZXdzIFRoZSBsaXN0IHJlcG9ydCB2aWV3cyBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPEN1c3RvbVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tKSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSBpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZClcblx0XHRcdFx0PyB2aWV3LnNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiB2aWV3LnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IGNoYXJ0cy5cbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCBjaGFydHNcbiAqL1xuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDdXN0b21WaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbSkpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpXG5cdFx0XHRcdD8gdmlldy5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6IHZpZXcucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zO1xuXHRcdFx0dmlzdWFsaXphdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAodmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGNoYXJ0cy5wdXNoKHZpc3VhbGl6YXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gY2hhcnRzO1xufVxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPlxuKTogUmVjb3JkPHN0cmluZywgRGVmYXVsdE9wZXJhdG9yW10gfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXM6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRPcGVyYXRvcltdIHwgdW5kZWZpbmVkPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGZpbHRlckZpZWxkIGluIGZpbHRlckZpZWxkcykge1xuXHRcdGlmIChmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcz8ubGVuZ3RoKSB7XG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlc1tmaWx0ZXJGaWVsZF0gPSBmaWx0ZXJGaWVsZHNbZmlsdGVyRmllbGRdPy5zZXR0aW5ncz8uZGVmYXVsdFZhbHVlcztcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlZmF1bHRTZW1hbnRpY0RhdGVzO1xufTtcbi8qKlxuICogRmluZCBhIHZpc3VhbGl6YXRpb24gYW5ub3RhdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGxpc3QgcmVwb3J0LlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBpc0FMUFxuICogQHJldHVybnMgQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpc0FMUDogYm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGVycm9yTWVzc2FnZUZvckFMUCA9IFwiQUxQIGZsYXZvciBuZWVkcyBib3RoIGNoYXJ0IGFuZCB0YWJsZSB0byBsb2FkIHRoZSBhcHBsaWNhdGlvblwiO1xuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJQcmVzZW50YXRpb24gVmFyaWFudCBpcyBub3QgY29uZmlndXJlZCBpbiB0aGUgU1BWIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3RcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSkge1xuXHRcdFx0XHRpZiAoaXNBTFApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgaXNBTFApID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9IGVsc2UgaWYgKGlzQUxQKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBpc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH0gZWxzZSBpZiAoaXNBTFApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2VGb3JBTFApO1xuXHRcdH1cblx0fVxuXHRpZiAoIWlzQUxQKSB7XG5cdFx0cmV0dXJuIGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHZpZXcgZm9yIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb25zIFRoZSBkYXRhIHZpc3VhbGl6YXRpb25zIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIGRlZmF1bHRQYXRoIFRoZSBkZWZhdWx0IHBhdGggb2YgdGhlIHBhZ2VcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgQUxQIHZpZXcgZGVmaW5pdGlvblxuICovXG5jb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24gKFxuXHRwcmVzZW50YXRpb25zOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb25bXSxcblx0ZGVmYXVsdFBhdGg6IENvbWJpbmVkVmlld0RlZmF1bHRQYXRoIHwgdW5kZWZpbmVkLFxuXHR2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1xuKTogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHByaW1hcnlWaXN1YWxpemF0aW9uID0gY3JlYXRlQWxwVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbiA9IGNyZWF0ZUFscFZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdLCBmYWxzZSk7XG5cdGlmIChwcmltYXJ5VmlzdWFsaXphdGlvbiAmJiBzZWNvbmRhcnlWaXN1YWxpemF0aW9uKSB7XG5cdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0XHRcdHByaW1hcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkOlxuXHRcdFx0XHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zWzBdPy50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZVxuXHRcdFx0XHRcdD8gc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXS5hbm5vdGF0aW9uPy5pZFxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdGNoYXJ0Q29udHJvbElkOlxuXHRcdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXT8udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgPyBwcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXS5pZCA6IFwiXCIsXG5cdFx0XHRkZWZhdWx0UGF0aCxcblx0XHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQsXG5cdFx0XHR2aXNpYmxlOiBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkgPyB2aWV3U2V0dGluZ3MudmlzaWJsZSA6IHVuZGVmaW5lZFxuXHRcdH07XG5cdFx0cmV0dXJuIHZpZXc7XG5cdH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmlzdWFsaXphdGlvbnMgZm9yIGEgc2luZ2xlIHZpc3VhbGl6YXRpb24gdmlldy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHByZXNlbnRhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBBTFAgdmlzdWFsaXphdGlvbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGNyZWF0ZVNpbmdsZVZpc3VhbGl6YXRpb25WaWV3ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLFxuXHR2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1xuKTogU2luZ2xlVmlld0RlZmluaXRpb24ge1xuXHRjb25zdCB0YWJsZUlkID0gZ2V0Vmlld0NvbnRyb2wocHJlc2VudGF0aW9uLCBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSk/LmFubm90YXRpb24uaWQ7XG5cdGNvbnN0IGJhc2VTZXR0aW5ncyA9IHtcblx0XHRwcmVzZW50YXRpb24sXG5cdFx0dGl0bGU6IGdldFZpZXdUaXRsZShjb252ZXJ0ZXJDb250ZXh0LCB2aWV3U2V0dGluZ3MpLFxuXHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoOiBnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCh2aWV3U2V0dGluZ3MpLFxuXHRcdHZpc2libGU6IGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSA/IHZpZXdTZXR0aW5ncy52aXNpYmxlIDogdW5kZWZpbmVkXG5cdH07XG5cdGlmICh0YWJsZUlkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmJhc2VTZXR0aW5ncyxcblx0XHRcdC4uLntcblx0XHRcdFx0dGFibGVDb250cm9sSWQ6IHRhYmxlSWQsXG5cdFx0XHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGVcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cdHJldHVybiB7XG5cdFx0Li4uYmFzZVNldHRpbmdzLFxuXHRcdC4uLntcblx0XHRcdGNoYXJ0Q29udHJvbElkOiBnZXRWaWV3Q29udHJvbChwcmVzZW50YXRpb24sIFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KT8uaWQsXG5cdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0XG5cdFx0fVxuXHR9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB2aXN1YWxpemF0aW9ucyBmb3IgdGhlIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICogQHBhcmFtIHByZXNlbnRhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIGlzUHJpbWFyeSBJcyBhIHByaW1hcnkgcHJlc2VudGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgQUxQIHZpc3VhbGl6YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBjcmVhdGVBbHBWaXN1YWxpemF0aW9uID0gZnVuY3Rpb24gKHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uLCBpc1ByaW1hcnk/OiBib29sZWFuKTogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHtcblx0Y29uc3QgcHJlc2VudGF0aW9uQ3JlYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXNlbnRhdGlvbik7XG5cdGNvbnN0IGRlZmF1bHRWaXN1YWxpemF0aW9uID0gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZpbmQoXG5cdFx0KHZpc3VhbGl6YXRpb24pOiB2aXN1YWxpemF0aW9uIGlzIFRhYmxlVmlzdWFsaXphdGlvbiB8IENoYXJ0VmlzdWFsaXphdGlvbiA9PlxuXHRcdFx0KCEhaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHx8XG5cdFx0XHQoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKVxuXHQpO1xuXG5cdGlmIChkZWZhdWx0VmlzdWFsaXphdGlvbikge1xuXHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG1lc3NhZ2VJbmZvID0gaXNQcmltYXJ5ID8geyB2aXN1YWxpemF0aW9uOiBcIlByaW1hcnlcIiwgdHlwZTogXCJjaGFydFwiIH0gOiB7IHZpc3VhbGl6YXRpb246IFwiU2Vjb25kYXJ5XCIsIHR5cGU6IFwidGFibGVcIiB9O1xuXHRcdHRocm93IG5ldyBFcnJvcihgJHttZXNzYWdlSW5mby52aXN1YWxpemF0aW9ufSB2aXN1YWxpemF0aW9uIG5lZWRzIHZhbGlkICR7bWVzc2FnZUluZm8udHlwZX1gKTtcblx0fVxuXHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gY29uZmlndXJhdGlvblxuICogQHBhcmFtIGlzUHJpbWFyeSBJcyBhIHByaW1hcnkgcHJlc2VudGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgQUxQIHByZXNlbnRhdGlvbiBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldEFscFByZXNlbnRhdGlvbiA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdGlzUHJpbWFyeTogYm9vbGVhblxuKTogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHtcblx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGl0ZW0uYW5ub3RhdGlvblBhdGgpO1xuXHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbjtcblx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRpZiAoYW5ub3RhdGlvbiB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0cmV0dXJuIGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdGFubm90YXRpb24gPyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSA6IFwiXCIsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0e1xuXHRcdFx0XHRpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiB0cnVlLFxuXHRcdFx0XHRzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbjogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0YEFubm90YXRpb24gUGF0aCBmb3IgdGhlICR7aXNQcmltYXJ5ID8gXCJwcmltYXJ5XCIgOiBcInNlY29uZGFyeVwifSB2aXN1YWxpemF0aW9uIG1lbnRpb25lZCBpbiB0aGUgbWFuaWZlc3QgaXMgbm90IGZvdW5kYFxuXHRcdCk7XG5cdH1cbn07XG5cbi8qKlxuICogQ29uZmlndXJlcyB0aGUgbXVsdGkgdmlldyBjb25maWd1cmF0aW9uIHdpdGggYWRkaXRpb25hbCBrZXlzLlxuICogQHBhcmFtIHByZXNlbnRhdGlvbiBUaGUgcHJlc2VudGF0aW9uIHRvIGNvbmZpZ3VyZVxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqL1xuY29uc3QgY29uZmlndXJlTXVsdGlWaWV3cyA9IGZ1bmN0aW9uIChwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgdmlld1NldHRpbmdzOiBNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3MpOiB2b2lkIHtcblx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRzd2l0Y2ggKHZpc3VhbGl6YXRpb24udHlwZSkge1xuXHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZTpcblx0XHRcdFx0Y29uc3QgZmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgPSBmaWx0ZXJzLmhpZGRlbkZpbHRlcnMgfHwgeyBwYXRoczogW10gfTtcblx0XHRcdFx0aWYgKCF2aWV3U2V0dGluZ3Mua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uKSB7XG5cdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IGdldFRhYmxlSUQodmlld1NldHRpbmdzLmtleSA/PyBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hcGlJZCA9IGdlbmVyYXRlKFt2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQsIFwiVGFibGVcIl0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0dmlzdWFsaXphdGlvbi5pZCA9IGdldENoYXJ0SUQodmlld1NldHRpbmdzLmtleSB8fCBcIlwiLCBcIkNoYXJ0XCIpO1xuXHRcdFx0XHR2aXN1YWxpemF0aW9uLm11bHRpVmlld3MgPSB0cnVlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBjdXN0b20gdmlldyBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBjdXN0b20gdmlldyBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldEN1c3RvbVZpZXcgPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBDdXN0b21WaWV3U2V0dGluZ3MpOiBDdXN0b21WaWV3RGVmaW5pdGlvbiB7XG5cdHJldHVybiB7XG5cdFx0dGl0bGU6IHZpZXdTZXR0aW5ncy5sYWJlbCxcblx0XHRmcmFnbWVudDogdmlld1NldHRpbmdzLnRlbXBsYXRlLFxuXHRcdHR5cGU6IHZpZXdTZXR0aW5ncy50eXBlLFxuXHRcdGN1c3RvbVRhYklkOiBnZXRDdXN0b21UYWJJRCh2aWV3U2V0dGluZ3Mua2V5ID8/IFwiXCIpLFxuXHRcdHZpc2libGU6IHZpZXdTZXR0aW5ncy52aXNpYmxlLFxuXHRcdHZpZXdUeXBlOiBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tXG5cdH07XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgY29udHJvbCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgdmlld1xuICogQHBhcmFtIHZpc3VhbGl6YXRpb25UeXBlIFRoZSB0eXBlIG9mIHRoZSB2aXN1YWxpemF0aW9uIHRvIGZpbmRcbiAqIEByZXR1cm5zIFRoZSB2aXN1YWxpemF0aW9uIGlmIHRoZSB0eXBlIG1hdGNoZXMsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuY29uc3QgZ2V0Vmlld0NvbnRyb2wgPSBmdW5jdGlvbiA8VCBleHRlbmRzIFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlIHwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ+KFxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbixcblx0dmlzdWFsaXphdGlvblR5cGU6IFRcbik6IExyVmlzdWFsaXphdGlvblR5cGU8VD4ge1xuXHRyZXR1cm4gcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZpbmQoKHZpc3VhbGl6YXRpb24pID0+IHZpc3VhbGl6YXRpb24udHlwZSA9PT0gdmlzdWFsaXphdGlvblR5cGUpIGFzIExyVmlzdWFsaXphdGlvblR5cGU8VD47XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHRpdGxlIG9mIHRoZSB2aWV3LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIHRpdGxlXG4gKi9cbmNvbnN0IGdldFZpZXdUaXRsZSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1xuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAoaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpKSB7XG5cdFx0Y29uc3Qgdmlld0Fubm90YXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uUGF0aCkuYW5ub3RhdGlvbiBhc1xuXHRcdFx0fCBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHR8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih2aWV3QW5ub3RhdGlvbi5UZXh0KSk7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbmZpZ3VyZWQgU2VsZWN0aW9uVmFyaWFudCAgb2YgdGhlIHZpZXcuXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIFNlbGVjdGlvblZhcmlhbnQgaWYgdGhlcmUgaXMgb25lLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IGdldFZpZXdTZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdHJldHVybiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvbiAmJlxuXHRcdFx0aXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLCBVSUFubm90YXRpb25UeXBlcy5TZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZSlcblx0XHRcdD8gYEAke3ZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ/LmZ1bGx5UXVhbGlmaWVkTmFtZS5zcGxpdChcIkBcIilbMV19YFxuXHRcdFx0OiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblBhdGg7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogR2V0cyB0aGUgdmlzdWFsaXphdGlvbiBwYXRoIG9mIHRoZSB2aWV3LlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBTZWxlY3Rpb25WYXJpYW50IGlmIHRoZXJlIGlzIG9uZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5jb25zdCBnZXRWaWV3VmlzdWFsaXphdGlvblBhdGggPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBzdHJpbmcge1xuXHRpZiAoIWlzVmlld1NldHRpbmdzT2ZUeXBlPEN1c3RvbVZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkN1c3RvbSkpIHtcblx0XHRyZXR1cm4gIWlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpICYmIHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uXG5cdFx0XHQ/IHZpZXdTZXR0aW5ncy5jb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoXG5cdFx0XHRcdFx0dmlld1NldHRpbmdzLmFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdFx0ICApXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblx0cmV0dXJuIFwiXCI7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgcmVwb3J0IHZpZXcgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgIGRlZmluaXRpb25cbiAqL1xuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uICh2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiB7XG5cdGlmICghaXNWaWV3U2V0dGluZ3NPZlR5cGU8Q3VzdG9tVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ3VzdG9tKSkge1xuXHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSB2aWV3U2V0dGluZ3MuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25zdCBtdWx0aVZpZXdTZXR0aW5ncyA9IGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKVxuXHRcdFx0PyB7XG5cdFx0XHRcdFx0YXNzb2NpYXRlZFNlbGVjdGlvblZhcmlhbnQ6IHZpZXdTZXR0aW5ncy5zZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdGlzTWFjcm9Pck11bHRpcGxlVmlldzogdHJ1ZVxuXHRcdFx0ICB9XG5cdFx0XHQ6IHt9O1xuXG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKGdldFZpZXdWaXN1YWxpemF0aW9uUGF0aCh2aWV3U2V0dGluZ3MpLCBjb252ZXJ0ZXJDb250ZXh0LCB7XG5cdFx0XHQuLi57IGlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQ6IHRydWUgfSxcblx0XHRcdC4uLm11bHRpVmlld1NldHRpbmdzXG5cdFx0fSk7XG5cblx0XHRpZiAoXG5cdFx0XHQhaXNWaWV3U2V0dGluZ3NPZlR5cGU8Q29tYmluZWRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZCkgJiZcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5sZW5ndGggPT09IDIgJiZcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHZpZXcgPSBjcmVhdGVBbHBWaWV3KFtwcmVzZW50YXRpb25dLCBcImJvdGhcIiwgdmlld1NldHRpbmdzKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNWaWV3U2V0dGluZ3NPZlR5cGU8Q29tYmluZWRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZCkpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSB2aWV3U2V0dGluZ3M7XG5cdFx0XHRpZiAocHJpbWFyeT8ubGVuZ3RoICYmIHNlY29uZGFyeT8ubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSBjcmVhdGVBbHBWaWV3KFxuXHRcdFx0XHRcdFtnZXRBbHBQcmVzZW50YXRpb24oY29udmVydGVyQ29udGV4dCwgcHJpbWFyeVswXSwgdHJ1ZSksIGdldEFscFByZXNlbnRhdGlvbihjb252ZXJ0ZXJDb250ZXh0LCBzZWNvbmRhcnlbMF0sIGZhbHNlKV0sXG5cdFx0XHRcdFx0dmlld1NldHRpbmdzLmRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5nc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2UpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpKSB7XG5cdFx0XHRjb25maWd1cmVNdWx0aVZpZXdzKHByZXNlbnRhdGlvbiwgdmlld1NldHRpbmdzKTtcblx0XHR9XG5cdFx0Y29uc3QgdmlldyA9IGNyZWF0ZVNpbmdsZVZpc3VhbGl6YXRpb25WaWV3KGNvbnZlcnRlckNvbnRleHQsIHByZXNlbnRhdGlvbiwgdmlld1NldHRpbmdzKTtcblx0XHR2aWV3LnByZXNlbnRhdGlvbi5pbk11bHRpVmlldyA9ICEhbXVsdGlWaWV3U2V0dGluZ3MuaXNNYWNyb09yTXVsdGlwbGVWaWV3O1xuXG5cdFx0cmV0dXJuIHZpZXc7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGdldEN1c3RvbVZpZXcodmlld1NldHRpbmdzKTtcblx0fVxufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IHJlcG9ydCB2aWV3IGRlZmluaXRpb25zLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gbXVsdGlwbGVWaWV3Q29uZmlnIFRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIHJlbGF0ZWQgb2YgdGhlIG11bHRpIHZpZXdzXG4gKiBAcmV0dXJucyBUaGUgIGRlZmluaXRpb25zXG4gKi9cbmNvbnN0IGdldFZpZXdzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdG11bHRpcGxlVmlld0NvbmZpZzogTXVsdGlwbGVWaWV3c0NvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWRcbik6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdIHtcblx0bGV0IHZpZXdDb252ZXJ0ZXJDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSA9IFtdO1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRpZiAobXVsdGlwbGVWaWV3Q29uZmlnKSB7XG5cdFx0bXVsdGlwbGVWaWV3Q29uZmlnLnBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmIChtYW5pZmVzdFdyYXBwZXIuaXNDb21iaW5lZFZpZXdDb25maWd1cmF0aW9uKHBhdGgpKSB7XG5cdFx0XHRcdGlmIChtdWx0aXBsZVZpZXdDb25maWcucGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmlld3NcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cHJpbWFyeTogcGF0aC5wcmltYXJ5LFxuXHRcdFx0XHRcdFx0c2Vjb25kYXJ5OiBwYXRoLnNlY29uZGFyeSxcblx0XHRcdFx0XHRcdGRlZmF1bHRQYXRoOiBwYXRoLmRlZmF1bHRQYXRoLFxuXHRcdFx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKG1hbmlmZXN0V3JhcHBlci5pc0N1c3RvbVZpZXdDb25maWd1cmF0aW9uKHBhdGgpKSB7XG5cdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0bGFiZWw6IHBhdGgubGFiZWwsXG5cdFx0XHRcdFx0dGVtcGxhdGU6IHBhdGgudGVtcGxhdGUsXG5cdFx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5DdXN0b20sXG5cdFx0XHRcdFx0dmlzaWJsZTogcGF0aC52aXNpYmxlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgdmlld0NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3I8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIGAvJHtwYXRoLmVudGl0eVNldH1gKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRcdGlmIChlbnRpdHlUeXBlICYmIHZpZXdDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25WYXJpYW50IHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbikge1xuXHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9XG5cdFx0XHRcdFx0XHRcdHRhcmdldEFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRcdFx0XHRcdD8gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgdmlld0NvbnZlcnRlckNvbnRleHQsIGZhbHNlKVxuXHRcdFx0XHRcdFx0XHRcdDogdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50OiB0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQgPyB0YXJnZXRBbm5vdGF0aW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZSxcblx0XHRcdFx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5NdWx0aVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGNyZWF0ZUFscFZpZXdTZXR0aW5ncyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3Q29udmVydGVyQ29uZmlncyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRhbm5vdGF0aW9uOiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSksXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuRGVmYXVsdFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAoKHZpZXdDb252ZXJ0ZXJDb25maWcpID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuY29uc3QgZ2V0TXVsdGlWaWV3c0NvbnRyb2wgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdXG4pOiBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGlmICh2aWV3cy5sZW5ndGggPiAxICYmICFoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNob3dUYWJDb3VudHM6IHZpZXdzRGVmaW5pdGlvbiA/IHZpZXdzRGVmaW5pdGlvbi5zaG93Q291bnRzID8/IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSA6IHVuZGVmaW5lZCwgLy8gd2l0aCBtdWx0aSBFbnRpdHlTZXRzLCB0YWIgY291bnRzIGFyZSBkaXNwbGF5ZWQgYnkgZGVmYXVsdFxuXHRcdFx0aWQ6IGdldEljb25UYWJCYXJJRCgpXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBzZXR0aW5ncyByZWxhdGVkIHRvIGFuIEFMUCB2aWV3LlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlZCBjb250ZXh0XG4gKiBAcGFyYW0gdmlld0NvbmZpZ3MgVGhlIGNvbmZpZ3Mgb2YgdGhlIG90aGVyIGxpc3QgcmVwb3J0IHZpZXdzXG4gKiBAcmV0dXJucyBUaGUgY29uZmlncyBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQWxwVmlld1NldHRpbmdzKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXVxuKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5EZWZhdWx0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5ID0gW3sgYW5ub3RhdGlvblBhdGg6IFwiQFwiICsgY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeSA9IFt7IGFubm90YXRpb25QYXRoOiBcIkBcIiArIHRhYmxlLnRlcm0gfV07XG5cdFx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0cHJpbWFyeTogcHJpbWFyeSxcblx0XHRcdFx0c2Vjb25kYXJ5OiBzZWNvbmRhcnksXG5cdFx0XHRcdGRlZmF1bHRQYXRoOiBcImJvdGhcIixcblx0XHRcdFx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkFMUCBmbGF2b3IgbmVlZHMgYm90aCBjaGFydCBhbmQgdGFibGUgdG8gbG9hZCB0aGUgYXBwbGljYXRpb25cIik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29uZmlncztcbn1cbmZ1bmN0aW9uIGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHxcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdCk7XG59XG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBoZWFkZXJBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHM8QmFzZUFjdGlvbj4oXG5cdFx0W10sXG5cdFx0Z2V0QWN0aW9uc0Zyb21NYW5pZmVzdChtYW5pZmVzdFdyYXBwZXIuZ2V0SGVhZGVyQWN0aW9ucygpLCBjb252ZXJ0ZXJDb250ZXh0KS5hY3Rpb25zXG5cdCk7XG5cdC8vIEFwcGx5IHByaW1hcnkgYWN0aW9uIG92ZXJmbG93IHByb3RlY3Rpb25cblx0cmV0dXJuIEFjdGlvblV0aWxpdGllcy5lbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MoaGVhZGVyQWN0aW9ucyk7XG59O1xuXG4vKipcbiAqIFNldHMgdGhlIGZpbHRlckJhcklkIG9uIHRoZSBzY2VuYXJpbyB3aXRoIG11bHRpLWVudGl0eSBzZXRzLlxuICogQHBhcmFtIHZpZXdzIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBsaXN0IHJlcG9ydCB2aWV3c1xuICogQHBhcmFtIGZpbHRlckJhcklkXG4gKi9cbmNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uICh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpOiB2b2lkIHtcblx0dmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdGlmIChcblx0XHRcdCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPEN1c3RvbVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ3VzdG9tKSAmJlxuXHRcdFx0IWlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKVxuXHRcdCkge1xuXHRcdFx0dmlldy5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIHByZWRlZmluZWQgZW52aXJvbm1lbnQgY2FwYWJpbGl0aWVzXG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGNhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3MgPSBnZXRWaWV3cyhjb252ZXJ0ZXJDb250ZXh0LCB2aWV3c0RlZmluaXRpb24pO1xuXHRjb25zdCBsclRhYmxlVmlzdWFsaXphdGlvbnMgPSBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3QgbHJDaGFydFZpc3VhbGl6YXRpb25zID0gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IHNob3dQaW5uYWJsZVRvZ2dsZSA9IGxyVGFibGVWaXN1YWxpemF0aW9ucy5zb21lKCh0YWJsZSkgPT4gdGFibGUuY29udHJvbC50eXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKTtcblx0bGV0IHNpbmdsZVRhYmxlSWQgPSBcIlwiO1xuXHRsZXQgc2luZ2xlQ2hhcnRJZCA9IFwiXCI7XG5cdGNvbnN0IGR5bmFtaWNMaXN0UmVwb3J0SWQgPSBnZXREeW5hbWljTGlzdFJlcG9ydElEKCk7XG5cdGNvbnN0IGZpbHRlckJhcklkID0gZ2V0RmlsdGVyQmFySUQoc0NvbnRleHRQYXRoKTtcblx0Y29uc3QgZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCA9IGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQoZmlsdGVyQmFySWQpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXHRjb25zdCBzaG93Q2xlYXJCdXR0b24gPSBmYkNvbmZpZy5zaG93Q2xlYXJCdXR0b24gIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnNob3dDbGVhckJ1dHRvbiA6IGZhbHNlO1xuXHRjb25zdCBjb25maWcgPSBnZXRDb250ZW50QXJlYUlkKHZpZXdzKTtcblx0aWYgKGNvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBjb25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gY29uZmlnLnRhYmxlSWQ7XG5cdH1cblx0Y29uc3QgdXNlSGlkZGVuRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLnVzZUhpZGRlbkZpbHRlckJhcigpO1xuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSAobWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgfHwgdXNlSGlkZGVuRmlsdGVyQmFyKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG11bHRpVmlld0NvbnRyb2wgPSBnZXRNdWx0aVZpZXdzQ29udHJvbChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBtdWx0aVZpZXdDb250cm9sID8gdW5kZWZpbmVkIDogZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoaGFzTXVsdGlwbGVFbnRpdHlTZXRzKSB7XG5cdFx0Y2hlY2tDaGFydEZpbHRlckJhcklkKHZpZXdzLCBmaWx0ZXJCYXJJZCk7XG5cdH1cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdC8vcGljayB1cCB0aGUgdGFibGUgQVBJIGlkIGZvciB0aGUgdGFibGUsIHNpbmNlIHRoYXQgaXMgdGhlIGV4dGVybmFsIGNvbnRyb2wuXG5cdFx0XHQvLyB2YXJpYW50IG1hbmFnZW1lbnQgc3RpbGwgd29ya3MgYmVjYXVzZSBpdCBjYW4gaGFuZGxlIGEgY29udHJvbCB3aGVyZSB0aGUgY2hpbGQgaGFzIGZsZXggY2hhbmdlcy5cblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uYXBpSWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hcGlJZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gW10gOiBbZmlsdGVyQmFySWRdKSxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4obXVsdGlWaWV3Q29udHJvbCA/IFttdWx0aVZpZXdDb250cm9sLmlkXSA6IFtdKVxuXHRdO1xuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgb24gdGhlIG1haW4gZW50aXR5IHNldCBhcmUgVHJlZSBvciBhbmFseXRpY2FsIHRhYmxlcy4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZHJhZnQgZWRpdFN0YXRlIGZpbHRlciBzaGFsbCBub3QgYmUgc2hvd25cblx0Y29uc3QgZGlzYWJsZURyYWZ0RWRpdFN0YXRlRmlsdGVyID1cblx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHxcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnMuZXZlcnkoKHRhYmxlVmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzIHx8XG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24gIT09IHNDb250ZXh0UGF0aFxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdG11bHRpVmlld3NDb250cm9sOiBtdWx0aVZpZXdDb250cm9sLFxuXHRcdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyLFxuXHRcdHNpbmdsZVRhYmxlSWQsXG5cdFx0c2luZ2xlQ2hhcnRJZCxcblx0XHRkeW5hbWljTGlzdFJlcG9ydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0ZWFzeUZpbHRlckVuYWJsZWQ6ICFoaWRlRmlsdGVyQmFyICYmIGNhcGFiaWxpdGllcz8uTWFnaWNGaWx0ZXJpbmcsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaCxcblx0XHRcdHNob3dDbGVhckJ1dHRvbixcblx0XHRcdGRpc2FibGVEcmFmdEVkaXRTdGF0ZUZpbHRlcixcblx0XHRcdHNob3dEcmFmdEVkaXRTdGF0dXM6IHNob3dEcmFmdEVkaXRTdGF0dXMoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHRhcmdldENvbnRyb2xJZHM6IHRhcmdldENvbnRyb2xJZHMuam9pbihcIixcIilcblx0XHR9LFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMoY29udmVydGVyQ29udGV4dCksXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXIsXG5cdFx0dXNlSGlkZGVuRmlsdGVyQmFyLFxuXHRcdGNvbGxhcHNlZEhlYWRlckZyYWdtZW50OiBtYW5pZmVzdFdyYXBwZXIuZ2V0Q29sbGFwc2VkSGVhZGVyRnJhZ21lbnQoKSxcblx0XHRleHBhbmRlZEhlYWRlckZyYWdtZW50OiBtYW5pZmVzdFdyYXBwZXIuZ2V0RXhwYW5kZWRIZWFkZXJGcmFnbWVudCgpXG5cdH07XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRlbnQgYXJlYSBpZHMgb2YgdGhlIGxpc3QgcmVwb3J0LlxuICogQHBhcmFtIHZpZXdzIFRoZSBkZWZpbml0aW9ucyBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqIEByZXR1cm5zIFRoZSBjb250ZW50IGFyZWEgaWRzXG4gKi9cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNpbmdsZVRhYmxlSWQgPVxuXHRcdFx0dmlld3MuZmluZChcblx0XHRcdFx0KHZpZXcpOiB2aWV3IGlzIENvbWJpbmVkVmlld0RlZmluaXRpb24gfCBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uID0+XG5cdFx0XHRcdFx0KGlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKSB8fFxuXHRcdFx0XHRcdFx0aXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuU2luZ2xlVGFibGUpKSAmJlxuXHRcdFx0XHRcdCEhdmlldy50YWJsZUNvbnRyb2xJZFxuXHRcdFx0KT8udGFibGVDb250cm9sSWQgPz8gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID1cblx0XHRcdHZpZXdzLmZpbmQoXG5cdFx0XHRcdCh2aWV3KTogdmlldyBpcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbiA9PlxuXHRcdFx0XHRcdChpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZCkgfHxcblx0XHRcdFx0XHRcdGlzVmlld0RlZmluaXRpb25PZlR5cGU8U2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0KSkgJiZcblx0XHRcdFx0XHQhIXZpZXcuY2hhcnRDb250cm9sSWRcblx0XHRcdCk/LmNoYXJ0Q29udHJvbElkID8/IFwiXCI7XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0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QUVBLGdCQUFnQixDQUFDdUIsSUFBSSxDQUFDLEdBQUc7TUFDNUMsQ0FBQztNQUNEdEYsc0JBQXNCLEVBQUVBLHNCQUFzQixDQUFDbEgsZ0JBQWdCLENBQUM7TUFDaEV5TSxZQUFZLEVBQUV4RyxlQUFlLENBQUMvQyxlQUFlLENBQUMsQ0FBQztNQUMvQzJHLG9CQUFvQjtNQUNwQkwsbUJBQW1CO01BQ25CRyxZQUFZO01BQ1orQyxjQUFjLEVBQUVDLGlCQUFpQixDQUFDM00sZ0JBQWdCLENBQUM7TUFDbkRtSyxhQUFhO01BQ2JELGtCQUFrQjtNQUNsQjBDLHVCQUF1QixFQUFFM0csZUFBZSxDQUFDNEcsMEJBQTBCLENBQUMsQ0FBQztNQUNyRUMsc0JBQXNCLEVBQUU3RyxlQUFlLENBQUM4Ryx5QkFBeUIsQ0FBQztJQUNuRSxDQUFDO0VBQ0YsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkE1RSxRQUFBLENBQUFLLFdBQUEsR0FBQUEsV0FBQTtFQUtBLFNBQVN3QixnQkFBZ0JBLENBQUMxTCxLQUFpQyxFQUE2QjtJQUN2RixNQUFNeUssYUFBYSxHQUNqQnpLLEtBQUssQ0FBQ3FFLElBQUksQ0FDUmxFLElBQUksSUFDSixDQUFDUCxzQkFBc0IsQ0FBeUJPLElBQUksRUFBRVgsa0JBQWtCLENBQUNjLFFBQVEsQ0FBQyxJQUNqRlYsc0JBQXNCLENBQTRCTyxJQUFJLEVBQUVYLGtCQUFrQixDQUFDc0UsV0FBVyxDQUFDLEtBQ3hGLENBQUMsQ0FBQzNELElBQUksQ0FBQzZDLGNBQ1QsQ0FBQyxFQUFFQSxjQUFjLElBQUksRUFBRTtNQUN4QjBILGFBQWEsR0FDWjFLLEtBQUssQ0FBQ3FFLElBQUksQ0FDUmxFLElBQUksSUFDSixDQUFDUCxzQkFBc0IsQ0FBeUJPLElBQUksRUFBRVgsa0JBQWtCLENBQUNjLFFBQVEsQ0FBQyxJQUNqRlYsc0JBQXNCLENBQTRCTyxJQUFJLEVBQUVYLGtCQUFrQixDQUFDdUUsV0FBVyxDQUFDLEtBQ3hGLENBQUMsQ0FBQzVELElBQUksQ0FBQ2dELGNBQ1QsQ0FBQyxFQUFFQSxjQUFjLElBQUksRUFBRTtJQUN6QixJQUFJc0gsYUFBYSxJQUFJQyxhQUFhLEVBQUU7TUFDbkMsT0FBTztRQUNOaUIsT0FBTyxFQUFFakIsYUFBYTtRQUN0Qm5ILE9BQU8sRUFBRWtIO01BQ1YsQ0FBQztJQUNGO0lBQ0EsT0FBT25JLFNBQVM7RUFDakI7RUFBQyxPQUFBdUgsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
693
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaWV3U2V0dGluZ3NUeXBlIiwiVmlld0RlZmluaXRpb25UeXBlIiwiaXNWaWV3U2V0dGluZ3NPZlR5cGUiLCJwb3RlbnRpYWxWaWV3U2V0dGluZ3MiLCJ0eXBlIiwiaXNWaWV3RGVmaW5pdGlvbk9mVHlwZSIsInBvdGVudGlhbFZpZXdEZWZpbml0aW9uIiwidmlld1R5cGUiLCJnZXRUYWJsZVZpc3VhbGl6YXRpb25zIiwidmlld3MiLCJ0YWJsZXMiLCJmb3JFYWNoIiwidmlldyIsIkN1c3RvbSIsInZpc3VhbGl6YXRpb25zIiwiQ29tYmluZWQiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiaXNBTFAiLCJhbm5vdGF0aW9uUGF0aCIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoIiwic2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJlcnJvck1lc3NhZ2VGb3JBTFAiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiUHJlc2VudGF0aW9uVmFyaWFudCIsIkVycm9yIiwiaXNQcmVzZW50YXRpb25Db21wbGlhbnQiLCJ1bmRlZmluZWQiLCJpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudCIsImFubm90YXRpb25zIiwiVUkiLCJnZXREZWZhdWx0TGluZUl0ZW0iLCJjcmVhdGVBbHBWaWV3IiwicHJlc2VudGF0aW9ucyIsImRlZmF1bHRQYXRoIiwidmlld1NldHRpbmdzIiwiY3JlYXRlQWxwVmlzdWFsaXphdGlvbiIsInRhYmxlQ29udHJvbElkIiwiYW5ub3RhdGlvbiIsImlkIiwiY2hhcnRDb250cm9sSWQiLCJ2aXNpYmxlIiwiTXVsdGkiLCJjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyIsInRhYmxlSWQiLCJnZXRWaWV3Q29udHJvbCIsImJhc2VTZXR0aW5ncyIsInRpdGxlIiwiZ2V0Vmlld1RpdGxlIiwic2VsZWN0aW9uVmFyaWFudFBhdGgiLCJnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCIsIlNpbmdsZVRhYmxlIiwiU2luZ2xlQ2hhcnQiLCJpc1ByaW1hcnkiLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJmaW5kIiwibWVzc2FnZUluZm8iLCJnZXRBbHBQcmVzZW50YXRpb24iLCJpdGVtIiwicmVzb2x2ZWRUYXJnZXQiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsInRhcmdldEFubm90YXRpb24iLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsImlzQ29uZGVuc2VkVGFibGVMYXlvdXRDb21wbGlhbnQiLCJzaG91bGRDcmVhdGVUZW1wbGF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImNvbmZpZ3VyZU11bHRpVmlld3MiLCJmaWx0ZXJzIiwiY29udHJvbCIsImhpZGRlbkZpbHRlcnMiLCJwYXRocyIsImtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbiIsImdldFRhYmxlSUQiLCJrZXkiLCJhcGlJZCIsImdlbmVyYXRlIiwiZ2V0Q2hhcnRJRCIsIm11bHRpVmlld3MiLCJnZXRDdXN0b21WaWV3IiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsInZpc3VhbGl6YXRpb25UeXBlIiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJpc0Fubm90YXRpb25PZlR5cGUiLCJTZWxlY3Rpb25WYXJpYW50Iiwic3BsaXQiLCJnZXRWaWV3VmlzdWFsaXphdGlvblBhdGgiLCJnZXRWaWV3IiwibXVsdGlWaWV3U2V0dGluZ3MiLCJhc3NvY2lhdGVkU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJpc01hY3JvT3JNdWx0aXBsZVZpZXciLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwiaW5NdWx0aVZpZXciLCJnZXRWaWV3cyIsIm11bHRpcGxlVmlld0NvbmZpZyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwibWFuaWZlc3RXcmFwcGVyIiwicGF0aCIsImlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbiIsImlzQ3VzdG9tVmlld0NvbmZpZ3VyYXRpb24iLCJ2aWV3Q29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwidGVybSIsImNyZWF0ZUFscFZpZXdTZXR0aW5ncyIsIkRlZmF1bHQiLCJtYXAiLCJ2aWV3Q29udmVydGVyQ29uZmlnIiwiZ2V0TXVsdGlWaWV3c0NvbnRyb2wiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpVmlzdWFsaXphdGlvbnMiLCJzaG93VGFiQ291bnRzIiwic2hvd0NvdW50cyIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsImdldEljb25UYWJCYXJJRCIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJnZXRIZWFkZXJBY3Rpb25zIiwiaGVhZGVyQWN0aW9ucyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImFjdGlvbnMiLCJBY3Rpb25VdGlsaXRpZXMiLCJlbnN1cmVQcmltYXJ5QWN0aW9uTmV2ZXJPdmVyZmxvd3MiLCJvdmVyZmxvd0dyb3Vwc0NvbmZpZyIsImdldEhlYWRlck92ZXJmbG93R3JvdXBzIiwiYWRkU2VwYXJhdG9ycyIsIl9leHBvcnRzIiwiY2hlY2tDaGFydEZpbHRlckJhcklkIiwiZmlsdGVyQmFySWQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJjYXBhYmlsaXRpZXMiLCJzQ29udGV4dFBhdGgiLCJsclRhYmxlVmlzdWFsaXphdGlvbnMiLCJsckNoYXJ0VmlzdWFsaXphdGlvbnMiLCJzaG93UGlubmFibGVUb2dnbGUiLCJzb21lIiwic2luZ2xlVGFibGVJZCIsInNpbmdsZUNoYXJ0SWQiLCJkeW5hbWljTGlzdFJlcG9ydElkIiwiZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCIsImdldEZpbHRlckJhcklEIiwiZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQiLCJwYWdlVmFyaWFudE1hbmFnZW1lbnRJRCIsImdldFBhZ2VWYXJpYW50TWFuYWdlbWVudElEIiwiZmJDb25maWciLCJnZXRGaWx0ZXJDb25maWd1cmF0aW9uIiwiZmlsdGVySW5pdGlhbExheW91dCIsImluaXRpYWxMYXlvdXQiLCJ0b0xvd2VyQ2FzZSIsImZpbHRlckxheW91dCIsImxheW91dCIsInVzZVNlbWFudGljRGF0ZVJhbmdlIiwic2hvd0NsZWFyQnV0dG9uIiwiY29uZmlnIiwiZ2V0Q29udGVudEFyZWFJZCIsImNoYXJ0SWQiLCJ1c2VIaWRkZW5GaWx0ZXJCYXIiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoIiwibXVsdGlWaWV3Q29udHJvbCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsInZpc3VhbGl6YXRpb25JZHMiLCJjb25jYXQiLCJ0YXJnZXRDb250cm9sSWRzIiwiZ2V0VmFyaWFudE1hbmFnZW1lbnQiLCJWYXJpYW50TWFuYWdlbWVudFR5cGUiLCJDb250cm9sIiwic3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIiLCJnZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24iLCJkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXIiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJldmVyeSIsInRhYmxlVmlzdWFsaXphdGlvbiIsImVuYWJsZUFuYWx5dGljcyIsImNvbGxlY3Rpb24iLCJtYWluRW50aXR5U2V0IiwibWFpbkVudGl0eVR5cGUiLCJtdWx0aVZpZXdzQ29udHJvbCIsImVhc3lGaWx0ZXJFbmFibGVkIiwiTWFnaWNGaWx0ZXJpbmciLCJmaWx0ZXJCYXIiLCJwcm9wZXJ0eUluZm8iLCJzaG93RHJhZnRFZGl0U3RhdHVzIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50IiwicGFnZUlkIiwiam9pbiIsInRlbXBsYXRlVHlwZSIsImtwaURlZmluaXRpb25zIiwiZ2V0S1BJRGVmaW5pdGlvbnMiLCJjb2xsYXBzZWRIZWFkZXJGcmFnbWVudCIsImdldENvbGxhcHNlZEhlYWRlckZyYWdtZW50IiwiZXhwYW5kZWRIZWFkZXJGcmFnbWVudCIsImdldEV4cGFuZGVkSGVhZGVyRnJhZ21lbnQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudCxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMsIFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24sIEN1c3RvbUFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGFkZFNlcGFyYXRvcnMsIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLCBGaWx0ZXJGaWVsZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQge1xuXHRnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2gsXG5cdGdldE1hbmlmZXN0RmlsdGVyRmllbGRzLFxuXHRnZXRTZWxlY3Rpb25GaWVsZHMsXG5cdHNob3dEcmFmdEVkaXRTdGF0dXNcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9GaWx0ZXJCYXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCBBY3Rpb25VdGlsaXRpZXMgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQWN0aW9uVXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHtcblx0Q29tYmluZWRWaWV3RGVmYXVsdFBhdGgsXG5cdERlZmF1bHRPcGVyYXRvcixcblx0SGlkZGVuRHJhZnQsXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB7XG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsXG5cdGdldFNlbGVjdGlvblZhcmlhbnQsXG5cdGlzUHJlc2VudGF0aW9uQ29tcGxpYW50LFxuXHRpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudFxufSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEtQSURlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHsgZ2V0S1BJRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHtcblx0Z2V0Q2hhcnRJRCxcblx0Z2V0Q3VzdG9tVGFiSUQsXG5cdGdldER5bmFtaWNMaXN0UmVwb3J0SUQsXG5cdGdldEZpbHRlckJhcklELFxuXHRnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELFxuXHRnZXRJY29uVGFiQmFySUQsXG5cdGdldFBhZ2VWYXJpYW50TWFuYWdlbWVudElELFxuXHRnZXRUYWJsZUlEXG59IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5cbnR5cGUgVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYWdlSWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxuZW51bSBWaWV3U2V0dGluZ3NUeXBlIHtcblx0TXVsdGkgPSBcIk11bHRpXCIsXG5cdENvbWJpbmVkID0gXCJDb21iaW5lZFwiLFxuXHRDdXN0b20gPSBcIkN1c3RvbVwiLFxuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCJcbn1cblxudHlwZSBDb21iaW5lZFZpZXdTZXR0aW5ncyA9IHtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xuXHRwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXTtcblx0c2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXTtcblx0ZGVmYXVsdFBhdGg/OiBDb21iaW5lZFZpZXdEZWZhdWx0UGF0aDtcblx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5Db21iaW5lZDtcbn07XG50eXBlIEN1c3RvbVZpZXdTZXR0aW5ncyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0dGVtcGxhdGU6IHN0cmluZztcblx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5DdXN0b207XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG50eXBlIE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncyA9IHtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xuXHRzZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudFR5cGU7XG5cdGFubm90YXRpb24/OiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnQgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgQ2hhcnQ7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbj86IGJvb2xlYW47XG5cdGtleT86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcblx0dHlwZTogVmlld1NldHRpbmdzVHlwZS5NdWx0aTtcbn07XG50eXBlIERlZmF1bHRWaWV3U2V0dGluZ3MgPSB7XG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pjtcblx0YW5ub3RhdGlvbj86IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuRGVmYXVsdDtcbn07XG5cbnR5cGUgVmlld0NvbnZlcnRlclNldHRpbmdzID0gRGVmYXVsdFZpZXdTZXR0aW5ncyB8IENvbWJpbmVkVmlld1NldHRpbmdzIHwgTXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzIHwgQ3VzdG9tVmlld1NldHRpbmdzO1xuXG50eXBlIERlZmF1bHRTZW1hbnRpY0RhdGUgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG59O1xudHlwZSBNdWx0aVZpZXdzQ29udHJvbENvbmZpZ3VyYXRpb24gPSB7XG5cdGlkOiBzdHJpbmc7XG5cdHNob3dUYWJDb3VudHM/OiBib29sZWFuO1xufTtcbnR5cGUgTHJWaXN1YWxpemF0aW9uVHlwZTxUPiA9IFQgZXh0ZW5kcyBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSA/IFRhYmxlVmlzdWFsaXphdGlvbiB8IHVuZGVmaW5lZCA6IENoYXJ0VmlzdWFsaXphdGlvbiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgTGlzdFJlcG9ydERlZmluaXRpb24gPSB7XG5cdG1haW5FbnRpdHlTZXQ6IHN0cmluZztcblx0bWFpbkVudGl0eVR5cGU6IHN0cmluZzsgLy8gZW50aXR5VHlwZT4gYXQgdGhlIHN0YXJ0IG9mIExSIHRlbXBsYXRpbmdcblx0c2luZ2xlVGFibGVJZD86IHN0cmluZzsgLy8gb25seSB3aXRoIHNpbmdsZSBUYWJsZSBtb2RlXG5cdHNpbmdsZUNoYXJ0SWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRkeW5hbWljTGlzdFJlcG9ydElkOiBzdHJpbmc7XG5cdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyPzogc3RyaW5nO1xuXHRtdWx0aVZpZXdzQ29udHJvbD86IE11bHRpVmlld3NDb250cm9sQ29uZmlndXJhdGlvbjsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0aGVhZGVyQWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRlYXN5RmlsdGVyRW5hYmxlZD86IGJvb2xlYW47XG5cdHNob3dQaW5uYWJsZVRvZ2dsZT86IGJvb2xlYW47XG5cdGZpbHRlckJhcjoge1xuXHRcdHByb3BlcnR5SW5mbzogc3RyaW5nO1xuXHRcdHNlbGVjdGlvbkZpZWxkczogRmlsdGVyRmllbGRbXTtcblx0XHRoaWRlQmFzaWNTZWFyY2g6IGJvb2xlYW47XG5cdFx0c2hvd0NsZWFyQnV0dG9uPzogYm9vbGVhbjtcblx0XHRkaXNhYmxlRHJhZnRFZGl0U3RhdGVGaWx0ZXI6IGJvb2xlYW47XG5cdFx0c2hvd0RyYWZ0RWRpdFN0YXR1czogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRTZW1hbnRpY0RhdGU+IHwge307XG5cdH07XG5cdGZpbHRlckJhcklkOiBzdHJpbmc7XG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudERlZmluaXRpb247XG5cdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdHRlbXBsYXRlVHlwZTogVGVtcGxhdGVUeXBlO1xuXHR1c2VTZW1hbnRpY0RhdGVSYW5nZT86IGJvb2xlYW47XG5cdGZpbHRlckluaXRpYWxMYXlvdXQ/OiBzdHJpbmc7XG5cdGZpbHRlckxheW91dD86IHN0cmluZztcblx0a3BpRGVmaW5pdGlvbnM6IEtQSURlZmluaXRpb25bXTtcblx0aGlkZUZpbHRlckJhcjogYm9vbGVhbjtcblx0dXNlSGlkZGVuRmlsdGVyQmFyOiBib29sZWFuO1xuXHRleHBhbmRlZEhlYWRlckZyYWdtZW50Pzogc3RyaW5nO1xuXHRjb2xsYXBzZWRIZWFkZXJGcmFnbWVudD86IHN0cmluZztcbn07XG50eXBlIExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVZpZXdEZWZpbml0aW9uIHwgQ3VzdG9tVmlld0RlZmluaXRpb24gfCBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXG5lbnVtIFZpZXdEZWZpbml0aW9uVHlwZSB7XG5cdFNpbmdsZVRhYmxlID0gXCJTaW5nbGVUYWJsZVwiLFxuXHRTaW5nbGVDaGFydCA9IFwiU2luZ2xlQ2hhcnRcIixcblx0Q29tYmluZWQgPSBcIkNvbWJpbmVkXCIsXG5cdEN1c3RvbSA9IFwiQ3VzdG9tXCJcbn1cblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkO1xufTtcbmV4cG9ydCB0eXBlIEN1c3RvbVZpZXdEZWZpbml0aW9uID0ge1xuXHR0aXRsZT86IHN0cmluZzsgLy8gb25seSB3aXRoIG11bHRpIFRhYmxlIG1vZGVcblx0ZnJhZ21lbnQ6IHN0cmluZztcblx0dHlwZTogc3RyaW5nO1xuXHRjdXN0b21UYWJJZDogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbTtcbn07XG5leHBvcnQgdHlwZSBTaW5nbGVWaWV3RGVmaW5pdGlvbiA9IFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gfCBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uO1xuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZVRhYmxlVmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdHRhYmxlQ29udHJvbElkPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlO1xufTtcbmV4cG9ydCB0eXBlIFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPSBCYXNlU2luZ2xlVmlld0RlZmluaXRpb24gJiB7XG5cdGNoYXJ0Q29udHJvbElkPzogc3RyaW5nO1xuXHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZUNoYXJ0O1xufTtcblxudHlwZSBDb250ZW50QXJlYUlEID0ge1xuXHRjaGFydElkOiBzdHJpbmc7XG5cdHRhYmxlSWQ6IHN0cmluZztcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3IHNldHRpbmdzIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGUuXG4gKiBAcGFyYW0gcG90ZW50aWFsVmlld1NldHRpbmdzIFRoZSB2aWV3IHNldHRpbmdzXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byBtYXRjaFxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2aWV3IHNldHRpbmdzIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGVcbiAqL1xuY29uc3QgaXNWaWV3U2V0dGluZ3NPZlR5cGUgPSBmdW5jdGlvbiA8VCBleHRlbmRzIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncz4oXG5cdHBvdGVudGlhbFZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzLFxuXHR0eXBlOiBUW1widHlwZVwiXVxuKTogcG90ZW50aWFsVmlld1NldHRpbmdzIGlzIFQge1xuXHRyZXR1cm4gcG90ZW50aWFsVmlld1NldHRpbmdzLnR5cGUgPT09IHR5cGU7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyBkZWZpbml0aW9uIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGUuXG4gKiBAcGFyYW0gcG90ZW50aWFsVmlld0RlZmluaXRpb24gVGhlIHZpZXcgZGVmaW5pdGlvblxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgdG8gbWF0Y2hcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmlldyBkZWZpbml0aW9uIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHR5cGVcbiAqL1xuY29uc3QgaXNWaWV3RGVmaW5pdGlvbk9mVHlwZSA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uPihcblx0cG90ZW50aWFsVmlld0RlZmluaXRpb246IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbixcblx0dHlwZTogVFtcInZpZXdUeXBlXCJdXG4pOiBwb3RlbnRpYWxWaWV3RGVmaW5pdGlvbiBpcyBUIHtcblx0cmV0dXJuIHBvdGVudGlhbFZpZXdEZWZpbml0aW9uLnZpZXdUeXBlID09PSB0eXBlO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYWxsIGxpc3QgcmVwb3J0IHRhYmxlcy5cbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBUYWJsZVZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IHRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDdXN0b21WaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbSkpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpXG5cdFx0XHRcdD8gdmlldy5zZWNvbmRhcnlWaXN1YWxpemF0aW9uLnZpc3VhbGl6YXRpb25zXG5cdFx0XHRcdDogdmlldy5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cdFx0XHR2aXN1YWxpemF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uICh2aXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0dGFibGVzLnB1c2godmlzdWFsaXphdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiB0YWJsZXM7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIGFsbCBsaXN0IHJlcG9ydCBjaGFydHMuXG4gKiBAcGFyYW0gdmlld3MgVGhlIGxpc3QgcmVwb3J0IHZpZXdzIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgY2hhcnRzXG4gKi9cbmZ1bmN0aW9uIGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ2hhcnRWaXN1YWxpemF0aW9uW10ge1xuXHRjb25zdCBjaGFydHM6IENoYXJ0VmlzdWFsaXphdGlvbltdID0gW107XG5cdHZpZXdzLmZvckVhY2goZnVuY3Rpb24gKHZpZXcpIHtcblx0XHRpZiAoIWlzVmlld0RlZmluaXRpb25PZlR5cGU8Q3VzdG9tVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5DdXN0b20pKSB7XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IGlzVmlld0RlZmluaXRpb25PZlR5cGU8Q29tYmluZWRWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkKVxuXHRcdFx0XHQ/IHZpZXcucHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNcblx0XHRcdFx0OiB2aWV3LnByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucztcblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cbmNvbnN0IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD5cbik6IFJlY29yZDxzdHJpbmcsIERlZmF1bHRPcGVyYXRvcltdIHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBEZWZhdWx0T3BlcmF0b3JbXSB8IHVuZGVmaW5lZD4gPSB7fTtcblx0Zm9yIChjb25zdCBmaWx0ZXJGaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcblx0XHRpZiAoZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM/Lmxlbmd0aCkge1xuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXNbZmlsdGVyRmllbGRdID0gZmlsdGVyRmllbGRzW2ZpbHRlckZpZWxkXT8uc2V0dGluZ3M/LmRlZmF1bHRWYWx1ZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZWZhdWx0U2VtYW50aWNEYXRlcztcbn07XG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBjdXJyZW50IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gaXNBTFBcbiAqIEByZXR1cm5zIEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXNBTFA6IGJvb2xlYW5cbik6IExpbmVJdGVtIHwgUHJlc2VudGF0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RGVmYXVsdFRlbXBsYXRlQW5ub3RhdGlvblBhdGgoKTtcblx0Y29uc3Qgc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBlcnJvck1lc3NhZ2VGb3JBTFAgPSBcIkFMUCBmbGF2b3IgbmVlZHMgYm90aCBjaGFydCBhbmQgdGFibGUgdG8gbG9hZCB0aGUgYXBwbGljYXRpb25cIjtcblx0aWYgKHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0XCIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBpc0FMUCkpIHtcblx0XHRcdFx0aWYgKGlzQUxQKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZUZvckFMUCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGlzQUxQKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fSBlbHNlIGlmIChpc0FMUCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZUZvckFMUCk7XG5cdFx0fVxuXHR9XG5cdGNvbnN0IHByZXNlbnRhdGlvblZhcmlhbnQgPSBlbnRpdHlUeXBlLmFubm90YXRpb25zPy5VST8uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0aWYgKHByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRpZiAoaXNQcmVzZW50YXRpb25Db21wbGlhbnQocHJlc2VudGF0aW9uVmFyaWFudCwgaXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9IGVsc2UgaWYgKGlzQUxQKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlRm9yQUxQKTtcblx0XHR9XG5cdH1cblx0aWYgKCFpc0FMUCkge1xuXHRcdHJldHVybiBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB2aWV3IGZvciB0aGUgYW5hbHl0aWNhbCBsaXN0IHBhZ2UuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9ucyBUaGUgZGF0YSB2aXN1YWxpemF0aW9ucyB0byBjb25maWd1cmVcbiAqIEBwYXJhbSBkZWZhdWx0UGF0aCBUaGUgZGVmYXVsdCBwYXRoIG9mIHRoZSBwYWdlXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlIEFMUCB2aWV3IGRlZmluaXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0cHJlc2VudGF0aW9uczogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uW10sXG5cdGRlZmF1bHRQYXRoOiBDb21iaW5lZFZpZXdEZWZhdWx0UGF0aCB8IHVuZGVmaW5lZCxcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbiA9IGNyZWF0ZUFscFZpc3VhbGl6YXRpb24ocHJlc2VudGF0aW9uc1swXSwgdHJ1ZSk7XG5cdGNvbnN0IHNlY29uZGFyeVZpc3VhbGl6YXRpb24gPSBjcmVhdGVBbHBWaXN1YWxpemF0aW9uKHByZXNlbnRhdGlvbnNbMV0gPyBwcmVzZW50YXRpb25zWzFdIDogcHJlc2VudGF0aW9uc1swXSwgZmFsc2UpO1xuXHRpZiAocHJpbWFyeVZpc3VhbGl6YXRpb24gJiYgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbikge1xuXHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRwcmltYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdHNlY29uZGFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHR0YWJsZUNvbnRyb2xJZDpcblx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1swXT8udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGVcblx0XHRcdFx0XHQ/IHNlY29uZGFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0uYW5ub3RhdGlvbj8uaWRcblx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRjaGFydENvbnRyb2xJZDpcblx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0/LnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ID8gcHJpbWFyeVZpc3VhbGl6YXRpb24udmlzdWFsaXphdGlvbnNbMF0uaWQgOiBcIlwiLFxuXHRcdFx0ZGVmYXVsdFBhdGgsXG5cdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkNvbWJpbmVkLFxuXHRcdFx0dmlzaWJsZTogaXNWaWV3U2V0dGluZ3NPZlR5cGU8TXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuTXVsdGkpID8gdmlld1NldHRpbmdzLnZpc2libGUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHRcdHJldHVybiB2aWV3O1xuXHR9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHZpc3VhbGl6YXRpb25zIGZvciBhIHNpbmdsZSB2aXN1YWxpemF0aW9uIHZpZXcuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgQUxQIHZpc3VhbGl6YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbixcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IFNpbmdsZVZpZXdEZWZpbml0aW9uIHtcblx0Y29uc3QgdGFibGVJZCA9IGdldFZpZXdDb250cm9sKHByZXNlbnRhdGlvbiwgVmlzdWFsaXphdGlvblR5cGUuVGFibGUpPy5hbm5vdGF0aW9uLmlkO1xuXHRjb25zdCBiYXNlU2V0dGluZ3MgPSB7XG5cdFx0cHJlc2VudGF0aW9uLFxuXHRcdHRpdGxlOiBnZXRWaWV3VGl0bGUoY29udmVydGVyQ29udGV4dCwgdmlld1NldHRpbmdzKSxcblx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aDogZ2V0Vmlld1NlbGVjdGlvblZhcmlhbnQodmlld1NldHRpbmdzKSxcblx0XHR2aXNpYmxlOiBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkgPyB2aWV3U2V0dGluZ3MudmlzaWJsZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRpZiAodGFibGVJZCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5iYXNlU2V0dGluZ3MsXG5cdFx0XHQuLi57XG5cdFx0XHRcdHRhYmxlQ29udHJvbElkOiB0YWJsZUlkLFxuXHRcdFx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdC4uLmJhc2VTZXR0aW5ncyxcblx0XHQuLi57XG5cdFx0XHRjaGFydENvbnRyb2xJZDogZ2V0Vmlld0NvbnRyb2wocHJlc2VudGF0aW9uLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCk/LmlkLFxuXHRcdFx0dmlld1R5cGU6IFZpZXdEZWZpbml0aW9uVHlwZS5TaW5nbGVDaGFydFxuXHRcdH1cblx0fTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdmlzdWFsaXphdGlvbnMgZm9yIHRoZSBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSBpc1ByaW1hcnkgSXMgYSBwcmltYXJ5IHByZXNlbnRhdGlvblxuICogQHJldHVybnMgVGhlIEFMUCB2aXN1YWxpemF0aW9uIGRlZmluaXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQWxwVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiwgaXNQcmltYXJ5PzogYm9vbGVhbik6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRjb25zdCBkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKFxuXHRcdCh2aXN1YWxpemF0aW9uKTogdmlzdWFsaXphdGlvbiBpcyBUYWJsZVZpc3VhbGl6YXRpb24gfCBDaGFydFZpc3VhbGl6YXRpb24gPT5cblx0XHRcdCghIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB8fFxuXHRcdFx0KCFpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSlcblx0KTtcblxuXHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRwcmVzZW50YXRpb25DcmVhdGVkLnZpc3VhbGl6YXRpb25zID0gW2RlZmF1bHRWaXN1YWxpemF0aW9uXTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBtZXNzYWdlSW5mbyA9IGlzUHJpbWFyeSA/IHsgdmlzdWFsaXphdGlvbjogXCJQcmltYXJ5XCIsIHR5cGU6IFwiY2hhcnRcIiB9IDogeyB2aXN1YWxpemF0aW9uOiBcIlNlY29uZGFyeVwiLCB0eXBlOiBcInRhYmxlXCIgfTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYCR7bWVzc2FnZUluZm8udmlzdWFsaXphdGlvbn0gdmlzdWFsaXphdGlvbiBuZWVkcyB2YWxpZCAke21lc3NhZ2VJbmZvLnR5cGV9YCk7XG5cdH1cblx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgYW5hbHl0aWNhbCBsaXN0IHBhZ2UuXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVkIGNvbnRleHRcbiAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBpc1ByaW1hcnkgSXMgYSBwcmltYXJ5IHByZXNlbnRhdGlvblxuICogQHJldHVybnMgVGhlIEFMUCBwcmVzZW50YXRpb24gZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRBbHBQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0aXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRpc1ByaW1hcnk6IGJvb2xlYW5cbik6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiB7XG5cdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb247XG5cdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRjb25zdCBhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0aWYgKGFubm90YXRpb24gfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdHJldHVybiBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRhbm5vdGF0aW9uID8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSkgOiBcIlwiLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHtcblx0XHRcdFx0aXNDb25kZW5zZWRUYWJsZUxheW91dENvbXBsaWFudDogdHJ1ZSxcblx0XHRcdFx0c2hvdWxkQ3JlYXRlVGVtcGxhdGVDaGFydFZpc3VhbGl6YXRpb246IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBBbm5vdGF0aW9uIFBhdGggZm9yIHRoZSAke2lzUHJpbWFyeSA/IFwicHJpbWFyeVwiIDogXCJzZWNvbmRhcnlcIn0gdmlzdWFsaXphdGlvbiBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0IGlzIG5vdCBmb3VuZGBcblx0XHQpO1xuXHR9XG59O1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIG11bHRpIHZpZXcgY29uZmlndXJhdGlvbiB3aXRoIGFkZGl0aW9uYWwga2V5cy5cbiAqIEBwYXJhbSBwcmVzZW50YXRpb24gVGhlIHByZXNlbnRhdGlvbiB0byBjb25maWd1cmVcbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKi9cbmNvbnN0IGNvbmZpZ3VyZU11bHRpVmlld3MgPSBmdW5jdGlvbiAocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIHZpZXdTZXR0aW5nczogTXVsdGlEZWZhdWx0Vmlld1NldHRpbmdzKTogdm9pZCB7XG5cdC8vIE5lZWQgdG8gbG9vcCBvbiB0YWJsZSBpbnRvIHZpZXdzIHNpbmNlIG11bHRpIHRhYmxlIG1vZGUgZ2V0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gKGhpZGRlbiBmaWx0ZXJzIG9yIFRhYmxlIElkKVxuXHRmb3IgKGNvbnN0IHZpc3VhbGl6YXRpb24gb2YgcHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0c3dpdGNoICh2aXN1YWxpemF0aW9uLnR5cGUpIHtcblx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycyB8fCB7fTtcblx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdGlmICghdmlld1NldHRpbmdzLmtlZXBQcmV2aW91c1BlcnNvbmFsaXphdGlvbikge1xuXHRcdFx0XHRcdC8vIE5lZWQgdG8gb3ZlcnJpZGUgVGFibGUgSWQgdG8gbWF0Y2ggd2l0aCBUYWIgS2V5IChjdXJyZW50bHkgb25seSB0YWJsZSBpcyBtYW5hZ2VkIGluIG11bHRpcGxlIHZpZXcgbW9kZSlcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQgPSBnZXRUYWJsZUlEKHZpZXdTZXR0aW5ncy5rZXkgPz8gXCJcIiwgXCJMaW5lSXRlbVwiKTtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uLmFubm90YXRpb24uYXBpSWQgPSBnZW5lcmF0ZShbdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkLCBcIlRhYmxlXCJdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ6XG5cdFx0XHRcdHZpc3VhbGl6YXRpb24uaWQgPSBnZXRDaGFydElEKHZpZXdTZXR0aW5ncy5rZXkgfHwgXCJcIiwgXCJDaGFydFwiKTtcblx0XHRcdFx0dmlzdWFsaXphdGlvbi5tdWx0aVZpZXdzID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgY3VzdG9tIHZpZXcgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgY3VzdG9tIHZpZXcgZGVmaW5pdGlvblxuICovXG5jb25zdCBnZXRDdXN0b21WaWV3ID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogQ3VzdG9tVmlld1NldHRpbmdzKTogQ3VzdG9tVmlld0RlZmluaXRpb24ge1xuXHRyZXR1cm4ge1xuXHRcdHRpdGxlOiB2aWV3U2V0dGluZ3MubGFiZWwsXG5cdFx0ZnJhZ21lbnQ6IHZpZXdTZXR0aW5ncy50ZW1wbGF0ZSxcblx0XHR0eXBlOiB2aWV3U2V0dGluZ3MudHlwZSxcblx0XHRjdXN0b21UYWJJZDogZ2V0Q3VzdG9tVGFiSUQodmlld1NldHRpbmdzLmtleSA/PyBcIlwiKSxcblx0XHR2aXNpYmxlOiB2aWV3U2V0dGluZ3MudmlzaWJsZSxcblx0XHR2aWV3VHlwZTogVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbVxuXHR9O1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIGNvbnRyb2wgb2YgdGhlIHZpZXcuXG4gKiBAcGFyYW0gcHJlc2VudGF0aW9uIFRoZSBwcmVzZW50YXRpb24gb2YgdGhlIHZpZXdcbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uVHlwZSBUaGUgdHlwZSBvZiB0aGUgdmlzdWFsaXphdGlvbiB0byBmaW5kXG4gKiBAcmV0dXJucyBUaGUgdmlzdWFsaXphdGlvbiBpZiB0aGUgdHlwZSBtYXRjaGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IGdldFZpZXdDb250cm9sID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSB8IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0Pihcblx0cHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdHZpc3VhbGl6YXRpb25UeXBlOiBUXG4pOiBMclZpc3VhbGl6YXRpb25UeXBlPFQ+IHtcblx0cmV0dXJuIHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5maW5kKCh2aXN1YWxpemF0aW9uKSA9PiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IHZpc3VhbGl6YXRpb25UeXBlKSBhcyBMclZpc3VhbGl6YXRpb25UeXBlPFQ+O1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aXRsZSBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSB0aXRsZVxuICovXG5jb25zdCBnZXRWaWV3VGl0bGUgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3Ncbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbih2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblBhdGgpLmFubm90YXRpb24gYXNcblx0XHRcdHwgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0fCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBjb25maWd1cmVkIFNlbGVjdGlvblZhcmlhbnQgIG9mIHRoZSB2aWV3LlxuICogQHBhcmFtIHZpZXdTZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2YgdGhlIHZpZXdcbiAqIEByZXR1cm5zIFRoZSBTZWxlY3Rpb25WYXJpYW50IGlmIHRoZXJlIGlzIG9uZSwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5jb25zdCBnZXRWaWV3U2VsZWN0aW9uVmFyaWFudCA9IGZ1bmN0aW9uICh2aWV3U2V0dGluZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSkpIHtcblx0XHRyZXR1cm4gdmlld1NldHRpbmdzLmFubm90YXRpb24gJiZcblx0XHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50Pih2aWV3U2V0dGluZ3MuYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGUpXG5cdFx0XHQ/IGBAJHt2aWV3U2V0dGluZ3MuYW5ub3RhdGlvbi5TZWxlY3Rpb25WYXJpYW50Py5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdfWBcblx0XHRcdDogdmlld1NldHRpbmdzLmFubm90YXRpb25QYXRoO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIHZpc3VhbGl6YXRpb24gcGF0aCBvZiB0aGUgdmlldy5cbiAqIEBwYXJhbSB2aWV3U2V0dGluZ3MgVGhlIHNldHRpbmdzIG9mIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBUaGUgU2VsZWN0aW9uVmFyaWFudCBpZiB0aGVyZSBpcyBvbmUsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuY29uc3QgZ2V0Vmlld1Zpc3VhbGl6YXRpb25QYXRoID0gZnVuY3Rpb24gKHZpZXdTZXR0aW5nczogVmlld0NvbnZlcnRlclNldHRpbmdzKTogc3RyaW5nIHtcblx0aWYgKCFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDdXN0b21WaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5DdXN0b20pKSB7XG5cdFx0cmV0dXJuICFpc1ZpZXdTZXR0aW5nc09mVHlwZTxDb21iaW5lZFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkNvbWJpbmVkKSAmJiB2aWV3U2V0dGluZ3MuYW5ub3RhdGlvblxuXHRcdFx0PyB2aWV3U2V0dGluZ3MuY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5hbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0XHR2aWV3U2V0dGluZ3MuY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRcdCAgKVxuXHRcdFx0OiBcIlwiO1xuXHR9XG5cdHJldHVybiBcIlwiO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IHJlcG9ydCB2aWV3IGRlZmluaXRpb24uXG4gKiBAcGFyYW0gdmlld1NldHRpbmdzIFRoZSBzZXR0aW5ncyBvZiB0aGUgdmlld1xuICogQHJldHVybnMgVGhlICBkZWZpbml0aW9uXG4gKi9cbmNvbnN0IGdldFZpZXcgPSBmdW5jdGlvbiAodmlld1NldHRpbmdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRpZiAoIWlzVmlld1NldHRpbmdzT2ZUeXBlPEN1c3RvbVZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLkN1c3RvbSkpIHtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gdmlld1NldHRpbmdzLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uc3QgbXVsdGlWaWV3U2V0dGluZ3MgPSBpc1ZpZXdTZXR0aW5nc09mVHlwZTxNdWx0aURlZmF1bHRWaWV3U2V0dGluZ3M+KHZpZXdTZXR0aW5ncywgVmlld1NldHRpbmdzVHlwZS5NdWx0aSlcblx0XHRcdD8ge1xuXHRcdFx0XHRcdGFzc29jaWF0ZWRTZWxlY3Rpb25WYXJpYW50OiB2aWV3U2V0dGluZ3Muc2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRpc01hY3JvT3JNdWx0aXBsZVZpZXc6IHRydWVcblx0XHRcdCAgfVxuXHRcdFx0OiB7fTtcblxuXHRcdGNvbnN0IHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihnZXRWaWV3VmlzdWFsaXphdGlvblBhdGgodmlld1NldHRpbmdzKSwgY29udmVydGVyQ29udGV4dCwge1xuXHRcdFx0Li4ueyBpc0NvbmRlbnNlZFRhYmxlTGF5b3V0Q29tcGxpYW50OiB0cnVlIH0sXG5cdFx0XHQuLi5tdWx0aVZpZXdTZXR0aW5nc1xuXHRcdH0pO1xuXG5cdFx0aWYgKFxuXHRcdFx0IWlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpICYmXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMubGVuZ3RoID09PSAyICYmXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlXG5cdFx0KSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIsIHZpZXdTZXR0aW5ncyk7XG5cdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPENvbWJpbmVkVmlld1NldHRpbmdzPih2aWV3U2V0dGluZ3MsIFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWQpKSB7XG5cdFx0XHRjb25zdCB7IHByaW1hcnksIHNlY29uZGFyeSB9ID0gdmlld1NldHRpbmdzO1xuXHRcdFx0aWYgKHByaW1hcnk/Lmxlbmd0aCAmJiBzZWNvbmRhcnk/Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3ID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0QWxwUHJlc2VudGF0aW9uKGNvbnZlcnRlckNvbnRleHQsIHByaW1hcnlbMF0sIHRydWUpLCBnZXRBbHBQcmVzZW50YXRpb24oY29udmVydGVyQ29udGV4dCwgc2Vjb25kYXJ5WzBdLCBmYWxzZSldLFxuXHRcdFx0XHRcdHZpZXdTZXR0aW5ncy5kZWZhdWx0UGF0aCxcblx0XHRcdFx0XHR2aWV3U2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNlY29uZGFyeUl0ZW1zIGluIHRoZSBWaWV3cyBpcyBub3QgcHJlc2VudFwiKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzVmlld1NldHRpbmdzT2ZUeXBlPE11bHRpRGVmYXVsdFZpZXdTZXR0aW5ncz4odmlld1NldHRpbmdzLCBWaWV3U2V0dGluZ3NUeXBlLk11bHRpKSkge1xuXHRcdFx0Y29uZmlndXJlTXVsdGlWaWV3cyhwcmVzZW50YXRpb24sIHZpZXdTZXR0aW5ncyk7XG5cdFx0fVxuXHRcdGNvbnN0IHZpZXcgPSBjcmVhdGVTaW5nbGVWaXN1YWxpemF0aW9uVmlldyhjb252ZXJ0ZXJDb250ZXh0LCBwcmVzZW50YXRpb24sIHZpZXdTZXR0aW5ncyk7XG5cdFx0dmlldy5wcmVzZW50YXRpb24uaW5NdWx0aVZpZXcgPSAhIW11bHRpVmlld1NldHRpbmdzLmlzTWFjcm9Pck11bHRpcGxlVmlldztcblxuXHRcdHJldHVybiB2aWV3O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRDdXN0b21WaWV3KHZpZXdTZXR0aW5ncyk7XG5cdH1cbn07XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCByZXBvcnQgdmlldyBkZWZpbml0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIG11bHRpcGxlVmlld0NvbmZpZyBUaGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiByZWxhdGVkIG9mIHRoZSBtdWx0aSB2aWV3c1xuICogQHJldHVybnMgVGhlICBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRWaWV3cyA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRtdWx0aXBsZVZpZXdDb25maWc6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0aWYgKG11bHRpcGxlVmlld0NvbmZpZykge1xuXHRcdG11bHRpcGxlVmlld0NvbmZpZy5wYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRpZiAobWFuaWZlc3RXcmFwcGVyLmlzQ29tYmluZWRWaWV3Q29uZmlndXJhdGlvbihwYXRoKSkge1xuXHRcdFx0XHRpZiAobXVsdGlwbGVWaWV3Q29uZmlnLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aCxcblx0XHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtYW5pZmVzdFdyYXBwZXIuaXNDdXN0b21WaWV3Q29uZmlndXJhdGlvbihwYXRoKSkge1xuXHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdGxhYmVsOiBwYXRoLmxhYmVsLFxuXHRcdFx0XHRcdHRlbXBsYXRlOiBwYXRoLnRlbXBsYXRlLFxuXHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ3VzdG9tLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdDb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4oXG5cdFx0XHRcdFx0XHRwYXRoLmNvbnRleHRQYXRoIHx8IChwYXRoLmVudGl0eVNldCAmJiBgLyR7cGF0aC5lbnRpdHlTZXR9YCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRlbnRpdHlUeXBlID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgU2VsZWN0aW9uVmFyaWFudCB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGFubm90YXRpb24gPVxuXHRcdFx0XHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnRcblx0XHRcdFx0XHRcdFx0XHQ/IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIHZpZXdDb252ZXJ0ZXJDb250ZXh0LCBmYWxzZSlcblx0XHRcdFx0XHRcdFx0XHQ6IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogdGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50ID8gdGFyZ2V0QW5ub3RhdGlvbiA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQZXJzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUGVyc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGUsXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuTXVsdGlcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBjcmVhdGVBbHBWaWV3U2V0dGluZ3MoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHR0eXBlOiBWaWV3U2V0dGluZ3NUeXBlLkRlZmF1bHRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbnZlcnRlckNvbmZpZ3MubWFwKCh2aWV3Q29udmVydGVyQ29uZmlnKSA9PiB7XG5cdFx0cmV0dXJuIGdldFZpZXcodmlld0NvbnZlcnRlckNvbmZpZyk7XG5cdH0pO1xufTtcbmNvbnN0IGdldE11bHRpVmlld3NDb250cm9sID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXVxuKTogTXVsdGlWaWV3c0NvbnRyb2xDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRpZiAodmlld3MubGVuZ3RoID4gMSAmJiAhaGFzTXVsdGlWaXN1YWxpemF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzaG93VGFiQ291bnRzOiB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24uc2hvd0NvdW50cyA/PyBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCkgOiB1bmRlZmluZWQsIC8vIHdpdGggbXVsdGkgRW50aXR5U2V0cywgdGFiIGNvdW50cyBhcmUgZGlzcGxheWVkIGJ5IGRlZmF1bHRcblx0XHRcdGlkOiBnZXRJY29uVGFiQmFySUQoKVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgc2V0dGluZ3MgcmVsYXRlZCB0byBhbiBBTFAgdmlldy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZWQgY29udGV4dFxuICogQHBhcmFtIHZpZXdDb25maWdzIFRoZSBjb25maWdzIG9mIHRoZSBvdGhlciBsaXN0IHJlcG9ydCB2aWV3c1xuICogQHJldHVybnMgVGhlIGNvbmZpZ3Mgb2YgdGhlIGxpc3QgcmVwb3J0IHZpZXdzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFscFZpZXdTZXR0aW5ncyhcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHR2aWV3Q29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW11cbik6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuRGVmYXVsdFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeSA9IFt7IGFubm90YXRpb25QYXRoOiBcIkBcIiArIGNoYXJ0LnRlcm0gfV07XG5cdFx0XHRjb25zdCBzZWNvbmRhcnkgPSBbeyBhbm5vdGF0aW9uUGF0aDogXCJAXCIgKyB0YWJsZS50ZXJtIH1dO1xuXHRcdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHByaW1hcnk6IHByaW1hcnksXG5cdFx0XHRcdHNlY29uZGFyeTogc2Vjb25kYXJ5LFxuXHRcdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCIsXG5cdFx0XHRcdHR5cGU6IFZpZXdTZXR0aW5nc1R5cGUuQ29tYmluZWRcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIG5lZWRzIGJvdGggY2hhcnQgYW5kIHRhYmxlIHRvIGxvYWQgdGhlIGFwcGxpY2F0aW9uXCIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbmZpZ3M7XG59XG5mdW5jdGlvbiBoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpO1xufVxuZXhwb3J0IGNvbnN0IGdldEhlYWRlckFjdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0bGV0IGhlYWRlckFjdGlvbnMgPSBpbnNlcnRDdXN0b21FbGVtZW50czxCYXNlQWN0aW9uPihcblx0XHRbXSxcblx0XHRnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpLmFjdGlvbnNcblx0KTtcblx0Ly8gQXBwbHkgcHJpbWFyeSBhY3Rpb24gb3ZlcmZsb3cgcHJvdGVjdGlvblxuXHRoZWFkZXJBY3Rpb25zID0gQWN0aW9uVXRpbGl0aWVzLmVuc3VyZVByaW1hcnlBY3Rpb25OZXZlck92ZXJmbG93cyhoZWFkZXJBY3Rpb25zKSBhcyBDdXN0b21BY3Rpb25bXTtcblx0Ly8gQWRkIHRvb2xiYXIgc2VwYXJhdG9ycyBpbiBjYXNlIG9mIGdyb3VwZWQgYWN0aW9uc1xuXHRjb25zdCBvdmVyZmxvd0dyb3Vwc0NvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJPdmVyZmxvd0dyb3VwcygpO1xuXHRoZWFkZXJBY3Rpb25zID0gYWRkU2VwYXJhdG9ycyhoZWFkZXJBY3Rpb25zLCBvdmVyZmxvd0dyb3Vwc0NvbmZpZykgYXMgQ3VzdG9tQWN0aW9uW107XG5cdHJldHVybiBoZWFkZXJBY3Rpb25zO1xufTtcblxuLyoqXG4gKiBTZXRzIHRoZSBmaWx0ZXJCYXJJZCBvbiB0aGUgc2NlbmFyaW8gd2l0aCBtdWx0aS1lbnRpdHkgc2V0cy5cbiAqIEBwYXJhbSB2aWV3cyBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgbGlzdCByZXBvcnQgdmlld3NcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICovXG5jb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbiAodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdLCBmaWx0ZXJCYXJJZDogc3RyaW5nKTogdm9pZCB7XG5cdHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRpZiAoXG5cdFx0XHQhaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDdXN0b21WaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLkN1c3RvbSkgJiZcblx0XHRcdCFpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZClcblx0XHQpIHtcblx0XHRcdHZpZXcucHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zLmZvckVhY2goKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCAmJiB2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCAhPT0gZmlsdGVyQmFySWQpIHtcblx0XHRcdFx0XHR2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi5maWx0ZXJJZCA9IGZpbHRlckJhcklkO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBMaXN0UmVwb3J0RGVmaW5pdGlvbiBmb3IgbXVsdGlwbGUgZW50aXR5IHNldHMgKG11bHRpcGxlIHRhYmxlIG1vZGUpLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gY2FwYWJpbGl0aWVzIFRoZSBwcmVkZWZpbmVkIGVudmlyb25tZW50IGNhcGFiaWxpdGllc1xuICogQHJldHVybnMgVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRjYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKCFzQ29udGV4dFBhdGgpIHtcblx0XHQvLyBJZiB3ZSBkb24ndCBoYXZlIGFuIGVudGl0eVNldCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgYW4gaXNzdWUgSSdkIHNheVxuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiQW4gRW50aXR5U2V0IGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gZGlzcGxheSBhIExpc3RSZXBvcnQsIHBsZWFzZSBhZGp1c3QgeW91ciBgZW50aXR5U2V0YCBwcm9wZXJ0eSB0byBwb2ludCB0byBvbmUuXCJcblx0XHQpO1xuXHR9XG5cdGNvbnN0IG1hbmlmZXN0V3JhcHBlciA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCk7XG5cdGNvbnN0IHZpZXdzRGVmaW5pdGlvbiA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzID0gZ2V0Vmlld3MoY29udmVydGVyQ29udGV4dCwgdmlld3NEZWZpbml0aW9uKTtcblx0Y29uc3QgbHJUYWJsZVZpc3VhbGl6YXRpb25zID0gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IGxyQ2hhcnRWaXN1YWxpemF0aW9ucyA9IGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSgodGFibGUpID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBkeW5hbWljTGlzdFJlcG9ydElkID0gZ2V0RHluYW1pY0xpc3RSZXBvcnRJRCgpO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IGdldEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgcGFnZVZhcmlhbnRNYW5hZ2VtZW50SUQgPSBnZXRQYWdlVmFyaWFudE1hbmFnZW1lbnRJRCgpO1xuXHRjb25zdCBmYkNvbmZpZyA9IG1hbmlmZXN0V3JhcHBlci5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGZpbHRlckluaXRpYWxMYXlvdXQgPSBmYkNvbmZpZz8uaW5pdGlhbExheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmluaXRpYWxMYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCBmaWx0ZXJMYXlvdXQgPSBmYkNvbmZpZz8ubGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8ubGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgdXNlU2VtYW50aWNEYXRlUmFuZ2UgPSBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSAhPT0gdW5kZWZpbmVkID8gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgOiB0cnVlO1xuXHRjb25zdCBzaG93Q2xlYXJCdXR0b24gPSBmYkNvbmZpZy5zaG93Q2xlYXJCdXR0b24gIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnNob3dDbGVhckJ1dHRvbiA6IGZhbHNlO1xuXHRjb25zdCBjb25maWcgPSBnZXRDb250ZW50QXJlYUlkKHZpZXdzKTtcblx0aWYgKGNvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBjb25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gY29uZmlnLnRhYmxlSWQ7XG5cdH1cblx0Y29uc3QgdXNlSGlkZGVuRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLnVzZUhpZGRlbkZpbHRlckJhcigpO1xuXHQvLyBDaGFydCBoYXMgYSBkZXBlbmRlbmN5IHRvIGZpbHRlciBiYXIgKGlzc3VlIHdpdGggbG9hZGluZyBkYXRhKS4gT25jZSByZXNvbHZlZCwgdGhlIGNoZWNrIGZvciBjaGFydCBzaG91bGQgYmUgcmVtb3ZlZCBoZXJlLlxuXHQvLyBVbnRpbCB0aGVuLCBoaWRpbmcgZmlsdGVyIGJhciBpcyBub3cgYWxsb3dlZCBpZiBhIGNoYXJ0IGlzIGJlaW5nIHVzZWQgb24gTFIuXG5cdGNvbnN0IGhpZGVGaWx0ZXJCYXIgPSAobWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgfHwgdXNlSGlkZGVuRmlsdGVyQmFyKSAmJiBzaW5nbGVDaGFydElkID09PSBcIlwiO1xuXHRjb25zdCBsckZpbHRlclByb3BlcnRpZXMgPSBnZXRTZWxlY3Rpb25GaWVsZHMoY29udmVydGVyQ29udGV4dCwgbHJUYWJsZVZpc3VhbGl6YXRpb25zKTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNlbGVjdGlvbkZpZWxkcztcblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzID0gbHJGaWx0ZXJQcm9wZXJ0aWVzLnNQcm9wZXJ0eUluZm87XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IGdldEZpbHRlckJhckhpZGVCYXNpY1NlYXJjaChsclRhYmxlVmlzdWFsaXphdGlvbnMsIGxyQ2hhcnRWaXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG11bHRpVmlld0NvbnRyb2wgPSBnZXRNdWx0aVZpZXdzQ29udHJvbChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBtdWx0aVZpZXdDb250cm9sID8gdW5kZWZpbmVkIDogZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoaGFzTXVsdGlwbGVFbnRpdHlTZXRzKSB7XG5cdFx0Y2hlY2tDaGFydEZpbHRlckJhcklkKHZpZXdzLCBmaWx0ZXJCYXJJZCk7XG5cdH1cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdC8vcGljayB1cCB0aGUgdGFibGUgQVBJIGlkIGZvciB0aGUgdGFibGUsIHNpbmNlIHRoYXQgaXMgdGhlIGV4dGVybmFsIGNvbnRyb2wuXG5cdFx0XHQvLyB2YXJpYW50IG1hbmFnZW1lbnQgc3RpbGwgd29ya3MgYmVjYXVzZSBpdCBjYW4gaGFuZGxlIGEgY29udHJvbCB3aGVyZSB0aGUgY2hpbGQgaGFzIGZsZXggY2hhbmdlcy5cblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uYXBpSWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hcGlJZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gW10gOiBbZmlsdGVyQmFySWRdKSxcblx0XHQuLi4obWFuaWZlc3RXcmFwcGVyLmdldFZhcmlhbnRNYW5hZ2VtZW50KCkgIT09IFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sID8gdmlzdWFsaXphdGlvbklkcyA6IFtdKSxcblx0XHQuLi4obXVsdGlWaWV3Q29udHJvbCA/IFttdWx0aVZpZXdDb250cm9sLmlkXSA6IFtdKVxuXHRdO1xuXHRjb25zdCBzdGlja3lTdWJoZWFkZXJQcm92aWRlciA9XG5cdFx0bXVsdGlWaWV3Q29udHJvbCAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBtdWx0aVZpZXdDb250cm9sLmlkIDogdW5kZWZpbmVkO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgb24gdGhlIG1haW4gZW50aXR5IHNldCBhcmUgVHJlZSBvciBhbmFseXRpY2FsIHRhYmxlcy4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZHJhZnQgZWRpdFN0YXRlIGZpbHRlciBzaGFsbCBub3QgYmUgc2hvd25cblx0Y29uc3QgZGlzYWJsZURyYWZ0RWRpdFN0YXRlRmlsdGVyID1cblx0XHQoY2FwYWJpbGl0aWVzPy5IaWRkZW5EcmFmdCBhcyBIaWRkZW5EcmFmdCk/LmVuYWJsZWQgfHxcblx0XHRsclRhYmxlVmlzdWFsaXphdGlvbnMuZXZlcnkoKHRhYmxlVmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGFibGVWaXN1YWxpemF0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fFxuXHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uZW5hYmxlQW5hbHl0aWNzIHx8XG5cdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24gIT09IHNDb250ZXh0UGF0aFxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdG11bHRpVmlld3NDb250cm9sOiBtdWx0aVZpZXdDb250cm9sLFxuXHRcdHN0aWNreVN1YmhlYWRlclByb3ZpZGVyLFxuXHRcdHNpbmdsZVRhYmxlSWQsXG5cdFx0c2luZ2xlQ2hhcnRJZCxcblx0XHRkeW5hbWljTGlzdFJlcG9ydElkLFxuXHRcdGhlYWRlckFjdGlvbnMsXG5cdFx0ZWFzeUZpbHRlckVuYWJsZWQ6ICFoaWRlRmlsdGVyQmFyICYmIGNhcGFiaWxpdGllcz8uTWFnaWNGaWx0ZXJpbmcsXG5cdFx0c2hvd1Bpbm5hYmxlVG9nZ2xlOiBzaG93UGlubmFibGVUb2dnbGUsXG5cdFx0ZmlsdGVyQmFyOiB7XG5cdFx0XHRwcm9wZXJ0eUluZm86IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRcdHNlbGVjdGlvbkZpZWxkcyxcblx0XHRcdGhpZGVCYXNpY1NlYXJjaCxcblx0XHRcdHNob3dDbGVhckJ1dHRvbixcblx0XHRcdGRpc2FibGVEcmFmdEVkaXRTdGF0ZUZpbHRlcixcblx0XHRcdHNob3dEcmFmdEVkaXRTdGF0dXM6IHNob3dEcmFmdEVkaXRTdGF0dXMoY29udmVydGVyQ29udGV4dClcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciAmJiAhdXNlSGlkZGVuRmlsdGVyQmFyID8gXCJcIiA6IGZpbHRlckJhcklkLFxuXHRcdGZpbHRlckNvbmRpdGlvbnM6IHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRkZWZhdWx0U2VtYW50aWNEYXRlczogZGVmYXVsdFNlbWFudGljRGF0ZXNcblx0XHR9LFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiB7XG5cdFx0XHRpZDogZmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCxcblx0XHRcdHBhZ2VJZDogcGFnZVZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBoYXNNdWx0aVZpc3VhbGl6YXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdHRlbXBsYXRlVHlwZTogbWFuaWZlc3RXcmFwcGVyLmdldFRlbXBsYXRlVHlwZSgpLFxuXHRcdHVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdGZpbHRlckluaXRpYWxMYXlvdXQsXG5cdFx0ZmlsdGVyTGF5b3V0LFxuXHRcdGtwaURlZmluaXRpb25zOiBnZXRLUElEZWZpbml0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRoaWRlRmlsdGVyQmFyLFxuXHRcdHVzZUhpZGRlbkZpbHRlckJhcixcblx0XHRjb2xsYXBzZWRIZWFkZXJGcmFnbWVudDogbWFuaWZlc3RXcmFwcGVyLmdldENvbGxhcHNlZEhlYWRlckZyYWdtZW50KCksXG5cdFx0ZXhwYW5kZWRIZWFkZXJGcmFnbWVudDogbWFuaWZlc3RXcmFwcGVyLmdldEV4cGFuZGVkSGVhZGVyRnJhZ21lbnQoKVxuXHR9O1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBjb250ZW50IGFyZWEgaWRzIG9mIHRoZSBsaXN0IHJlcG9ydC5cbiAqIEBwYXJhbSB2aWV3cyBUaGUgZGVmaW5pdGlvbnMgb2YgdGhlIGxpc3QgcmVwb3J0IHZpZXdzXG4gKiBAcmV0dXJucyBUaGUgY29udGVudCBhcmVhIGlkc1xuICovXG5mdW5jdGlvbiBnZXRDb250ZW50QXJlYUlkKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IENvbnRlbnRBcmVhSUQgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzaW5nbGVUYWJsZUlkID1cblx0XHRcdHZpZXdzLmZpbmQoXG5cdFx0XHRcdCh2aWV3KTogdmlldyBpcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9PlxuXHRcdFx0XHRcdChpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPENvbWJpbmVkVmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5Db21iaW5lZCkgfHxcblx0XHRcdFx0XHRcdGlzVmlld0RlZmluaXRpb25PZlR5cGU8U2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbj4odmlldywgVmlld0RlZmluaXRpb25UeXBlLlNpbmdsZVRhYmxlKSkgJiZcblx0XHRcdFx0XHQhIXZpZXcudGFibGVDb250cm9sSWRcblx0XHRcdCk/LnRhYmxlQ29udHJvbElkID8/IFwiXCIsXG5cdFx0c2luZ2xlQ2hhcnRJZCA9XG5cdFx0XHR2aWV3cy5maW5kKFxuXHRcdFx0XHQodmlldyk6IHZpZXcgaXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24gPT5cblx0XHRcdFx0XHQoaXNWaWV3RGVmaW5pdGlvbk9mVHlwZTxDb21iaW5lZFZpZXdEZWZpbml0aW9uPih2aWV3LCBWaWV3RGVmaW5pdGlvblR5cGUuQ29tYmluZWQpIHx8XG5cdFx0XHRcdFx0XHRpc1ZpZXdEZWZpbml0aW9uT2ZUeXBlPFNpbmdsZUNoYXJ0Vmlld0RlZmluaXRpb24+KHZpZXcsIFZpZXdEZWZpbml0aW9uVHlwZS5TaW5nbGVDaGFydCkpICYmXG5cdFx0XHRcdFx0ISF2aWV3LmNoYXJ0Q29udHJvbElkXG5cdFx0XHQpPy5jaGFydENvbnRyb2xJZCA/PyBcIlwiO1xuXHRpZiAoc2luZ2xlVGFibGVJZCB8fCBzaW5nbGVDaGFydElkKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGNoYXJ0SWQ6IHNpbmdsZUNoYXJ0SWQsXG5cdFx0XHR0YWJsZUlkOiBzaW5nbGVUYWJsZUlkXG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW9FS0EsZ0JBQWdCLDBCQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBaEJBLGdCQUFnQjtJQUFoQkEsZ0JBQWdCO0lBQWhCQSxnQkFBZ0I7SUFBQSxPQUFoQkEsZ0JBQWdCO0VBQUEsRUFBaEJBLGdCQUFnQjtFQUFBLElBd0ZoQkMsa0JBQWtCLDBCQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBQSxPQUFsQkEsa0JB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
@@ -12,8 +12,8 @@ import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolki
12
12
  import { compileExpression, getExpressionFromAnnotation } from "sap/fe/base/BindingToolkit";
13
13
  import type ConverterContext from "sap/fe/core/converters/ConverterContext";
14
14
  import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
15
- import type { BaseAction } from "sap/fe/core/converters/controls/Common/Action";
16
- import { getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
15
+ import type { BaseAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
16
+ import { addSeparators, getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
17
17
  import type { ChartVisualization } from "sap/fe/core/converters/controls/Common/Chart";
18
18
  import type { TableVisualization } from "sap/fe/core/converters/controls/Common/Table";
19
19
  import type { CustomElementFilterField, FilterField } from "sap/fe/core/converters/controls/ListReport/FilterBar";
@@ -56,11 +56,13 @@ import {
56
56
  getFilterBarID,
57
57
  getFilterVariantManagementID,
58
58
  getIconTabBarID,
59
+ getPageVariantManagementID,
59
60
  getTableID
60
61
  } from "../helpers/ID";
61
62
 
62
63
  type VariantManagementDefinition = {
63
64
  id: string;
65
+ pageId: string;
64
66
  targetControlIds: string;
65
67
  };
66
68
 
@@ -755,12 +757,16 @@ function hasMultiVisualizations(converterContext: ConverterContext<PageContextPa
755
757
  }
756
758
  export const getHeaderActions = function (converterContext: ConverterContext<PageContextPathTarget>): BaseAction[] {
757
759
  const manifestWrapper = converterContext.getManifestWrapper();
758
- const headerActions = insertCustomElements<BaseAction>(
760
+ let headerActions = insertCustomElements<BaseAction>(
759
761
  [],
760
762
  getActionsFromManifest(manifestWrapper.getHeaderActions(), converterContext).actions
761
763
  );
762
764
  // Apply primary action overflow protection
763
- return ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions);
765
+ headerActions = ActionUtilities.ensurePrimaryActionNeverOverflows(headerActions) as CustomAction[];
766
+ // Add toolbar separators in case of grouped actions
767
+ const overflowGroupsConfig = manifestWrapper.getHeaderOverflowGroups();
768
+ headerActions = addSeparators(headerActions, overflowGroupsConfig) as CustomAction[];
769
+ return headerActions;
764
770
  };
765
771
 
766
772
  /**
@@ -813,6 +819,7 @@ export const convertPage = function (
813
819
  const dynamicListReportId = getDynamicListReportID();
814
820
  const filterBarId = getFilterBarID(sContextPath);
815
821
  const filterVariantManagementID = getFilterVariantManagementID(filterBarId);
822
+ const pageVariantManagementID = getPageVariantManagementID();
816
823
  const fbConfig = manifestWrapper.getFilterConfiguration();
817
824
  const filterInitialLayout = fbConfig?.initialLayout !== undefined ? fbConfig?.initialLayout.toLowerCase() : "compact";
818
825
  const filterLayout = fbConfig?.layout !== undefined ? fbConfig?.layout.toLowerCase() : "compact";
@@ -896,6 +903,7 @@ export const convertPage = function (
896
903
  },
897
904
  variantManagement: {
898
905
  id: filterVariantManagementID,
906
+ pageId: pageVariantManagementID,
899
907
  targetControlIds: targetControlIds.join(",")
900
908
  },
901
909
  hasMultiVisualizations: hasMultiVisualizations(converterContext),