@sapui5/sap.fe.core 1.135.0 → 1.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +3 -1
  5. package/src/sap/fe/core/AppComponent.js +6 -4
  6. package/src/sap/fe/core/AppComponent.ts +3 -1
  7. package/src/sap/fe/core/AppStateHandler.js +8 -6
  8. package/src/sap/fe/core/AppStateHandler.ts +7 -5
  9. package/src/sap/fe/core/CommonUtils.js +4 -1
  10. package/src/sap/fe/core/CommonUtils.ts +12 -2
  11. package/src/sap/fe/core/ExtensionAPI.js +5 -3
  12. package/src/sap/fe/core/ExtensionAPI.ts +4 -2
  13. package/src/sap/fe/core/PageController.js +13 -1
  14. package/src/sap/fe/core/PageController.ts +13 -0
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +13 -5
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +19 -6
  17. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +4 -2
  18. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
  19. package/src/sap/fe/core/controllerextensions/EditFlow.js +58 -14
  20. package/src/sap/fe/core/controllerextensions/EditFlow.ts +71 -11
  21. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +184 -17
  22. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +204 -12
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +12 -3
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +11 -1
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +35 -5
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
  27. package/src/sap/fe/core/controllerextensions/Routing.js +6 -6
  28. package/src/sap/fe/core/controllerextensions/Routing.ts +2 -2
  29. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -11
  30. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +11 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
  33. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +21 -6
  34. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +19 -5
  35. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +17 -14
  36. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +19 -17
  37. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
  38. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
  39. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
  40. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +8 -2
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +1 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +33 -31
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +3 -3
  47. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +4 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +2 -1
  49. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +2 -2
  50. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
  51. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +4 -3
  52. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +7 -2
  53. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
  54. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
  55. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
  56. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
  57. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
  58. package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
  59. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  60. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -8
  61. package/src/sap/fe/core/converters/controls/Common/Action.js +54 -5
  62. package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
  63. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -4
  64. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -4
  65. package/src/sap/fe/core/converters/controls/Common/Form.js +13 -4
  66. package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -3
  67. package/src/sap/fe/core/converters/controls/Common/Table.js +29 -9
  68. package/src/sap/fe/core/converters/controls/Common/Table.ts +38 -8
  69. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +14 -16
  70. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +61 -96
  71. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +62 -13
  72. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +75 -13
  73. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +4 -33
  74. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +4 -44
  75. package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
  76. package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
  77. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +9 -4
  78. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
  79. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +7 -2
  80. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +5 -1
  81. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +29 -7
  82. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
  83. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +34 -16
  84. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +35 -16
  85. package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
  86. package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
  87. package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
  88. package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
  89. package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
  90. package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
  91. package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
  92. package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
  93. package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
  94. package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
  95. package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
  96. package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
  97. package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
  98. package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
  99. package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
  100. package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
  101. package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
  102. package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
  103. package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
  104. package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
  105. package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
  106. package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
  107. package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
  108. package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
  109. package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
  110. package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
  111. package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
  112. package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
  113. package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
  114. package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
  115. package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
  116. package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
  117. package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
  118. package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
  119. package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
  120. package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
  121. package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
  122. package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
  123. package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
  124. package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
  125. package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
  126. package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
  127. package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
  128. package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
  129. package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
  130. package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
  131. package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
  132. package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
  133. package/src/sap/fe/core/fpm/manifest.json +1 -1
  134. package/src/sap/fe/core/helpers/AppStartupHelper.js +24 -3
  135. package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
  136. package/src/sap/fe/core/helpers/BindingHelper.js +3 -2
  137. package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
  138. package/src/sap/fe/core/helpers/DeleteHelper.js +4 -9
  139. package/src/sap/fe/core/helpers/DeleteHelper.ts +3 -8
  140. package/src/sap/fe/core/helpers/ModelHelper.js +14 -4
  141. package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
  142. package/src/sap/fe/core/helpers/PasteHelper.js +38 -39
  143. package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
  144. package/src/sap/fe/core/helpers/WebSocket.js +10 -1
  145. package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
  146. package/src/sap/fe/core/library.js +1 -1
  147. package/src/sap/fe/core/messagebundle.properties +41 -2
  148. package/src/sap/fe/core/messagebundle_ar.properties +23 -2
  149. package/src/sap/fe/core/messagebundle_bg.properties +23 -2
  150. package/src/sap/fe/core/messagebundle_ca.properties +21 -0
  151. package/src/sap/fe/core/messagebundle_cnr.properties +23 -2
  152. package/src/sap/fe/core/messagebundle_cs.properties +21 -0
  153. package/src/sap/fe/core/messagebundle_cy.properties +21 -0
  154. package/src/sap/fe/core/messagebundle_da.properties +23 -2
  155. package/src/sap/fe/core/messagebundle_de.properties +23 -2
  156. package/src/sap/fe/core/messagebundle_el.properties +21 -0
  157. package/src/sap/fe/core/messagebundle_en.properties +23 -2
  158. package/src/sap/fe/core/messagebundle_en_GB.properties +23 -2
  159. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +23 -2
  160. package/src/sap/fe/core/messagebundle_es.properties +21 -0
  161. package/src/sap/fe/core/messagebundle_es_MX.properties +21 -0
  162. package/src/sap/fe/core/messagebundle_et.properties +21 -0
  163. package/src/sap/fe/core/messagebundle_fi.properties +21 -0
  164. package/src/sap/fe/core/messagebundle_fr.properties +22 -1
  165. package/src/sap/fe/core/messagebundle_fr_CA.properties +21 -0
  166. package/src/sap/fe/core/messagebundle_hi.properties +22 -1
  167. package/src/sap/fe/core/messagebundle_hr.properties +24 -3
  168. package/src/sap/fe/core/messagebundle_hu.properties +21 -0
  169. package/src/sap/fe/core/messagebundle_id.properties +21 -0
  170. package/src/sap/fe/core/messagebundle_it.properties +23 -2
  171. package/src/sap/fe/core/messagebundle_iw.properties +21 -0
  172. package/src/sap/fe/core/messagebundle_ja.properties +21 -0
  173. package/src/sap/fe/core/messagebundle_kk.properties +21 -0
  174. package/src/sap/fe/core/messagebundle_ko.properties +21 -0
  175. package/src/sap/fe/core/messagebundle_lt.properties +21 -0
  176. package/src/sap/fe/core/messagebundle_lv.properties +23 -2
  177. package/src/sap/fe/core/messagebundle_mk.properties +21 -0
  178. package/src/sap/fe/core/messagebundle_ms.properties +22 -1
  179. package/src/sap/fe/core/messagebundle_nl.properties +21 -0
  180. package/src/sap/fe/core/messagebundle_no.properties +21 -0
  181. package/src/sap/fe/core/messagebundle_pl.properties +23 -2
  182. package/src/sap/fe/core/messagebundle_pt.properties +23 -2
  183. package/src/sap/fe/core/messagebundle_pt_PT.properties +21 -0
  184. package/src/sap/fe/core/messagebundle_ro.properties +23 -2
  185. package/src/sap/fe/core/messagebundle_ru.properties +22 -1
  186. package/src/sap/fe/core/messagebundle_sh.properties +23 -2
  187. package/src/sap/fe/core/messagebundle_sk.properties +21 -0
  188. package/src/sap/fe/core/messagebundle_sl.properties +23 -2
  189. package/src/sap/fe/core/messagebundle_sr.properties +23 -2
  190. package/src/sap/fe/core/messagebundle_sv.properties +21 -0
  191. package/src/sap/fe/core/messagebundle_th.properties +21 -0
  192. package/src/sap/fe/core/messagebundle_tr.properties +21 -0
  193. package/src/sap/fe/core/messagebundle_uk.properties +23 -2
  194. package/src/sap/fe/core/messagebundle_vi.properties +23 -2
  195. package/src/sap/fe/core/messagebundle_zh_CN.properties +23 -2
  196. package/src/sap/fe/core/messagebundle_zh_TW.properties +21 -0
  197. package/src/sap/fe/core/rootView/Fcl.controller.js +5 -5
  198. package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -4
  199. package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
  200. package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
  201. package/src/sap/fe/core/rootView/RootViewBaseController.js +61 -9
  202. package/src/sap/fe/core/rootView/RootViewBaseController.ts +70 -7
  203. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +28 -12
  204. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
  205. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +7 -1
  206. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
  207. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -2
  208. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -1
  209. package/src/sap/fe/core/services/ShellServicesFactory.js +4 -3
  210. package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
  211. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +27 -3
  212. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
  213. package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
  214. package/src/sap/fe/core/templating/EntitySetHelper.js +198 -58
  215. package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
  216. package/src/sap/fe/core/templating/SemanticObjectHelper.js +6 -7
  217. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +9 -7
@@ -214,11 +214,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
214
214
  const metaModel = bindingContext?.getModel().getMetaModel();
215
215
  const metaPath = metaModel?.getMetaPath(path);
216
216
  const technicalKeys = metaModel?.getObject(`${metaPath}/$Type/$Key`);
217
- for (const element of technicalKeys) {
218
- const keyValue = bindingContext.getObject()[element];
219
- if (keyValue !== technicalKeysObject[element]) {
220
- internalModelContext.setProperty("fclColumnClosed", false);
221
- return true;
217
+ if (technicalKeys) {
218
+ for (const element of technicalKeys) {
219
+ const keyValue = bindingContext.getObject()[element];
220
+ if (keyValue !== technicalKeysObject[element]) {
221
+ internalModelContext.setProperty("fclColumnClosed", false);
222
+ return true;
223
+ }
222
224
  }
223
225
  }
224
226
  //the record opened is not the last seen one : no need to persist the changes, reset to default instead
@@ -348,4 +350,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepEqual", "sap/fe/base/ClassSupp
348
350
  */
349
351
  return AppStateHandler;
350
352
  }, true);
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwibmV3SGFzaCIsInJlcGxhY2VJbm5lckFwcFN0YXRlS2V5IiwibmF2VG9IYXNoIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUFwcFN0YXRlS2V5IiwiYXBwU3RhdGVEYXRhIiwic3RvcmVJbm5lckFwcFN0YXRlQXN5bmMiLCJfZ2V0QXBwU3RhdGVJbmZvIiwiY3JlYXRlQXBwUGFyYW1ldGVycyIsInJlcGxhY2VIYXNoIiwidmlld0lkIiwiYXBwU3RhdGUiLCJjdXJyZW50U3RhdGVUb1VwZGF0ZSIsImRlZXBFcXVhbCIsIm9FcnJvciIsImVycm9yIiwiZmluZEFwcFN0YXRlSW5IYXNoIiwiY3JlYXRlQXBwU3RhdGUiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkFwcFN0YXRlIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwic2tpcE1lcmdlIiwicm9vdENvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJFcnJvciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJvdXRpbmdJc0NvbXBsZXRlIiwicmV0cmlldmVWaWV3U3RhdGUiLCJfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvQXBwRGF0YSIsInNOYXZUeXBlIiwiT2JqZWN0IiwiYXNzaWduIiwic2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIiwib0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsImJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHkiLCJuYXZpZ2F0aW9uVHlwZSIsInNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJpZCIsInZhbHVlIiwidmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJnZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkIiwiX2NoZWNrSWZMYXN0U2VlblJlY29yZCIsInZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJ0ZWNobmljYWxLZXlzT2JqZWN0IiwiYmluZGluZ0NvbnRleHQiLCJwYXRoIiwiZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJlbGVtZW50Iiwia2V5VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIl9nZXRBcHBTdGF0ZURhdGEiLCJuYXZUeXBlIiwia2V5IiwiaSIsImh5YnJpZCIsImlBcHBTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0lmTGFzdFNlZW5SZWNvcmQiLCJsb2NrIiwib05hdmlnYXRpb25TZXJ2aWNlIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsInRoZW4iLCJhUmVzdWx0cyIsImluaXRpYWwiLCJvUm9vdENvbnRyb2xsZXIiLCJzaG91bGRBcHBseVN0YXRlIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiYXBwbHlWaWV3U3RhdGUiLCJmaW5hbGx5IiwidW5sb2NrIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImhhc093blByb3BlcnR5IiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5uZXJBcHBEYXRhIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL05hdmlnYXRpb25IYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcblxuY29uc3QgTmF2VHlwZSA9IGxpYnJhcnkuTmF2VHlwZTtcbnR5cGUgQXBwU3RhdGUgPSB7XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgQXBwRGF0YSA9IHtcblx0b0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50O1xuXHRiTmF2U2VsVmFySGFzRGVmYXVsdHNPbmx5OiBib29sZWFuO1xuXHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdGlBcHBTdGF0ZT86IHtcblx0XHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdH07XG59O1xuY29uc3QgU0tJUF9NRVJHRV9LRVkgPSBcInNraXBNZXJnZVwiO1xuZXhwb3J0IHR5cGUgSUFwcFN0YXRlID0ge1xuXHRhcHBTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEYXRhSW5mbyA9IHtcblx0YXBwU3RhdGVEYXRhOiB7IGFwcFN0YXRlOiBvYmplY3QgfCB1bmRlZmluZWQgfTtcblx0YXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVBcHBQYXJhbWV0ZXJzID0ge1xuXHRyZXBsYWNlSGFzaD86IGJvb2xlYW47XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdHZpZXdJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZlcnNpb25BY3RpdmF0ZWQgPSB7XG5cdHZlcnNpb25XYXNBY3RpdmF0ZWQ6IGJvb2xlYW47XG59O1xuXG5jb25zdCBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFID0gXCJSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcFN0YXRlSGFuZGxlclwiKVxuY2xhc3MgQXBwU3RhdGVIYW5kbGVyIGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdHB1YmxpYyBzSWQ6IHN0cmluZztcblxuXHRwdWJsaWMgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXG5cdHB1YmxpYyBiTm9Sb3V0ZUNoYW5nZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9tQ3VycmVudEFwcFN0YXRlPzogQXBwU3RhdGUgPSB7fTtcblxuXHRzaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG5cdHN0YXRpYyB2ZXJzaW9uQWN0aXZhdGlvblN0YXR1czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5zSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldElkKCl9L0FwcFN0YXRlSGFuZGxlcmA7XG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0ID0ge307XG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0Z2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEBwYXJhbSBpbm5lckFwcFN0YXRlIE92ZXJhbGwgYXBwc3RhdGVcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKiBAcmV0dXJucyBJbm5lciBhcHBzdGF0ZVxuXHQgKi9cblx0X2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgc3RhdGVJZGVudGlmaWVyOiBzdHJpbmcpOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzdGF0ZUlkZW50aWZpZXIgPT09IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfHwgIWlubmVyQXBwU3RhdGUpIHtcblx0XHRcdC8vIG92ZXJhbGwgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cdFx0XHRyZXR1cm4gaW5uZXJBcHBTdGF0ZTtcblx0XHR9XG5cblx0XHQvLyB3ZSB0YWtlIHRoZSBzdWJzZXQgb2YgdGhlIGFwcCBzdGF0ZSB3cnQgdG8gdGhlIGxvY2FsIHZpZXcgaWQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtzdGF0ZUlkZW50aWZpZXJdOiBpbm5lckFwcFN0YXRlW3N0YXRlSWRlbnRpZmllciBhcyBrZXlvZiB0eXBlb2YgaW5uZXJBcHBTdGF0ZV0gfHwge31cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhcHBzdGF0ZSBpbiBoYXNoLlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVLZXkgQXBwc3RhdGUga2V5XG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICovXG5cdF9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleTogc3RyaW5nLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudCxcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdGlzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0bmV3SGFzaCA9IG5hdmlnYXRpb25TZXJ2aWNlLnJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHJvdXRlclByb3h5LmdldEhhc2goKSwgYXBwU3RhdGVLZXkpO1xuXG5cdFx0aWYgKG5ld0hhc2ggJiYgdGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPT09IDAgJiYgbmV3SGFzaCAhPT0gaGFzaCkge1xuXHRcdFx0cm91dGVyUHJveHkubmF2VG9IYXNoKG5ld0hhc2gsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFpc1N0aWNreU1vZGUpO1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IG5hdlRvSGFzaFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgQXBwc3RhdGUgS2V5LlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVEYXRhIEFwcHN0YXRlXG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICogQHJldHVybnMgQXBwc3RhdGUgS2V5XG5cdCAqL1xuXHRhc3luYyBfY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhOiBJbm5lckFwcERhdGEsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQsXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXG5cdFx0aWYgKHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKSB7XG5cdFx0XHQvLyBhbnkgb3RoZXIgdmFsdWVcblx0XHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIDAgb3IgdW5kZWZpbmVkXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9IDE7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwU3RhdGVLZXkgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5zdG9yZUlubmVyQXBwU3RhdGVBc3luYyhhcHBTdGF0ZURhdGEsIHRydWUsIHRydWUpO1xuXG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0tLTtcblxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IEFwcHN0YXRlIHN0b3JlZFwiKTtcblx0XHRyZXR1cm4gYXBwU3RhdGVLZXk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhcHBzdGF0ZSBpbmZvLlxuXHQgKiBAcGFyYW0gaW5uZXJBcHBTdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBfZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgY3JlYXRlQXBwUGFyYW1ldGVycz86IENyZWF0ZUFwcFBhcmFtZXRlcnMpOiBQcm9taXNlPEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IHsgcmVwbGFjZUhhc2ggPSB0cnVlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge307XG5cblx0XHRsZXQgYXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdGxldCBhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGVUb1VwZGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KHRoaXMuX21DdXJyZW50QXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKGlubmVyQXBwU3RhdGUgJiYgIWRlZXBFcXVhbChjdXJyZW50U3RhdGVUb1VwZGF0ZSwgaW5uZXJBcHBTdGF0ZSkpIHtcblx0XHRcdC8vXG5cdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID0geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi4oaW5uZXJBcHBTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcblx0XHRcdGFwcFN0YXRlRGF0YSA9IHsgYXBwU3RhdGU6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUgfTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGFwcFN0YXRlS2V5ID0gYXdhaXQgdGhpcy5fY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdFx0XHRpZiAocmVwbGFjZUhhc2ggPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgcm91dGVyUHJveHkgPSBhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKSxcblx0XHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKTtcblx0XHRcdGFwcFN0YXRlS2V5ID0gcm91dGVyUHJveHkuZmluZEFwcFN0YXRlSW5IYXNoKGhhc2gpIGFzIHN0cmluZztcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFwcFN0YXRlRGF0YSxcblx0XHRcdGFwcFN0YXRlS2V5XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGFwcHN0YXRlLlxuXHQgKiBSZXBsYWNlcyB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgYXBwc3RhdGUgYmFzZWQgb24gcmVwbGFjZUhhc2guXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIG5ldyBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5yZXBsYWNlSGFzaCBCb29sZWFuIHdoaWNoIGRldGVybWluZXMgdG8gcmVwbGFjZSB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgZ2VuZXJhdGVkIGtleVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5za2lwTWVyZ2UgQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHNraXAgdGhlIGtleSB1c2VyIHNoaW5lIHRocm91Z2hcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBzdG9yZWQgZGF0YSBvciBhcHBzdGF0ZSBrZXlcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUFwcFN0YXRlKGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgQXBwRGF0YUluZm8+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQ7XG5cdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgc2tpcE1lcmdlID0gZmFsc2UsIHZpZXdJZDogc3RhdGVJZGVudGlmaWVyID0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB9ID0gY3JlYXRlQXBwUGFyYW1ldGVycyA/PyB7fSxcblx0XHRcdHJvb3RDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0aWYgKCFyb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXI6ICR7cm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSwgb24gbG9hZCBvZiBGQ0wgYXBwIHdlIGhhdmUgbXVsdGlwbGUgdmlld3MoTFIsIE9QLCBzdWItT1AuLi4pIGFuZCB1cmwgaGFzIGlBcHBTdGF0ZSgxKS5cblx0XHQvLyBUaGUgTFIgdmlldyBsb2FkcyB3aXRoIGFwcGxpZWQgaUFwcFN0YXRlKDEpIGFuZCBjYWxscyBjcmVhdGVBcHBTdGF0ZShleGFtcGxlOiBvblNlYXJjaCBldmVudCBpbiBMUikgYmVmb3JlIE9QIGlzIGxvYWRlZC5cblx0XHQvLyBUaGlzIGNyZWF0ZXMgaUFwcFN0YXRlKDIpIGJlZm9yZSBpQXBwU3RhdGUoMSkgaXMgYXBwbGllZCB0byBPUC5cblx0XHQvLyBTbywgd2UgdHJ5IHRvIHdhaXQgdGlsbCB0aGUgcm91dGluZyBpcyBjb21wbGV0ZS5cblx0XHRhd2FpdCByb290Q29udHJvbGxlci5yb3V0aW5nSXNDb21wbGV0ZSgpO1xuXG5cdFx0Ly8gR2V0IGFwcFN0YXRlIHRvIHVwZGF0ZVxuXHRcdGxldCBpbm5lckFwcFN0YXRlID0gKGF3YWl0IHJvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpKSBhcyBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQ7XG5cdFx0aW5uZXJBcHBTdGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKHNraXBNZXJnZSkge1xuXHRcdFx0aW5uZXJBcHBTdGF0ZSA9IHsgLi4uaW5uZXJBcHBTdGF0ZSwgLi4ueyBza2lwTWVyZ2UgfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9nZXRBcHBTdGF0ZUluZm8oaW5uZXJBcHBTdGF0ZSwgY3JlYXRlQXBwUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGE6IEFwcERhdGEsIHNOYXZUeXBlOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUGFyYW1ldGVyIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb0FwcERhdGEsIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0czogb0FwcERhdGEub0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvQXBwRGF0YS5vU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50OiAhb0FwcERhdGEuYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSxcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBzTmF2VHlwZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgUlRBIHZlcnNpb24gd2FzIGFjdGl2YXRlZC5cblx0ICovXG5cdHN0YXRpYyBzZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKGlkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aXZhdGlvbiBzdGF0dXMgb3IgdW5kZWZpbmVkIGlmIG5vdCBzZXQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdO1xuXHR9XG5cblx0X2NoZWNrSWZMYXN0U2VlblJlY29yZCh2aWV3PzogVmlldyk6IGJvb2xlYW4ge1xuXHRcdC8vZ2V0dGluZyB0aGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpbiBvcmRlciB0byBmZXRjaCB0aGUgdGVjaG5pY2Fsa2V5cyBvZiBsYXN0IHNlZW4gcmVjb3JkIGFuZCBjbG9zZSBjb2x1bW4gZmxhZyBzZXQgaW4gdGhlIGludGVybmFscm91dGluZyBmb3IgcmV0YWluaW5nIHNldHRpbmdzIGluIHBlcnNpc3RlbmNlIG1vZGVcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcgJiYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0ICYmIGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzT2JqZWN0ID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ0ZWNobmljYWxLZXlzT2ZMYXN0U2VlblJlY29yZFwiKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0Y29uc3QgcGF0aCA9IChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBiaW5kaW5nQ29udGV4dD8uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsPy5nZXRNZXRhUGF0aChwYXRoKTtcblx0XHRcdGNvbnN0IHRlY2huaWNhbEtleXMgPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHttZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Y29uc3Qga2V5VmFsdWUgPSBiaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoKVtlbGVtZW50XTtcblx0XHRcdFx0aWYgKGtleVZhbHVlICE9PSB0ZWNobmljYWxLZXlzT2JqZWN0W2VsZW1lbnRdKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmY2xDb2x1bW5DbG9zZWRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL3RoZSByZWNvcmQgb3BlbmVkIGlzIG5vdCB0aGUgbGFzdCBzZWVuIG9uZSA6IG5vIG5lZWQgdG8gcGVyc2lzdCB0aGUgY2hhbmdlcywgcmVzZXQgdG8gZGVmYXVsdCBpbnN0ZWFkXG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBTdGF0ZURhdGEob0FwcERhdGE6IEFwcERhdGEsIHZpZXdJZD86IHN0cmluZywgbmF2VHlwZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQga2V5ID0gXCJcIixcblx0XHRcdGkgPSAwO1xuXHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IG5hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8gb0FwcERhdGEuaUFwcFN0YXRlIDogb0FwcERhdGE7XG5cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0Zm9yIChpOyBpIDwgT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXSA9PT0gdmlld0lkKSB7XG5cdFx0XHRcdFx0a2V5ID0gT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W09iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV1dOiBhcHBTdGF0ZURhdGEuYXBwU3RhdGVba2V5XSB8fCB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKiBAcGFyYW0gdmlld0lkXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIGFwcGx5QXBwU3RhdGUodmlld0lkPzogc3RyaW5nLCB2aWV3PzogVmlldyk6IFByb21pc2U8dm9pZCB8IHt9PiB7XG5cdFx0aWYgKEFwcFN0YXRlSGFuZGxlci5nZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKHRoaXMub0FwcENvbXBvbmVudC5nZXRJZCgpKSkge1xuXHRcdFx0QXBwU3RhdGVIYW5kbGVyLnNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCksIGZhbHNlKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkFwcFN0YXRlIHx8IEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRjb25zdCBjaGVja0lmTGFzdFNlZW5SZWNvcmQgPSB0aGlzLl9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldyk7XG5cdFx0aWYgKGNoZWNrSWZMYXN0U2VlblJlY29yZCA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzKTtcblx0XHQvLyBEb25lIGZvciBidXN5IGluZGljYXRvclxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdFx0Ly8gVE9ETyBvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkgc2hvdWxkIHJldHVybiBFUzYgcHJvbWlzZSBpbnN0ZWFkIGpRdWVyeS5wcm9taXNlXG5cdFx0cmV0dXJuIHRvRVM2UHJvbWlzZTx1bmtub3duW10+KG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoYUVycm9yRGF0YTogdW5rbm93bltdKSB7XG5cdFx0XHRcdGlmICghYUVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGFFcnJvckRhdGEgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cud2FybmluZyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGZhaWxlZFwiLCBhRXJyb3JEYXRhWzBdIGFzIHN0cmluZyk7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0LyogYXBwIGRhdGEgKi9cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMV0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsyXVxuXHRcdFx0XHRdO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGFzeW5jIChhUmVzdWx0czogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IFBhcnNlIE5hdmlnYXRpb24gZG9uZVwiKTtcblxuXHRcdFx0XHQvLyBhUmVzdWx0c1sxXSA9PiBvU3RhcnR1cFBhcmFtZXRlcnMgKG5vdCBldmFsdWF0ZWQpXG5cdFx0XHRcdGNvbnN0IG9BcHBEYXRhID0gKGFSZXN1bHRzWzBdIHx8IHt9KSBhcyBBcHBEYXRhLFxuXHRcdFx0XHRcdHNOYXZUeXBlID0gKGFSZXN1bHRzWzJdIGFzIHN0cmluZykgfHwgTmF2VHlwZS5pbml0aWFsLFxuXHRcdFx0XHRcdG9Sb290Q29udHJvbGxlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Ly8gYXBwbHkgdGhlIGFwcHN0YXRlIGRlcGVuZGluZyB1cG9uIHRoZSB2aWV3IChMUi9PUClcblx0XHRcdFx0Y29uc3QgYXBwU3RhdGVEYXRhID0gdGhpcy5fZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhLCB2aWV3SWQsIHNOYXZUeXBlKTtcblx0XHRcdFx0Ly8gZmV0Y2ggdGhlIHNraXBNZXJnZSBmbGFnIGZyb20gYXBwU3RhdGUgZm9yIHNhdmUgYXMgdGlsZVxuXHRcdFx0XHRjb25zdCBza2lwTWVyZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvQXBwRGF0YT8uYXBwU3RhdGU/LltTS0lQX01FUkdFX0tFWV07XG5cdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUgPVxuXHRcdFx0XHRcdHNOYXZUeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSB8fCBzTmF2VHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQgPyB7IC4uLnRoaXMuX21DdXJyZW50QXBwU3RhdGUsIC4uLmFwcFN0YXRlRGF0YSB9IDoge307XG5cdFx0XHRcdGxldCBzaG91bGRBcHBseVN0YXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBleHRlbnNpb24gcmVxdWlyZWQgZm9yIGNvbnRyb2xsZXIgJHtvUm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUob0FwcERhdGEsIHNOYXZUeXBlKSkge1xuXHRcdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNob3VsZEFwcGx5U3RhdGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhcHBseVZpZXdTdGF0ZSA9IGF3YWl0IG9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuYXBwbHlWaWV3U3RhdGUoXG5cdFx0XHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHR0aGlzLl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyhvQXBwRGF0YSwgc05hdlR5cGUpLFxuXHRcdFx0XHRcdHNraXBNZXJnZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIXNob3VsZEFwcGx5U3RhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFwcGx5Vmlld1N0YXRlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiYXBwU3RhdGUgY291bGQgbm90IGJlIGFwcGxpZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBjaGVjayBpcyByb3V0ZSBpcyBjaGFuZ2VkIGJ5IGNoYW5nZSBpbiB0aGUgaUFQUFN0YXRlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdXRlIGhhcyBjaG5hZ2VkXG5cdCAqL1xuXHRjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJOb1JvdXRlQ2hhbmdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICovXG5cdHJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJOb1JvdXRlQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVzZXQgYWxsIGFjdGl2YXRpb24gc3RhdHVzZXMgaW4gQXBwU3RhdGVIYW5kbGVyLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIHRvIGZhbHNlXG5cdHN0YXRpYyByZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1cykge1xuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzLCBpZCkpIHtcblx0XHRcdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAZ2xvYmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXRlSGFuZGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7RUFnQkEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUNELE9BQU87RUFjL0IsTUFBTUUsY0FBYyxHQUFHLFdBQVc7RUFvQmxDLE1BQU1DLHlCQUF5QixHQUFHLDJCQUEyQjtFQUFDLElBR3hEQyxlQUFlLElBQUFDLElBQUEsR0FEcEJDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBRCxJQUFBLENBQUFFLE1BQUEsSUFBQUMsZ0JBQUEsMEJBQUFDLFdBQUE7SUFjN0MsU0FBQUwsZ0JBQVlNLGFBQTJCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3hDQSxLQUFBLEdBQUFGLFdBQUEsQ0FBQUcsSUFBQSxLQUFNLENBQUM7TUFBQ0QsS0FBQSxDQVBERSxpQkFBaUIsR0FBYyxDQUFDLENBQUM7TUFReENGLEtBQUEsQ0FBS0QsYUFBYSxHQUFHQSxhQUFhO01BQ2xDQyxLQUFBLENBQUtHLEdBQUcsR0FBRyxHQUFHSixhQUFhLENBQUNLLEtBQUssQ0FBQyxDQUFDLGtCQUFrQjtNQUNyREosS0FBQSxDQUFLSyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7TUFDbkNMLEtBQUEsQ0FBS00sY0FBYyxHQUFH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
353
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwibGlicmFyeSIsIlNLSVBfTUVSR0VfS0VZIiwiUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSIsIkFwcFN0YXRlSGFuZGxlciIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9jbGFzcyIsIl9BcHBTdGF0ZUhhbmRsZXIiLCJfQmFzZU9iamVjdCIsIm9BcHBDb21wb25lbnQiLCJfdGhpcyIsImNhbGwiLCJfbUN1cnJlbnRBcHBTdGF0ZSIsInNJZCIsImdldElkIiwic2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdCIsImJOb1JvdXRlQ2hhbmdlIiwiTG9nIiwiaW5mbyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2dldElubmVyQXBwU3RhdGVGb3JWaWV3IiwiaW5uZXJBcHBTdGF0ZSIsInN0YXRlSWRlbnRpZmllciIsIl9hZGRBcHBTdGF0ZUluSGFzaCIsImFwcFN0YXRlS2V5IiwiYXBwQ29tcG9uZW50IiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsInJvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJoYXNoIiwiZ2V0SGFzaCIsImlzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZ2V0TWV0YU1vZGVsIiwibmV3SGFzaCIsInJlcGxhY2VJbm5lckFwcFN0YXRlS2V5IiwibmF2VG9IYXNoIiwidW5kZWZpbmVkIiwiX2NyZWF0ZUFwcFN0YXRlS2V5IiwiYXBwU3RhdGVEYXRhIiwic3RvcmVJbm5lckFwcFN0YXRlQXN5bmMiLCJfZ2V0QXBwU3RhdGVJbmZvIiwiY3JlYXRlQXBwUGFyYW1ldGVycyIsInJlcGxhY2VIYXNoIiwidmlld0lkIiwiYXBwU3RhdGUiLCJjdXJyZW50U3RhdGVUb1VwZGF0ZSIsImRlZXBFcXVhbCIsIm9FcnJvciIsImVycm9yIiwiZmluZEFwcFN0YXRlSW5IYXNoIiwiY3JlYXRlQXBwU3RhdGUiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsImdldENhcGFiaWxpdGllcyIsIkFwcFN0YXRlIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwic2tpcE1lcmdlIiwicm9vdENvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJFcnJvciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsInJvdXRpbmdJc0NvbXBsZXRlIiwicmV0cmlldmVWaWV3U3RhdGUiLCJfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJvQXBwRGF0YSIsInNOYXZUeXBlIiwiT2JqZWN0IiwiYXNzaWduIiwic2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIiwib0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsImJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHkiLCJuYXZpZ2F0aW9uVHlwZSIsInNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQiLCJpZCIsInZhbHVlIiwidmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJnZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkIiwiX2NoZWNrSWZMYXN0U2VlblJlY29yZCIsInZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJ0ZWNobmljYWxLZXlzT2JqZWN0IiwiYmluZGluZ0NvbnRleHQiLCJwYXRoIiwiZ2V0UGF0aCIsIm1ldGFNb2RlbCIsImdldE1vZGVsIiwibWV0YVBhdGgiLCJnZXRNZXRhUGF0aCIsInRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJlbGVtZW50Iiwia2V5VmFsdWUiLCJzZXRQcm9wZXJ0eSIsIl9nZXRBcHBTdGF0ZURhdGEiLCJuYXZUeXBlIiwia2V5IiwiaSIsImh5YnJpZCIsImlBcHBTdGF0ZSIsImtleXMiLCJsZW5ndGgiLCJhcHBseUFwcFN0YXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0lmTGFzdFNlZW5SZWNvcmQiLCJsb2NrIiwib05hdmlnYXRpb25TZXJ2aWNlIiwidG9FUzZQcm9taXNlIiwicGFyc2VOYXZpZ2F0aW9uIiwiY2F0Y2giLCJhRXJyb3JEYXRhIiwid2FybmluZyIsInRoZW4iLCJhUmVzdWx0cyIsImluaXRpYWwiLCJvUm9vdENvbnRyb2xsZXIiLCJzaG91bGRBcHBseVN0YXRlIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiYXBwbHlWaWV3U3RhdGUiLCJmaW5hbGx5IiwidW5sb2NrIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwicmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsImhhc093blByb3BlcnR5IiwiQmFzZU9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwU3RhdGVIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwRXF1YWxcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHRvRVM2UHJvbWlzZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Ub0VTNlByb21pc2VcIjtcbmltcG9ydCB0eXBlIHsgSW5uZXJBcHBEYXRhIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL05hdmlnYXRpb25IYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcblxuY29uc3QgTmF2VHlwZSA9IGxpYnJhcnkuTmF2VHlwZTtcbnR5cGUgQXBwU3RhdGUgPSB7XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuZXhwb3J0IHR5cGUgQXBwRGF0YSA9IHtcblx0b0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG5cdG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50O1xuXHRiTmF2U2VsVmFySGFzRGVmYXVsdHNPbmx5OiBib29sZWFuO1xuXHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdGlBcHBTdGF0ZT86IHtcblx0XHRhcHBTdGF0ZTogQXBwU3RhdGU7XG5cdH07XG59O1xuY29uc3QgU0tJUF9NRVJHRV9LRVkgPSBcInNraXBNZXJnZVwiO1xuZXhwb3J0IHR5cGUgSUFwcFN0YXRlID0ge1xuXHRhcHBTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59O1xuXG5leHBvcnQgdHlwZSBBcHBEYXRhSW5mbyA9IHtcblx0YXBwU3RhdGVEYXRhOiB7IGFwcFN0YXRlOiBvYmplY3QgfCB1bmRlZmluZWQgfTtcblx0YXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVBcHBQYXJhbWV0ZXJzID0ge1xuXHRyZXBsYWNlSGFzaD86IGJvb2xlYW47XG5cdHNraXBNZXJnZT86IGJvb2xlYW47XG5cdHZpZXdJZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFZlcnNpb25BY3RpdmF0ZWQgPSB7XG5cdHZlcnNpb25XYXNBY3RpdmF0ZWQ6IGJvb2xlYW47XG59O1xuXG5jb25zdCBSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFID0gXCJSRVBMQUNFX0NPTVBMRVRFX0FQUFNUQVRFXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcFN0YXRlSGFuZGxlclwiKVxuY2xhc3MgQXBwU3RhdGVIYW5kbGVyIGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdHB1YmxpYyBzSWQ6IHN0cmluZztcblxuXHRwdWJsaWMgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXG5cdHB1YmxpYyBiTm9Sb3V0ZUNoYW5nZTogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9tQ3VycmVudEFwcFN0YXRlPzogQXBwU3RhdGUgPSB7fTtcblxuXHRzaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+O1xuXG5cdHN0YXRpYyB2ZXJzaW9uQWN0aXZhdGlvblN0YXR1czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuXHRjb25zdHJ1Y3RvcihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9BcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5zSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldElkKCl9L0FwcFN0YXRlSGFuZGxlcmA7XG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0ID0ge307XG5cdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IGZhbHNlO1xuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEUgOiBBcHBzdGF0ZSBoYW5kbGVyIGluaXRpYWxpemVkXCIpO1xuXHR9XG5cblx0Z2V0SWQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zSWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHZpZXcgc3BlY2lmaWMgYXBwc3RhdGUuXG5cdCAqIEBwYXJhbSBpbm5lckFwcFN0YXRlIE92ZXJhbGwgYXBwc3RhdGVcblx0ICogQHBhcmFtIHN0YXRlSWRlbnRpZmllciBTdGF0ZSBpZGVudGlmaWVyLiBJZCBvZiB0aGUgbG9jYWwgdmlld1xuXHQgKiBAcmV0dXJucyBJbm5lciBhcHBzdGF0ZVxuXHQgKi9cblx0X2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgc3RhdGVJZGVudGlmaWVyOiBzdHJpbmcpOiBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzdGF0ZUlkZW50aWZpZXIgPT09IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfHwgIWlubmVyQXBwU3RhdGUpIHtcblx0XHRcdC8vIG92ZXJhbGwgYXBwIHN0YXRlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuXG5cdFx0XHRyZXR1cm4gaW5uZXJBcHBTdGF0ZTtcblx0XHR9XG5cblx0XHQvLyB3ZSB0YWtlIHRoZSBzdWJzZXQgb2YgdGhlIGFwcCBzdGF0ZSB3cnQgdG8gdGhlIGxvY2FsIHZpZXcgaWQuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFtzdGF0ZUlkZW50aWZpZXJdOiBpbm5lckFwcFN0YXRlW3N0YXRlSWRlbnRpZmllciBhcyBrZXlvZiB0eXBlb2YgaW5uZXJBcHBTdGF0ZV0gfHwge31cblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhcHBzdGF0ZSBpbiBoYXNoLlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVLZXkgQXBwc3RhdGUga2V5XG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICovXG5cdF9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleTogc3RyaW5nLCBzdGF0ZUlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMub0FwcENvbXBvbmVudCxcblx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCksXG5cdFx0XHRyb3V0ZXJQcm94eSA9IGFwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLFxuXHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKSxcblx0XHRcdGlzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0bmV3SGFzaCA9IG5hdmlnYXRpb25TZXJ2aWNlLnJlcGxhY2VJbm5lckFwcFN0YXRlS2V5KHJvdXRlclByb3h5LmdldEhhc2goKSwgYXBwU3RhdGVLZXkpO1xuXG5cdFx0aWYgKG5ld0hhc2ggJiYgdGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0gPT09IDAgJiYgbmV3SGFzaCAhPT0gaGFzaCkge1xuXHRcdFx0cm91dGVyUHJveHkubmF2VG9IYXNoKG5ld0hhc2gsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFpc1N0aWNreU1vZGUpO1xuXHRcdFx0dGhpcy5iTm9Sb3V0ZUNoYW5nZSA9IHRydWU7XG5cdFx0fVxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IG5hdlRvSGFzaFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgQXBwc3RhdGUgS2V5LlxuXHQgKiBAcGFyYW0gYXBwU3RhdGVEYXRhIEFwcHN0YXRlXG5cdCAqIEBwYXJhbSBzdGF0ZUlkZW50aWZpZXIgU3RhdGUgaWRlbnRpZmllci4gSWQgb2YgdGhlIGxvY2FsIHZpZXdcblx0ICogQHJldHVybnMgQXBwc3RhdGUgS2V5XG5cdCAqL1xuXHRhc3luYyBfY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhOiBJbm5lckFwcERhdGEsIHN0YXRlSWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQsXG5cdFx0XHRuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXG5cdFx0aWYgKHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKSB7XG5cdFx0XHQvLyBhbnkgb3RoZXIgdmFsdWVcblx0XHRcdHRoaXMuc2ltdWx0YW5lb3VzQ3JlYXRlUmVxdWVzdFtzdGF0ZUlkZW50aWZpZXJdKys7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIDAgb3IgdW5kZWZpbmVkXG5cdFx0XHR0aGlzLnNpbXVsdGFuZW91c0NyZWF0ZVJlcXVlc3Rbc3RhdGVJZGVudGlmaWVyXSA9IDE7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwU3RhdGVLZXkgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5zdG9yZUlubmVyQXBwU3RhdGVBc3luYyhhcHBTdGF0ZURhdGEsIHRydWUsIHRydWUpO1xuXG5cdFx0dGhpcy5zaW11bHRhbmVvdXNDcmVhdGVSZXF1ZXN0W3N0YXRlSWRlbnRpZmllcl0tLTtcblxuXHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IEFwcHN0YXRlIHN0b3JlZFwiKTtcblx0XHRyZXR1cm4gYXBwU3RhdGVLZXk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhcHBzdGF0ZSBpbmZvLlxuXHQgKiBAcGFyYW0gaW5uZXJBcHBTdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycyBQYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgYXBwc3RhdGVcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMucmVwbGFjZUhhc2ggQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHJlcGxhY2UgdGhlIGhhc2ggd2l0aCB0aGUgbmV3IGdlbmVyYXRlZCBrZXlcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZS5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgc3RvcmVkIGRhdGEgb3IgYXBwc3RhdGUga2V5XG5cdCAqL1xuXHRhc3luYyBfZ2V0QXBwU3RhdGVJbmZvKGlubmVyQXBwU3RhdGU6IElubmVyQXBwRGF0YSB8IHVuZGVmaW5lZCwgY3JlYXRlQXBwUGFyYW1ldGVycz86IENyZWF0ZUFwcFBhcmFtZXRlcnMpOiBQcm9taXNlPEFwcERhdGFJbmZvPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IHsgcmVwbGFjZUhhc2ggPSB0cnVlLCB2aWV3SWQ6IHN0YXRlSWRlbnRpZmllciA9IFJFUExBQ0VfQ09NUExFVEVfQVBQU1RBVEUgfSA9IGNyZWF0ZUFwcFBhcmFtZXRlcnMgPz8ge307XG5cblx0XHRsZXQgYXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXHRcdGxldCBhcHBTdGF0ZURhdGEgPSB7IGFwcFN0YXRlOiB0aGlzLl9tQ3VycmVudEFwcFN0YXRlIH07XG5cblx0XHRjb25zdCBjdXJyZW50U3RhdGVUb1VwZGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KHRoaXMuX21DdXJyZW50QXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKGlubmVyQXBwU3RhdGUgJiYgIWRlZXBFcXVhbChjdXJyZW50U3RhdGVUb1VwZGF0ZSwgaW5uZXJBcHBTdGF0ZSkpIHtcblx0XHRcdC8vXG5cdFx0XHR0aGlzLl9tQ3VycmVudEFwcFN0YXRlID0geyAuLi50aGlzLl9tQ3VycmVudEFwcFN0YXRlLCAuLi4oaW5uZXJBcHBTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcblx0XHRcdGFwcFN0YXRlRGF0YSA9IHsgYXBwU3RhdGU6IHRoaXMuX21DdXJyZW50QXBwU3RhdGUgfTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGFwcFN0YXRlS2V5ID0gYXdhaXQgdGhpcy5fY3JlYXRlQXBwU3RhdGVLZXkoYXBwU3RhdGVEYXRhLCBzdGF0ZUlkZW50aWZpZXIpO1xuXHRcdFx0XHRpZiAocmVwbGFjZUhhc2ggPT09IHRydWUpIHtcblx0XHRcdFx0XHR0aGlzLl9hZGRBcHBTdGF0ZUluSGFzaChhcHBTdGF0ZUtleSwgc3RhdGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgcm91dGVyUHJveHkgPSBhcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKSxcblx0XHRcdFx0aGFzaCA9IHJvdXRlclByb3h5LmdldEhhc2goKTtcblx0XHRcdGFwcFN0YXRlS2V5ID0gcm91dGVyUHJveHkuZmluZEFwcFN0YXRlSW5IYXNoKGhhc2gpIGFzIHN0cmluZztcblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFwcFN0YXRlRGF0YSxcblx0XHRcdGFwcFN0YXRlS2V5XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIG9yIHVwZGF0ZXMgdGhlIGFwcHN0YXRlLlxuXHQgKiBSZXBsYWNlcyB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgYXBwc3RhdGUgYmFzZWQgb24gcmVwbGFjZUhhc2guXG5cdCAqIEBwYXJhbSBjcmVhdGVBcHBQYXJhbWV0ZXJzIFBhcmFtZXRlcnMgZm9yIGNyZWF0aW5nIG5ldyBhcHBzdGF0ZVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5yZXBsYWNlSGFzaCBCb29sZWFuIHdoaWNoIGRldGVybWluZXMgdG8gcmVwbGFjZSB0aGUgaGFzaCB3aXRoIHRoZSBuZXcgZ2VuZXJhdGVkIGtleVxuXHQgKiBAcGFyYW0gY3JlYXRlQXBwUGFyYW1ldGVycy5za2lwTWVyZ2UgQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHNraXAgdGhlIGtleSB1c2VyIHNoaW5lIHRocm91Z2hcblx0ICogQHBhcmFtIGNyZWF0ZUFwcFBhcmFtZXRlcnMudmlld0lkIElkIG9mIHRoZSB2aWV3IGZvciB3aGljaCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYXBwIHN0YXRlLiBUaGlzIGlzIHRvIGNyZWF0ZSBvciB1cGRhdGUgdmlldyBzcGVjaWZpYyBhcHBzdGF0ZVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSBzdG9yZWQgZGF0YSBvciBhcHBzdGF0ZSBrZXlcblx0ICovXG5cdGFzeW5jIGNyZWF0ZUFwcFN0YXRlKGNyZWF0ZUFwcFBhcmFtZXRlcnM/OiBDcmVhdGVBcHBQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkIHwgQXBwRGF0YUluZm8+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLm9BcHBDb21wb25lbnQ7XG5cdFx0aWYgKCFhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5BcHBTdGF0ZSB8fCBCdXN5TG9ja2VyLmlzTG9ja2VkKHRoaXMpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHsgc2tpcE1lcmdlID0gZmFsc2UsIHZpZXdJZDogc3RhdGVJZGVudGlmaWVyID0gUkVQTEFDRV9DT01QTEVURV9BUFBTVEFURSB9ID0gY3JlYXRlQXBwUGFyYW1ldGVycyA/PyB7fSxcblx0XHRcdHJvb3RDb250cm9sbGVyID0gYXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0aWYgKCFyb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdmlld1N0YXRlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG5vdCBhdmFpbGFibGUgZm9yIGNvbnRyb2xsZXI6ICR7cm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSwgb24gbG9hZCBvZiBGQ0wgYXBwIHdlIGhhdmUgbXVsdGlwbGUgdmlld3MoTFIsIE9QLCBzdWItT1AuLi4pIGFuZCB1cmwgaGFzIGlBcHBTdGF0ZSgxKS5cblx0XHQvLyBUaGUgTFIgdmlldyBsb2FkcyB3aXRoIGFwcGxpZWQgaUFwcFN0YXRlKDEpIGFuZCBjYWxscyBjcmVhdGVBcHBTdGF0ZShleGFtcGxlOiBvblNlYXJjaCBldmVudCBpbiBMUikgYmVmb3JlIE9QIGlzIGxvYWRlZC5cblx0XHQvLyBUaGlzIGNyZWF0ZXMgaUFwcFN0YXRlKDIpIGJlZm9yZSBpQXBwU3RhdGUoMSkgaXMgYXBwbGllZCB0byBPUC5cblx0XHQvLyBTbywgd2UgdHJ5IHRvIHdhaXQgdGlsbCB0aGUgcm91dGluZyBpcyBjb21wbGV0ZS5cblx0XHRhd2FpdCByb290Q29udHJvbGxlci5yb3V0aW5nSXNDb21wbGV0ZSgpO1xuXG5cdFx0Ly8gR2V0IGFwcFN0YXRlIHRvIHVwZGF0ZVxuXHRcdGxldCBpbm5lckFwcFN0YXRlID0gKGF3YWl0IHJvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpKSBhcyBJbm5lckFwcERhdGEgfCB1bmRlZmluZWQ7XG5cdFx0aW5uZXJBcHBTdGF0ZSA9IHRoaXMuX2dldElubmVyQXBwU3RhdGVGb3JWaWV3KGlubmVyQXBwU3RhdGUsIHN0YXRlSWRlbnRpZmllcik7XG5cdFx0aWYgKHNraXBNZXJnZSkge1xuXHRcdFx0aW5uZXJBcHBTdGF0ZSA9IHsgLi4uaW5uZXJBcHBTdGF0ZSwgLi4ueyBza2lwTWVyZ2UgfSB9O1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9nZXRBcHBTdGF0ZUluZm8oaW5uZXJBcHBTdGF0ZSwgY3JlYXRlQXBwUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfY3JlYXRlTmF2aWdhdGlvblBhcmFtZXRlcnMob0FwcERhdGE6IEFwcERhdGEsIHNOYXZUeXBlOiBzdHJpbmcpOiBOYXZpZ2F0aW9uUGFyYW1ldGVyIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb0FwcERhdGEsIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0czogb0FwcERhdGEub0RlZmF1bHRlZFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvQXBwRGF0YS5vU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50OiAhb0FwcERhdGEuYk5hdlNlbFZhckhhc0RlZmF1bHRzT25seSxcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBzTmF2VHlwZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgUlRBIHZlcnNpb24gd2FzIGFjdGl2YXRlZC5cblx0ICovXG5cdHN0YXRpYyBzZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKGlkOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIFJUQSAoUnVudGltZSBBZGFwdGF0aW9uKSB2ZXJzaW9uIGFjdGl2YXRpb24gc3RhdHVzIGZvciBhIHNwZWNpZmljIElELlxuXHQgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyLlxuXHQgKiBAcmV0dXJucyBUaGUgYWN0aXZhdGlvbiBzdGF0dXMgb3IgdW5kZWZpbmVkIGlmIG5vdCBzZXQuXG5cdCAqL1xuXHRzdGF0aWMgZ2V0UlRBVmVyc2lvbldhc0FjdGl2YXRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMudmVyc2lvbkFjdGl2YXRpb25TdGF0dXNbaWRdO1xuXHR9XG5cblx0X2NoZWNrSWZMYXN0U2VlblJlY29yZCh2aWV3PzogVmlldyk6IGJvb2xlYW4ge1xuXHRcdC8vZ2V0dGluZyB0aGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dCBpbiBvcmRlciB0byBmZXRjaCB0aGUgdGVjaG5pY2Fsa2V5cyBvZiBsYXN0IHNlZW4gcmVjb3JkIGFuZCBjbG9zZSBjb2x1bW4gZmxhZyBzZXQgaW4gdGhlIGludGVybmFscm91dGluZyBmb3IgcmV0YWluaW5nIHNldHRpbmdzIGluIHBlcnNpc3RlbmNlIG1vZGVcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcgJiYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0ICYmIGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZmNsQ29sdW1uQ2xvc2VkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCB0ZWNobmljYWxLZXlzT2JqZWN0ID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJ0ZWNobmljYWxLZXlzT2ZMYXN0U2VlblJlY29yZFwiKTtcblx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdFx0Y29uc3QgcGF0aCA9IChiaW5kaW5nQ29udGV4dCAmJiBiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBiaW5kaW5nQ29udGV4dD8uZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IG1ldGFQYXRoID0gbWV0YU1vZGVsPy5nZXRNZXRhUGF0aChwYXRoKTtcblx0XHRcdGNvbnN0IHRlY2huaWNhbEtleXMgPSBtZXRhTW9kZWw/LmdldE9iamVjdChgJHttZXRhUGF0aH0vJFR5cGUvJEtleWApO1xuXHRcdFx0aWYgKHRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIHRlY2huaWNhbEtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBrZXlWYWx1ZSA9IGJpbmRpbmdDb250ZXh0LmdldE9iamVjdCgpW2VsZW1lbnRdO1xuXHRcdFx0XHRcdGlmIChrZXlWYWx1ZSAhPT0gdGVjaG5pY2FsS2V5c09iamVjdFtlbGVtZW50XSkge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJmY2xDb2x1bW5DbG9zZWRcIiwgZmFsc2UpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvL3RoZSByZWNvcmQgb3BlbmVkIGlzIG5vdCB0aGUgbGFzdCBzZWVuIG9uZSA6IG5vIG5lZWQgdG8gcGVyc2lzdCB0aGUgY2hhbmdlcywgcmVzZXQgdG8gZGVmYXVsdCBpbnN0ZWFkXG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdF9nZXRBcHBTdGF0ZURhdGEob0FwcERhdGE6IEFwcERhdGEsIHZpZXdJZD86IHN0cmluZywgbmF2VHlwZT86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQga2V5ID0gXCJcIixcblx0XHRcdGkgPSAwO1xuXHRcdGNvbnN0IGFwcFN0YXRlRGF0YSA9IG5hdlR5cGUgPT09IE5hdlR5cGUuaHlicmlkID8gb0FwcERhdGEuaUFwcFN0YXRlIDogb0FwcERhdGE7XG5cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0Zm9yIChpOyBpIDwgT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXSA9PT0gdmlld0lkKSB7XG5cdFx0XHRcdFx0a2V5ID0gT2JqZWN0LmtleXMoYXBwU3RhdGVEYXRhLmFwcFN0YXRlKVtpXTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYXBwU3RhdGVEYXRhPy5hcHBTdGF0ZSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W09iamVjdC5rZXlzKGFwcFN0YXRlRGF0YS5hcHBTdGF0ZSlbaV1dOiBhcHBTdGF0ZURhdGEuYXBwU3RhdGVba2V5XSB8fCB7fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyBhbiBhcHBzdGF0ZSBieSBmZXRjaGluZyBhcHBkYXRhIGFuZCBwYXNzaW5nIGl0IHRvIF9hcHBseUFwcHN0YXRlVG9QYWdlLlxuXHQgKiBAcGFyYW0gdmlld0lkXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBmb3IgYXN5bmMgaGFuZGxpbmdcblx0ICovXG5cdGFzeW5jIGFwcGx5QXBwU3RhdGUodmlld0lkPzogc3RyaW5nLCB2aWV3PzogVmlldyk6IFByb21pc2U8dm9pZCB8IHt9PiB7XG5cdFx0aWYgKEFwcFN0YXRlSGFuZGxlci5nZXRSVEFWZXJzaW9uV2FzQWN0aXZhdGVkKHRoaXMub0FwcENvbXBvbmVudC5nZXRJZCgpKSkge1xuXHRcdFx0QXBwU3RhdGVIYW5kbGVyLnNldFJUQVZlcnNpb25XYXNBY3RpdmF0ZWQodGhpcy5vQXBwQ29tcG9uZW50LmdldElkKCksIGZhbHNlKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkFwcFN0YXRlIHx8IEJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcykpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRjb25zdCBjaGVja0lmTGFzdFNlZW5SZWNvcmQgPSB0aGlzLl9jaGVja0lmTGFzdFNlZW5SZWNvcmQodmlldyk7XG5cdFx0aWYgKGNoZWNrSWZMYXN0U2VlblJlY29yZCA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzKTtcblx0XHQvLyBEb25lIGZvciBidXN5IGluZGljYXRvclxuXHRcdEJ1c3lMb2NrZXIubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdFx0Ly8gVE9ETyBvTmF2aWdhdGlvblNlcnZpY2UucGFyc2VOYXZpZ2F0aW9uKCkgc2hvdWxkIHJldHVybiBFUzYgcHJvbWlzZSBpbnN0ZWFkIGpRdWVyeS5wcm9taXNlXG5cdFx0cmV0dXJuIHRvRVM2UHJvbWlzZTx1bmtub3duW10+KG9OYXZpZ2F0aW9uU2VydmljZS5wYXJzZU5hdmlnYXRpb24oKSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoYUVycm9yRGF0YTogdW5rbm93bltdKSB7XG5cdFx0XHRcdGlmICghYUVycm9yRGF0YSkge1xuXHRcdFx0XHRcdGFFcnJvckRhdGEgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRMb2cud2FybmluZyhcIkFQUFNUQVRFOiBQYXJzZSBOYXZpZ2F0aW9uIGZhaWxlZFwiLCBhRXJyb3JEYXRhWzBdIGFzIHN0cmluZyk7XG5cdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0LyogYXBwIGRhdGEgKi9cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFFcnJvckRhdGFbMV0sXG5cdFx0XHRcdFx0YUVycm9yRGF0YVsyXVxuXHRcdFx0XHRdO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGFzeW5jIChhUmVzdWx0czogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRcdExvZy5pbmZvKFwiQVBQU1RBVEU6IFBhcnNlIE5hdmlnYXRpb24gZG9uZVwiKTtcblxuXHRcdFx0XHQvLyBhUmVzdWx0c1sxXSA9PiBvU3RhcnR1cFBhcmFtZXRlcnMgKG5vdCBldmFsdWF0ZWQpXG5cdFx0XHRcdGNvbnN0IG9BcHBEYXRhID0gKGFSZXN1bHRzWzBdIHx8IHt9KSBhcyBBcHBEYXRhLFxuXHRcdFx0XHRcdHNOYXZUeXBlID0gKGFSZXN1bHRzWzJdIGFzIHN0cmluZykgfHwgTmF2VHlwZS5pbml0aWFsLFxuXHRcdFx0XHRcdG9Sb290Q29udHJvbGxlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblx0XHRcdFx0Ly8gYXBwbHkgdGhlIGFwcHN0YXRlIGRlcGVuZGluZyB1cG9uIHRoZSB2aWV3IChMUi9PUClcblx0XHRcdFx0Y29uc3QgYXBwU3RhdGVEYXRhID0gdGhpcy5fZ2V0QXBwU3RhdGVEYXRhKG9BcHBEYXRhLCB2aWV3SWQsIHNOYXZUeXBlKTtcblx0XHRcdFx0Ly8gZmV0Y2ggdGhlIHNraXBNZXJnZSBmbGFnIGZyb20gYXBwU3RhdGUgZm9yIHNhdmUgYXMgdGlsZVxuXHRcdFx0XHRjb25zdCBza2lwTWVyZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvQXBwRGF0YT8uYXBwU3RhdGU/LltTS0lQX01FUkdFX0tFWV07XG5cdFx0XHRcdHRoaXMuX21DdXJyZW50QXBwU3RhdGUgPVxuXHRcdFx0XHRcdHNOYXZUeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSB8fCBzTmF2VHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQgPyB7IC4uLnRoaXMuX21DdXJyZW50QXBwU3RhdGUsIC4uLmFwcFN0YXRlRGF0YSB9IDoge307XG5cdFx0XHRcdGxldCBzaG91bGRBcHBseVN0YXRlID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoIW9Sb290Q29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHZpZXdTdGF0ZSBleHRlbnNpb24gcmVxdWlyZWQgZm9yIGNvbnRyb2xsZXIgJHtvUm9vdENvbnRyb2xsZXIuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUob0FwcERhdGEsIHNOYXZUeXBlKSkge1xuXHRcdFx0XHRcdGlmICghb1Jvb3RDb250cm9sbGVyLnZpZXdTdGF0ZS5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRcdFx0XHRvUm9vdENvbnRyb2xsZXIudmlld1N0YXRlLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNob3VsZEFwcGx5U3RhdGUgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhcHBseVZpZXdTdGF0ZSA9IGF3YWl0IG9Sb290Q29udHJvbGxlci52aWV3U3RhdGUuYXBwbHlWaWV3U3RhdGUoXG5cdFx0XHRcdFx0dGhpcy5fbUN1cnJlbnRBcHBTdGF0ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHR0aGlzLl9jcmVhdGVOYXZpZ2F0aW9uUGFyYW1ldGVycyhvQXBwRGF0YSwgc05hdlR5cGUpLFxuXHRcdFx0XHRcdHNraXBNZXJnZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIXNob3VsZEFwcGx5U3RhdGUpIHtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGFwcGx5Vmlld1N0YXRlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiYXBwU3RhdGUgY291bGQgbm90IGJlIGFwcGxpZWRcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdHRocm93IG9FcnJvcjtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMpO1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayh0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBjaGVjayBpcyByb3V0ZSBpcyBjaGFuZ2VkIGJ5IGNoYW5nZSBpbiB0aGUgaUFQUFN0YXRlLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdXRlIGhhcyBjaG5hZ2VkXG5cdCAqL1xuXHRjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJOb1JvdXRlQ2hhbmdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0IHRoZSByb3V0ZSBjaGFuZ2VkIGJ5IGlBUFBTdGF0ZS5cblx0ICovXG5cdHJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmJOb1JvdXRlQ2hhbmdlKSB7XG5cdFx0XHR0aGlzLmJOb1JvdXRlQ2hhbmdlID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVzZXQgYWxsIGFjdGl2YXRpb24gc3RhdHVzZXMgaW4gQXBwU3RhdGVIYW5kbGVyLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIHRvIGZhbHNlXG5cdHN0YXRpYyByZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgaWQgaW4gdGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1cykge1xuXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnZlcnNpb25BY3RpdmF0aW9uU3RhdHVzLCBpZCkpIHtcblx0XHRcdFx0dGhpcy52ZXJzaW9uQWN0aXZhdGlvblN0YXR1c1tpZF0gPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAZ2xvYmFsXG4gKi9cbmV4cG9ydCBkZWZhdWx0IEFwcFN0YXRlSGFuZGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7RUFnQkEsTUFBTUEsT0FBTyxHQUFHQyxPQUFPLENBQUNELE9BQU87RUFjL0IsTUFBTUUsY0FBYyxHQUFHLFdBQVc7RUFvQmxDLE1BQU1DLHlCQUF5QixHQUFHLDJCQUEyQjtFQUFDLElBR3hEQyxlQUFlLElBQUFDLElBQUEsR0FEcEJDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBRCxJQUFBLENBQUFFLE1BQUEsSUFBQUMsZ0JBQUEsMEJBQUFDLFdBQUE7SUFjN0MsU0FBQUwsZ0JBQVlNLGFBQTJCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3hDQSxLQUFBLEdBQUFGLFdBQUEsQ0FBQUcsSUFBQSxLQUFNLENBQUM7TUFBQ0QsS0FBQSxDQVBERSxpQkFBaUIsR0FBYyxDQUFDLENBQUM7TUFReENGLEtBQUEsQ0FBS0QsYUFBYSxHQUFHQSxhQUFhO01BQ2xDQyxLQUFBLENBQUtHLEdBQUcsR0FBRyxHQUFHSixhQUFhLENBQUNLLEtBQUssQ0FBQyxDQUFDLGtCQUFrQjtNQUNyREosS0FBQSxDQUFL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
@@ -254,11 +254,13 @@ class AppStateHandler extends BaseObject {
254
254
  const metaModel = bindingContext?.getModel().getMetaModel();
255
255
  const metaPath = metaModel?.getMetaPath(path);
256
256
  const technicalKeys = metaModel?.getObject(`${metaPath}/$Type/$Key`);
257
- for (const element of technicalKeys) {
258
- const keyValue = bindingContext.getObject()[element];
259
- if (keyValue !== technicalKeysObject[element]) {
260
- internalModelContext.setProperty("fclColumnClosed", false);
261
- return true;
257
+ if (technicalKeys) {
258
+ for (const element of technicalKeys) {
259
+ const keyValue = bindingContext.getObject()[element];
260
+ if (keyValue !== technicalKeysObject[element]) {
261
+ internalModelContext.setProperty("fclColumnClosed", false);
262
+ return true;
263
+ }
262
264
  }
263
265
  }
264
266
  //the record opened is not the last seen one : no need to persist the changes, reset to default instead