@sapui5/sap.fe.core 1.136.1 → 1.136.3

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 (114) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +7 -1
  4. package/src/sap/fe/core/AppComponent.ts +10 -0
  5. package/src/sap/fe/core/AppStateHandler.js +9 -2
  6. package/src/sap/fe/core/AppStateHandler.ts +8 -2
  7. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +2 -1
  8. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +1 -0
  9. package/src/sap/fe/core/controllerextensions/EditFlow.js +63 -35
  10. package/src/sap/fe/core/controllerextensions/EditFlow.ts +80 -47
  11. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
  12. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
  13. package/src/sap/fe/core/controllerextensions/InternalRouting.js +16 -2
  14. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +15 -1
  15. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  16. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
  17. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -5
  18. package/src/sap/fe/core/controllerextensions/SideEffects.ts +10 -7
  19. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
  20. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
  21. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
  22. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
  23. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +30 -3
  24. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +26 -3
  25. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +21 -16
  26. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +36 -16
  27. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +12 -26
  28. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +25 -44
  29. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +2 -2
  30. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +1 -1
  31. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +8 -6
  32. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +13 -4
  33. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +15 -5
  34. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +21 -6
  35. package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
  36. package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
  37. package/src/sap/fe/core/converters/controls/Common/Action.js +17 -12
  38. package/src/sap/fe/core/converters/controls/Common/Action.ts +19 -11
  39. package/src/sap/fe/core/converters/controls/Common/Table.js +25 -3
  40. package/src/sap/fe/core/converters/controls/Common/Table.ts +31 -2
  41. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +13 -11
  42. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +15 -2
  43. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +19 -5
  44. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +28 -5
  45. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +11 -6
  46. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +17 -10
  47. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -3
  48. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +26 -1
  49. package/src/sap/fe/core/designtime/messagebundle_en_US_saprigi.properties +7 -0
  50. package/src/sap/fe/core/fpm/manifest.json +1 -1
  51. package/src/sap/fe/core/helpers/DeleteHelper.js +12 -10
  52. package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -10
  53. package/src/sap/fe/core/helpers/ModelHelper.js +43 -4
  54. package/src/sap/fe/core/helpers/ModelHelper.ts +48 -3
  55. package/src/sap/fe/core/library.js +1 -1
  56. package/src/sap/fe/core/messagebundle.properties +4 -0
  57. package/src/sap/fe/core/messagebundle_ar.properties +5 -4
  58. package/src/sap/fe/core/messagebundle_bg.properties +2 -1
  59. package/src/sap/fe/core/messagebundle_ca.properties +2 -1
  60. package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
  61. package/src/sap/fe/core/messagebundle_cs.properties +4 -3
  62. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  63. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  64. package/src/sap/fe/core/messagebundle_de.properties +8 -7
  65. package/src/sap/fe/core/messagebundle_el.properties +4 -3
  66. package/src/sap/fe/core/messagebundle_en.properties +2 -1
  67. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  68. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -1
  69. package/src/sap/fe/core/messagebundle_es.properties +5 -4
  70. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  71. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  72. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  73. package/src/sap/fe/core/messagebundle_fr.properties +4 -3
  74. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
  75. package/src/sap/fe/core/messagebundle_hi.properties +2 -1
  76. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  77. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  78. package/src/sap/fe/core/messagebundle_id.properties +4 -3
  79. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  80. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  81. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  82. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  83. package/src/sap/fe/core/messagebundle_ko.properties +6 -5
  84. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  85. package/src/sap/fe/core/messagebundle_lv.properties +2 -1
  86. package/src/sap/fe/core/messagebundle_mk.properties +2 -1
  87. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  88. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  89. package/src/sap/fe/core/messagebundle_no.properties +3 -2
  90. package/src/sap/fe/core/messagebundle_pl.properties +2 -1
  91. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  92. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  93. package/src/sap/fe/core/messagebundle_ro.properties +2 -1
  94. package/src/sap/fe/core/messagebundle_ru.properties +2 -1
  95. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  96. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  97. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  98. package/src/sap/fe/core/messagebundle_sr.properties +2 -1
  99. package/src/sap/fe/core/messagebundle_sv.properties +2 -1
  100. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  101. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  102. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  103. package/src/sap/fe/core/messagebundle_vi.properties +9 -8
  104. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
  105. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
  106. package/src/sap/fe/core/rootView/Fcl.controller.js +8 -3
  107. package/src/sap/fe/core/rootView/Fcl.controller.ts +14 -7
  108. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
  109. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
  110. package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
  111. package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
  112. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
  113. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
  114. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
@@ -300,7 +300,7 @@ class AppStateHandler extends BaseObject {
300
300
  return Promise.resolve();
301
301
  }
302
302
 
303
- if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this)) {
303
+ if (!this.oAppComponent.getEnvironmentCapabilities().getCapabilities().AppState || BusyLocker.isLocked(this, viewId)) {
304
304
  return Promise.resolve();
305
305
  }
306
306
 
@@ -308,7 +308,9 @@ class AppStateHandler extends BaseObject {
308
308
  if (checkIfLastSeenRecord === true) {
309
309
  return Promise.resolve();
310
310
  }
311
-
311
+ // lock the apply state for the current view
312
+ BusyLocker.lock(this, viewId);
313
+ // lock the App State handler, used to avoid a creation of app state during apply
312
314
  BusyLocker.lock(this);
313
315
  // Done for busy indicator
314
316
  BusyLocker.lock(this.oAppComponent.getRootControl());
@@ -368,7 +370,11 @@ class AppStateHandler extends BaseObject {
368
370
  throw oError;
369
371
  })
370
372
  .finally(() => {
373
+ // unlock apply state for the current view
374
+ BusyLocker.unlock(this, viewId);
375
+ // unlock the app state handler, so that app state creation can happen now.
371
376
  BusyLocker.unlock(this);
377
+ // unlock the RootControl to remove the busy indicator.
372
378
  BusyLocker.unlock(this.oAppComponent.getRootControl());
373
379
  });
374
380
  }
@@ -288,6 +288,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/ui/core/Element"
288
288
  const me = CollaborationUtils.getMe(this.base.getAppComponent());
289
289
  const hasMe = usersInvited?.some(singleUser => singleUser.UserID === me.id) ?? false;
290
290
  uiModel.setProperty("/hasCollaborationAuthorization", hasMe);
291
+ uiModel.setProperty("/showCollaborationStrip", !hasMe);
291
292
  if (hasMe) {
292
293
  this.connect(draftRootContext).catch(error => {
293
294
  Log.error("Error when connecting to the collaboration draft " + error);
@@ -338,4 +339,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/ui/core/Element"
338
339
  _exports = CollaborationDraft;
339
340
  return _exports;
340
341
  }, false);
341
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uRHJhZnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfY2xhc3MiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJoYW5kbGVDb250ZW50Rm9jdXNJbiIsInNvdXJjZSIsImZvY3VzRXZlbnQiLCJpc0EiLCJnZXRQYXJlbnQiLCJ0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmIiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwibGFzdEZvY3VzSWQiLCJnZXRMYXN0Rm9jdXNJZCIsImdldElkIiwiZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMiLCJnZXRGaWVsZEdyb3VwSWRzIiwiam9pbiIsImxhc3RGb2N1c2VkIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwic2VuZEZvY3VzT3V0TWVzc2FnZSIsInNldExhc3RGb2N1c0luZm9ybWF0aW9uIiwic2VuZEZvY3VzSW5NZXNzYWdlIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0IiwiZmllbGRHcm91cEV2ZW50IiwiY29udHJvbCIsImdldFNvdXJjZSIsImZpZWxkR3JvdXBJZHMiLCJnZXRQYXJhbWV0ZXIiLCJzb21lIiwiZ3JvdXBJZCIsInN0YXJ0c1dpdGgiLCJDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCIsInNvdXJjZUNvbnRyb2wiLCJjdXJyZW50Rm9jdXNlZENvbnRyb2wiLCJnZXRBY3RpdmVFbGVtZW50IiwidW5kZWZpbmVkIiwibGFzdEZvY3VzRmllbGRHcm91cHMiLCJmb2N1c2VkRmllbGQiLCJmaWVsZHBBUEkiLCJjb2xsYWJvcmF0aW9uUGF0aCIsImdldENvbGxhYm9yYXRpb25QYXRoIiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiTG9jayIsImNvbnRlbnQiLCJVbmxvY2siLCJmaWVsZCIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJmaWVsZFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiaW5jbHVkZXMiLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJrZXlwYXRoIiwiZ2V0QmluZGluZ0luZm8iLCJ0ZW1wbGF0ZSIsImdldEJpbmRpbmdQYXRoIiwicGF0aCIsIm1lc3NhZ2UiLCJnZXRWaWV3IiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0IiwiZHJhZnRSb290Q29udGV4dCIsImRpc2Nvbm5lY3QiLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJjbGVhbkRyYWZ0Um9vdCIsInNldFByb3BlcnR5IiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhY3Rpdml0eVBhdGhzIiwicmVsZWFzZUFzeW5jTWVzc2FnZXMiLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwib2xkQ29udGV4dFBhdGgiLCJuZXdDb250ZXh0UGF0aCIsImdldEN1cnJlbnREcmFmdFJvb3RQYXRoIiwiaW50ZXJuYWxNb2RlbCIsImdldERyYWZ0VXNlckxpc3RQcm9taXNlIiwiaXNJbml0aWFsU2hhcmUiLCJzZXRJbml0aWFsU2hhcmUiLCJpc0luaXRpYWwiLCJzZXREcmFmdFJvb3QiLCJ1c2VyTGlzdFByb21pc2UiLCJnZXRPYmplY3QiLCJyZXF1ZXN0T2JqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwidGhlbiIsImFjdGl2YXRlQ29sbGFib3JhdGlvbiIsInBhZ2VDb250ZXh0IiwiaXNBY3RpdmVFbnRpdHkiLCJDb21tb25VdGlscyIsImZpbmRPckNyZWF0ZVJvb3RDb250ZXh0IiwiJCRncm91cElkIiwiZ2V0R3JvdXBJZCIsIiRzZWxlY3QiLCJyb290Q29udGV4dCIsIkxvZyIsImVycm9yIiwiY3VycmVudERyYWZ0Um9vdFBhdGgiLCJ1c2Vyc0ludml0ZWQiLCJtZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldE1lIiwiaGFzTWUiLCJzaW5nbGVVc2VyIiwiVXNlcklEIiwiaWQiLCJjYXRjaCIsImVyciIsImV4ZWN1dGVTaGFyZUFjdGlvbiIsInNoYXJlUHJvbWlzZSIsInNoYXJlT2JqZWN0IiwiYWRkU2VsZiIsIkJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb2xsYWJvcmF0aXZlRHJhZnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBUb2tlbml6ZXIgZnJvbSBcInNhcC9tL1Rva2VuaXplclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcIi4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRmllbGRFZGl0TW9kZSB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCIuL0Jhc2VDb250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgQ29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXgsIENvbGxhYm9yYXRpb25VdGlscywgYWRkU2VsZiwgc2hhcmVPYmplY3QgfSBmcm9tIFwiLi9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcblxudHlwZSBEcmFmdEFkbWluVXNlciA9IHtcblx0RHJhZnRFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdERyYWZ0VVVJRDogc3RyaW5nO1xuXHRVc2VySUQ6IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIGxhc3RGb2N1c0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBsYXN0Rm9jdXNGaWVsZEdyb3Vwczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSE6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cblx0cHJpdmF0ZSBnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA9IHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA/PyB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgc2V0IGluIHRoZSBGaWVsZCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKiBAcGFyYW0gc291cmNlXG5cdCAqIEBwYXJhbSBmb2N1c0V2ZW50XG5cdCAqL1xuXHRwdWJsaWMgaGFuZGxlQ29udGVudEZvY3VzSW4oc291cmNlOiBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCwgZm9jdXNFdmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSBmb2N1cyB3YXMgcHJldmlvdXNseSBvdXQgb2YgdGhlIEZpZWxkXG5cdFx0aWYgKHNvdXJjZS5pc0E8VG9rZW5pemVyPihcInNhcC5tLlRva2VuaXplclwiKSkge1xuXHRcdFx0c291cmNlID0gc291cmNlLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmID0gZmFsc2U7XG5cdFx0aWYgKGZvY3VzRXZlbnQpIHtcblx0XHRcdHRhcmdldE91dHNpZGVPZkNvbnRyb2xEb21SZWYgPSAhc291cmNlLmdldERvbVJlZigpPy5jb250YWlucyhmb2N1c0V2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSk7XG5cdFx0fVxuXHRcdGlmIChzb3VyY2UuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSB8fCB0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbmV3bHkgZm9jdXNlZCBGaWVsZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgb25lLCBidXQgdGhleSBzaGFyZSB0aGUgc2FtZSBmaWVsZEdyb3VwSURzXG5cdFx0XHQvLyAoZS5nLiBmaWVsZHMgaW4gZGlmZmVyZW50IHJvd3MgaW4gdGhlIHNhbWUgY29sdW1uIG9mIGEgdGFibGUpXG5cdFx0XHQvLyBJbiBzdWNoIGNhc2UsIHRoZSBmb2N1c091dCBoYW5kbGVyIHdhcyBub3QgY2FsbGVkIChiZWNhdXNlIHdlIHN0YXkgaW4gdGhlIHNhbWUgZmllbGRHcm91cElEKSwgc28gd2UgbmVlZCB0byBzZW5kIGEgZm9jdXNPdXQgZXZlbnQgbWFudWFsbHlcblx0XHRcdGNvbnN0IGxhc3RGb2N1c0lkID0gdGhpcy5nZXRMYXN0Rm9jdXNJZCgpO1xuXHRcdFx0aWYgKGxhc3RGb2N1c0lkICYmIGxhc3RGb2N1c0lkICE9PSBzb3VyY2UuZ2V0SWQoKSAmJiB0aGlzLmdldExhc3RGb2N1c0ZpZWxkR3JvdXBzKCkgPT09IHNvdXJjZS5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIikpIHtcblx0XHRcdFx0Y29uc3QgbGFzdEZvY3VzZWQgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c0lkKSBhcyBGaWVsZDtcblx0XHRcdFx0dGhpcz8uc2VuZEZvY3VzT3V0TWVzc2FnZShsYXN0Rm9jdXNlZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24oc291cmNlKTtcblxuXHRcdFx0dGhpcy5zZW5kRm9jdXNJbk1lc3NhZ2Uoc291cmNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBGaWVsZCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cEV2ZW50XG5cdCAqL1xuXHRwdWJsaWMgaGFuZGxlQ29udGVudEZvY3VzT3V0KGZpZWxkR3JvdXBFdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGxldCBjb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRpZiAoY29udHJvbC5pc0E8VG9rZW5pemVyPihcInNhcC5tLlRva2VuaXplclwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE11bHRpVmFsdWVGaWVsZDtcblx0XHR9XG5cdFx0aWYgKCFjb250cm9sLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sPy5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gZmllbGRHcm91cEV2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIikgYXMgc3RyaW5nW107XG5cblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSB2YWxpZGF0ZWQgZmllbGRDcm91cCBjb3JyZXNwb25kcyB0byBhIGNvbGxhYm9yYXRpb24gZ3JvdXBcblx0XHRpZiAoXG5cdFx0XHRmaWVsZEdyb3VwSWRzLnNvbWUoKGdyb3VwSWQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdyb3VwSWQuc3RhcnRzV2l0aChDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCk7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlQ29udHJvbDogQ29udHJvbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHRoZSBjb250cm9sIHRoYXQgc2VudCB0aGUgZXZlbnQgc3RpbGwgaGFzIHRoZSBmb2N1cyAob3Igb25lIG9mIGl0cyBjaGlsZHJlbikuXG5cdFx0XHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBlLmcuIGlmIHRoZSB1c2VyIHByZXNzZWQgPEVudGVyPiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQuXG5cdFx0XHRsZXQgY3VycmVudEZvY3VzZWRDb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCA9IEVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAmJiBjdXJyZW50Rm9jdXNlZENvbnRyb2wgIT09IHNvdXJjZUNvbnRyb2wpIHtcblx0XHRcdFx0Y3VycmVudEZvY3VzZWRDb250cm9sID0gY3VycmVudEZvY3VzZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAhPT0gc291cmNlQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgY29udHJvbCB0aGF0IHNlbnQgdGhlIGV2ZW50IGlzbid0IGZvY3VzZWQgYW55bW9yZVxuXHRcdFx0XHR0aGlzLnNlbmRGb2N1c091dE1lc3NhZ2UoY29udHJvbCk7XG5cdFx0XHRcdGlmICh0aGlzLmdldExhc3RGb2N1c0lkKCkgPT09IGNvbnRyb2wuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24odW5kZWZpbmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpZCBvZiB0aGUgbGFzdCBmb2N1c2VkIEZpZWxkIChpZiBhbnkpLlxuXHQgKiBAcmV0dXJucyBJRFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRMYXN0Rm9jdXNJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxhc3RGb2N1c0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpZWxkZ3JvdXBzIG9mIHRoZSBsYXN0IGZvY3VzZWQgRmllbGQgKGlmIGFueSkuXG5cdCAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpZWxkZ3JvdXBzIHNlcGFyYXRlZCBieSAnLCdcblx0ICovXG5cdHByaXZhdGUgZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5sYXN0Rm9jdXNGaWVsZEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3QgZm9jdXNlZCBGaWVsZCAoaWQgYW5kIGZpZWxkZ3JvdXBzKS5cblx0ICogQHBhcmFtIGZvY3VzZWRGaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRMYXN0Rm9jdXNJbmZvcm1hdGlvbihmb2N1c2VkRmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5sYXN0Rm9jdXNJZCA9IGZvY3VzZWRGaWVsZD8uZ2V0SWQoKTtcblx0XHR0aGlzLmxhc3RGb2N1c0ZpZWxkR3JvdXBzID0gZm9jdXNlZEZpZWxkPy5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIik7XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGEgTG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSTogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uUGF0aCA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvblBhdGgoZmllbGRwQVBJKTtcblxuXHRcdGlmIChjb2xsYWJvcmF0aW9uUGF0aCkge1xuXHRcdFx0dGhpcy5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrLCBjb250ZW50OiBjb2xsYWJvcmF0aW9uUGF0aCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGFuIFVubG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzT3V0TWVzc2FnZShmaWVsZHBBUEk6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKCFmaWVsZHBBUEkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvblBhdGggPSB0aGlzLmdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkcEFQSSk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25QYXRoKSB7XG5cdFx0XHR0aGlzLnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogY29sbGFib3JhdGlvblBhdGggfSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggdXNlZCB0byBzZW5kIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCAob3IgdW5kZWZpbmVkIGlzIG5vIHZhbGlkIHBhdGggY291bGQgYmUgZm91bmQpXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkOiBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gTm90ZTogd2Ugc2VuZCBtZXNzYWdlcyBldmVuIGlmIHRoZSBjb250ZXh0IGlzIGluYWN0aXZlIChlbXB0eSBjcmVhdGlvbiByb3dzKSxcblx0XHQvLyBvdGhlcndpc2Ugd2UgY2FuJ3QgdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGxvY2tzIHdoZW4gdGhlIGNvbnRleHQgaXMgYWN0aXZhdGVkLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gZmllbGQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChmaWVsZC5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0aWYgKCFmaWVsZC5nZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBmaWVsZC5jb250ZW50IGFzIEZpZWxkV3JhcHBlciB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0IVtGaWVsZEVkaXRNb2RlLkVkaXRhYmxlLCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZVJlYWRPbmx5XS5pbmNsdWRlcyhcblx0XHRcdFx0XHRmaWVsZFdyYXBwZXI/LmdldFByb3BlcnR5KFwiZWRpdE1vZGVcIilcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSBmaWVsZCBpcyBub3QgaW4gZWRpdCBtb2RlIC0tPiBubyBjb2xsYWJvcmF0aW9uIG1lc3NhZ2VzXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBgJHtiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCl9LyR7ZmllbGQuZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoKCl9YDtcblx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGtleXBhdGggPSBmaWVsZC5nZXRCaW5kaW5nSW5mbyhcIml0ZW1zXCIpLnRlbXBsYXRlLmdldEJpbmRpbmdQYXRoKFwia2V5XCIpO1xuXHRcdFx0cmV0dXJuIGAke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX0vJHtmaWVsZC5nZXRCaW5kaW5nSW5mbyhcIml0ZW1zXCIpLnBhdGh9LyR7a2V5cGF0aH1gO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZW5kKG1lc3NhZ2U6IHtcblx0XHRhY3Rpb246IEFjdGl2aXR5O1xuXHRcdGNvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRcdHRyaWdnZXJlZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdFx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbjtcblx0XHRhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH0pOiB2b2lkIHtcblx0XHR0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5zZW5kKHRoaXMuZ2V0VmlldygpLCBtZXNzYWdlKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGNvbm5lY3QoZHJhZnRSb290Q29udGV4dDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5jb25uZWN0KGRyYWZ0Um9vdENvbnRleHQsIHRoaXMuZ2V0VmlldygpIGFzIEZFVmlldyk7XG5cdH1cblxuXHRwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcblx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dGhpcy5jbGVhbkRyYWZ0Um9vdCgpO1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIiwgdW5kZWZpbmVkKTtcblxuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLmRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkgYXMgRkVWaWV3KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRwdWJsaWMgcmV0YWluQXN5bmNNZXNzYWdlcyhhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5yZXRhaW5Bc3luY01lc3NhZ2VzKHRoaXMuZ2V0VmlldygpLCBhY3Rpdml0eVBhdGhzKTtcblx0fVxuXG5cdHB1YmxpYyByZWxlYXNlQXN5bmNNZXNzYWdlcyhhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5yZWxlYXNlQXN5bmNNZXNzYWdlcyh0aGlzLmdldFZpZXcoKSwgYWN0aXZpdHlQYXRocyk7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aChvbGRDb250ZXh0UGF0aDogc3RyaW5nLCBuZXdDb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLnVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgodGhpcy5nZXRWaWV3KCksIG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnREcmFmdFJvb3RQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0cmV0dXJuIGludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFJvb3RQYXRoXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREcmFmdFVzZXJMaXN0UHJvbWlzZSgpOiBQcm9taXNlPERyYWZ0QWRtaW5Vc2VyW10+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0VXNlckxpc3RQcm9taXNlXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0luaXRpYWxTaGFyZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0U2hhcmVJbml0aWFsXCIpID09PSB0cnVlO1xuXHR9XG5cblx0c2V0SW5pdGlhbFNoYXJlKGlzSW5pdGlhbDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aXZlRHJhZnRTaGFyZUluaXRpYWxcIiwgaXNJbml0aWFsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkcmFmdCByb290IGNvbnRleHQgZm9yIHRoZSBjb2xsYWJvcmF0aW9uLlxuXHQgKiBJdHMgcGF0aCBpcyBzdG9yZWQgaW4gdGhlIGludGVybmFsIG1vZGVsLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGNoZWNrIGlmIHRoZSBjb2xsYWJvcmF0aW9uIGlzIGFjdGl2ZS5cblx0ICogSXQgYWxzbyByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdXNlcnMgaW52aXRlZCBpbiB0aGUgZHJhZnQgYW5kIHN0b3JlcyBpdCBpbiB0aGUgaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEBwYXJhbSBkcmFmdFJvb3RDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgZHJhZnQgcm9vdFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCB0byByZXF1ZXN0IHRoZSBsaXN0IG9mIHVzZXJzIGludml0ZWQgaW4gdGhlIGRyYWZ0XG5cdCAqL1xuXHRwcml2YXRlIHNldERyYWZ0Um9vdChkcmFmdFJvb3RDb250ZXh0OiBDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0bGV0IHVzZXJMaXN0UHJvbWlzZTogUHJvbWlzZTxEcmFmdEFkbWluVXNlcltdPjtcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dC5nZXRPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR1c2VyTGlzdFByb21pc2UgPSBkcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXNlckxpc3RQcm9taXNlID0gZHJhZnRSb290Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCJdLCBncm91cElkKVxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiBkcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKSk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0VXNlckxpc3RQcm9taXNlXCIsIHVzZXJMaXN0UHJvbWlzZSk7XG5cdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0Um9vdFBhdGhcIiwgZHJhZnRSb290Q29udGV4dC5nZXRQYXRoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFucyB0aGUgZHJhZnQgcm9vdCBjb250ZXh0IGFuZCB0aGUgbGlzdCBvZiB1c2VycyBpbnZpdGVkIGluIHRoZSBkcmFmdC5cblx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29sbGFib3JhdGlvbiBpcyBkZWFjdGl2YXRlZCBvciB3aGVuIHRoZSBkcmFmdCByb290IGNvbnRleHQgY2hhbmdlcy5cblx0ICovXG5cdHByaXZhdGUgY2xlYW5EcmFmdFJvb3QoKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFVzZXJMaXN0UHJvbWlzZVwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFJvb3RQYXRoXCIsIHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGVzIHRoZSBjb2xsYWJvcmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFnZSBjb250ZXh0LlxuXHQgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyBhdXRob3JpemVkIHRvIGNvbGxhYm9yYXRlIG9uIHRoZSBkcmFmdCwgYW5kIHNldHMgdGhlIGZsYWcgaW4gdGhlIFVJIG1vZGVsIGFjY29yZGluZ2x5LlxuXHQgKiBAcGFyYW0gcGFnZUNvbnRleHQgVGhlIHBhZ2UgY29udGV4dCAobm90IG5lY2Vzc2FyaWx5IGEgZHJhZnQgcm9vdClcblx0ICogQHBhcmFtIGlzQWN0aXZlRW50aXR5IElzIHRoZSBjb250ZXh0IHRoZSBhY3RpdmUgb25lIChub3QgYSBkcmFmdCk/XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHVzZXIgaXMgYXV0aG9yaXplZCB0byBjb2xsYWJvcmF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0YXN5bmMgYWN0aXZhdGVDb2xsYWJvcmF0aW9uKHBhZ2VDb250ZXh0OiBDb250ZXh0LCBpc0FjdGl2ZUVudGl0eTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRpZiAoaXNBY3RpdmVFbnRpdHkpIHtcblx0XHRcdFx0Ly8gV2UncmUgbm90IGluIGEgZHJhZnQgLT4gZGlzY29ubmVjdCBpZiB3ZSB3ZXJlIGNvbm5lY3RlZCBiZWZvcmVcblx0XHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShcIi9oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gQ29tbW9uVXRpbHMuZmluZE9yQ3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRcdHBhZ2VDb250ZXh0LFxuXHRcdFx0XHRcIkRyYWZ0XCIsXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRcdHsgJCRncm91cElkOiBwYWdlQ29udGV4dC5nZXRHcm91cElkKCksICRzZWxlY3Q6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJcIiB9XG5cdFx0XHQpLnJvb3RDb250ZXh0O1xuXHRcdFx0aWYgKCFkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgZHJhZnQgcm9vdCBjb250ZXh0IGZvciBlbmFibGluZyBjb2xsYWJvcmF0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnREcmFmdFJvb3RQYXRoID0gdGhpcy5nZXRDdXJyZW50RHJhZnRSb290UGF0aCgpO1xuXHRcdFx0aWYgKGN1cnJlbnREcmFmdFJvb3RQYXRoICE9PSBkcmFmdFJvb3RDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFx0YFVuZXhwZWN0ZWQgcGF0aCBmb3IgY2hlY2tpbmcgY29sbGFib3JhdGlvbiBhdXRob3JpemF0aW9uczogJHtkcmFmdFJvb3RDb250ZXh0LmdldFBhdGgoKX0gKGV4cGVjdGluZyAke2N1cnJlbnREcmFmdFJvb3RQYXRofSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVzZXJzSW52aXRlZCA9IGF3YWl0IHRoaXMuZ2V0RHJhZnRVc2VyTGlzdFByb21pc2UoKTtcblx0XHRcdGlmICh1aU1vZGVsLmdldFByb3BlcnR5KFwiL2hhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uXCIpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIik7IC8vIEFscmVhZHkgY2hlY2tlZCwgYWxsIGdvb2Rcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1lID0gQ29sbGFib3JhdGlvblV0aWxzLmdldE1lKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKSk7XG5cdFx0XHRjb25zdCBoYXNNZSA9IHVzZXJzSW52aXRlZD8uc29tZSgoc2luZ2xlVXNlcikgPT4gc2luZ2xlVXNlci5Vc2VySUQgPT09IG1lLmlkKSA/PyBmYWxzZTtcblx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIiwgaGFzTWUpO1xuXG5cdFx0XHRpZiAoaGFzTWUpIHtcblx0XHRcdFx0dGhpcy5jb25uZWN0KGRyYWZ0Um9vdENvbnRleHQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoZW4gY29ubmVjdGluZyB0byB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBcIiArIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0XHQvLyBEaXNjb25uZWN0IHRoZSB3ZWJzb2NrZXQgYnV0IGtlZXAgdGhlIHByb3BlcnRpZXMgaW4gdGhlIGludGVybmFsIG1vZGVsIChzbyBkb24ndCBjYWxsIHRoaXMuZGlzY29ubmVjdClcblx0XHRcdFx0dGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSBhcyBGRVZpZXcpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGhhc01lO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgYWN0aXZhdGluZyB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBcIiArIGVycik7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgdGhlIGN1cnJlbnQgdXNlciBpbiB0aGUgZHJhZnQgcm9vdCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gcGFnZUNvbnRleHQgVGhlIHBhZ2UgY29udGV4dCAobm90IG5lY2Vzc2FyaWx5IGEgZHJhZnQgcm9vdClcblx0ICovXG5cdGFzeW5jIGV4ZWN1dGVTaGFyZUFjdGlvbihwYWdlQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gQ29tbW9uVXRpbHMuZmluZE9yQ3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRcdHBhZ2VDb250ZXh0LFxuXHRcdFx0XHRcIkRyYWZ0XCIsXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRcdHsgJCRncm91cElkOiBwYWdlQ29udGV4dC5nZXRHcm91cElkKCksICRzZWxlY3Q6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJcIiB9XG5cdFx0XHQpLnJvb3RDb250ZXh0O1xuXHRcdFx0aWYgKCFkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgZHJhZnQgcm9vdCBjb250ZXh0IGZvciBlbmFibGluZyBjb2xsYWJvcmF0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnREcmFmdFJvb3RQYXRoID0gdGhpcy5nZXRDdXJyZW50RHJhZnRSb290UGF0aCgpO1xuXHRcdFx0aWYgKGN1cnJlbnREcmFmdFJvb3RQYXRoICE9PSB1bmRlZmluZWQgJiYgY3VycmVudERyYWZ0Um9vdFBhdGggIT09IGRyYWZ0Um9vdENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdC8vIENvbGxhYm9yYXRpb24gd2FzIGVuYWJsZWQgb24gYW5vdGhlciBkcmFmdCAtLT4gZGlzY29ubmVjdCBmaXJzdFxuXHRcdFx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnREcmFmdFJvb3RQYXRoID09PSBkcmFmdFJvb3RDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHRyZXR1cm47IC8vIHNoYXJlIHdhcyBhbHJlYWR5IGNhbGxlZCBiZWZvcmUsIHdlIGRvbid0IG5lZWQgdG8gY2FsbCB0aGUgU2hhcmUgYWN0aW9uIGFnYWluXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNoYXJlUHJvbWlzZSA9IHRoaXMuaXNJbml0aWFsU2hhcmUoKVxuXHRcdFx0XHQ/IHNoYXJlT2JqZWN0KGRyYWZ0Um9vdENvbnRleHQsIHVuZGVmaW5lZCwgZHJhZnRSb290Q29udGV4dC5nZXRHcm91cElkKCkpXG5cdFx0XHRcdDogYWRkU2VsZihkcmFmdFJvb3RDb250ZXh0KTtcblx0XHRcdHRoaXMuc2V0SW5pdGlhbFNoYXJlKGZhbHNlKTsgLy8gUmVzZXQgdGhlIGluaXRpYWwgc2hhcmUgZmxhZywgc28gdGhhdCB3ZSBkb24ndCBjYWxsIHRoZSBpbml0aWFsIFNoYXJlIGFjdGlvbiBhZ2FpblxuXHRcdFx0dGhpcy5zZXREcmFmdFJvb3QoZHJhZnRSb290Q29udGV4dCwgZHJhZnRSb290Q29udGV4dC5nZXRHcm91cElkKCkpO1xuXHRcdFx0YXdhaXQgc2hhcmVQcm9taXNlO1xuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgYWRkaW5nIGN1cnJlbnQgdXNlciBpbiB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBcIiArIGVycik7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTJCcUJBLGtCQUFrQixJQUFBQyxJQUFBLEdBRHRDQyxjQUFjLENBQUMscURBQXFELENBQUMsRUFBQUQsSUFBQSxDQUFBRSxNQUFBLDBCQUFBQyxxQkFBQTtJQUFBLFNBQUFKLG1CQUFBO01BQUEsT0FBQUkscUJBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsUUFBQSxHQUFBUCxrQkFBQTtJQUFBUSxjQUFBLENBQUFSLGtCQUFBLEVBQUFJLHFCQUFBO0lBQUEsSUFBQUssTUFBQSxHQUFBVCxrQkFBQSxDQUFBVSxTQUFBO0lBQUFELE1BQUEsQ0FVN0RFLDRCQUE0QixHQUFwQyxTQUFRQSw0QkFBNEJBLENBQUEsRUFBOEI7TUFDakUsSUFBSSxDQUFDQyx5QkFBeUIsR0FBRyxJQUFJLENBQUNBLHlCQUF5QixJQUFJLElBQUksQ0FBQ0MsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDSCw0QkFBNEIsQ0FBQyxDQUFDO01BQzdILE9BQU8sSUFBSSxDQUFDQyx5QkFBeUI7SUFDdEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFILE1BQUEsQ0FLT00sb0JBQW9CLEdBQTNCLFNBQU9BLG9CQUFvQkEsQ0FBQ0MsTUFBK0IsRUFBRUMsVUFBdUIsRUFBUTtNQUMzRjtNQUNBLElBQUlELE1BQU0sQ0FBQ0UsR0FBRyxDQUFZLGlCQUFpQixDQUFDLEVBQUU7UUFDN0NGLE1BQU0sR0FBR0EsTUFBTSxDQUFDRyxTQUFTLENBQUMsQ0FBQyxFQUFFQSxTQUFTLENBQUMsQ0FBb0I7TUFDNUQ7TUFDQSxJQUFJQyw0QkFBNEIsR0FBRyxLQUFLO01BQ3hDLElBQUlILFVBQVUsRUFBRTtRQUNmRyw0QkFBNEIsR0FBRyxDQUFDSixNQUFNLENBQUNLLFNBQVMsQ0FBQyxDQUFD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
342
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xsYWJvcmF0aW9uRHJhZnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfY2xhc3MiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJoYW5kbGVDb250ZW50Rm9jdXNJbiIsInNvdXJjZSIsImZvY3VzRXZlbnQiLCJpc0EiLCJnZXRQYXJlbnQiLCJ0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmIiwiZ2V0RG9tUmVmIiwiY29udGFpbnMiLCJyZWxhdGVkVGFyZ2V0IiwibGFzdEZvY3VzSWQiLCJnZXRMYXN0Rm9jdXNJZCIsImdldElkIiwiZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMiLCJnZXRGaWVsZEdyb3VwSWRzIiwiam9pbiIsImxhc3RGb2N1c2VkIiwiRWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwic2VuZEZvY3VzT3V0TWVzc2FnZSIsInNldExhc3RGb2N1c0luZm9ybWF0aW9uIiwic2VuZEZvY3VzSW5NZXNzYWdlIiwiaGFuZGxlQ29udGVudEZvY3VzT3V0IiwiZmllbGRHcm91cEV2ZW50IiwiY29udHJvbCIsImdldFNvdXJjZSIsImZpZWxkR3JvdXBJZHMiLCJnZXRQYXJhbWV0ZXIiLCJzb21lIiwiZ3JvdXBJZCIsInN0YXJ0c1dpdGgiLCJDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCIsInNvdXJjZUNvbnRyb2wiLCJjdXJyZW50Rm9jdXNlZENvbnRyb2wiLCJnZXRBY3RpdmVFbGVtZW50IiwidW5kZWZpbmVkIiwibGFzdEZvY3VzRmllbGRHcm91cHMiLCJmb2N1c2VkRmllbGQiLCJmaWVsZHBBUEkiLCJjb2xsYWJvcmF0aW9uUGF0aCIsImdldENvbGxhYm9yYXRpb25QYXRoIiwic2VuZCIsImFjdGlvbiIsIkFjdGl2aXR5IiwiTG9jayIsImNvbnRlbnQiLCJVbmxvY2siLCJmaWVsZCIsImJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJnZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgiLCJmaWVsZFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRWRpdGFibGUiLCJFZGl0YWJsZURpc3BsYXkiLCJFZGl0YWJsZVJlYWRPbmx5IiwiaW5jbHVkZXMiLCJnZXRQcm9wZXJ0eSIsImdldFBhdGgiLCJrZXlwYXRoIiwiZ2V0QmluZGluZ0luZm8iLCJ0ZW1wbGF0ZSIsImdldEJpbmRpbmdQYXRoIiwicGF0aCIsIm1lc3NhZ2UiLCJnZXRWaWV3IiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0IiwiZHJhZnRSb290Q29udGV4dCIsImRpc2Nvbm5lY3QiLCJ1aU1vZGVsIiwiZ2V0TW9kZWwiLCJjbGVhbkRyYWZ0Um9vdCIsInNldFByb3BlcnR5IiwiaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhY3Rpdml0eVBhdGhzIiwicmVsZWFzZUFzeW5jTWVzc2FnZXMiLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwib2xkQ29udGV4dFBhdGgiLCJuZXdDb250ZXh0UGF0aCIsImdldEN1cnJlbnREcmFmdFJvb3RQYXRoIiwiaW50ZXJuYWxNb2RlbCIsImdldERyYWZ0VXNlckxpc3RQcm9taXNlIiwiaXNJbml0aWFsU2hhcmUiLCJzZXRJbml0aWFsU2hhcmUiLCJpc0luaXRpYWwiLCJzZXREcmFmdFJvb3QiLCJ1c2VyTGlzdFByb21pc2UiLCJnZXRPYmplY3QiLCJyZXF1ZXN0T2JqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwidGhlbiIsImFjdGl2YXRlQ29sbGFib3JhdGlvbiIsInBhZ2VDb250ZXh0IiwiaXNBY3RpdmVFbnRpdHkiLCJDb21tb25VdGlscyIsImZpbmRPckNyZWF0ZVJvb3RDb250ZXh0IiwiJCRncm91cElkIiwiZ2V0R3JvdXBJZCIsIiRzZWxlY3QiLCJyb290Q29udGV4dCIsIkxvZyIsImVycm9yIiwiY3VycmVudERyYWZ0Um9vdFBhdGgiLCJ1c2Vyc0ludml0ZWQiLCJtZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldE1lIiwiaGFzTWUiLCJzaW5nbGVVc2VyIiwiVXNlcklEIiwiaWQiLCJjYXRjaCIsImVyciIsImV4ZWN1dGVTaGFyZUFjdGlvbiIsInNoYXJlUHJvbWlzZSIsInNoYXJlT2JqZWN0IiwiYWRkU2VsZiIsIkJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb2xsYWJvcmF0aXZlRHJhZnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBGaWVsZFdyYXBwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmllbGRXcmFwcGVyXCI7XG5pbXBvcnQgdHlwZSBUb2tlbml6ZXIgZnJvbSBcInNhcC9tL1Rva2VuaXplclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcIi4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgRmllbGRFZGl0TW9kZSB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCIuL0Jhc2VDb250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgQ29sbGFib3JhdGlvbkZpZWxkR3JvdXBQcmVmaXgsIENvbGxhYm9yYXRpb25VdGlscywgYWRkU2VsZiwgc2hhcmVPYmplY3QgfSBmcm9tIFwiLi9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcblxudHlwZSBEcmFmdEFkbWluVXNlciA9IHtcblx0RHJhZnRFbnRpdHlUeXBlOiBzdHJpbmc7XG5cdERyYWZ0VVVJRDogc3RyaW5nO1xuXHRVc2VySUQ6IHN0cmluZztcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIGxhc3RGb2N1c0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBsYXN0Rm9jdXNGaWVsZEdyb3Vwczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSE6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cblx0cHJpdmF0ZSBnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA9IHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSA/PyB0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpO1xuXHRcdHJldHVybiB0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgc2V0IGluIHRoZSBGaWVsZCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKiBAcGFyYW0gc291cmNlXG5cdCAqIEBwYXJhbSBmb2N1c0V2ZW50XG5cdCAqL1xuXHRwdWJsaWMgaGFuZGxlQ29udGVudEZvY3VzSW4oc291cmNlOiBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCwgZm9jdXNFdmVudD86IEZvY3VzRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSBmb2N1cyB3YXMgcHJldmlvdXNseSBvdXQgb2YgdGhlIEZpZWxkXG5cdFx0aWYgKHNvdXJjZS5pc0E8VG9rZW5pemVyPihcInNhcC5tLlRva2VuaXplclwiKSkge1xuXHRcdFx0c291cmNlID0gc291cmNlLmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKSBhcyBNdWx0aVZhbHVlRmllbGQ7XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmID0gZmFsc2U7XG5cdFx0aWYgKGZvY3VzRXZlbnQpIHtcblx0XHRcdHRhcmdldE91dHNpZGVPZkNvbnRyb2xEb21SZWYgPSAhc291cmNlLmdldERvbVJlZigpPy5jb250YWlucyhmb2N1c0V2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSk7XG5cdFx0fVxuXHRcdGlmIChzb3VyY2UuaXNBPE11bHRpVmFsdWVGaWVsZD4oXCJzYXAudWkubWRjLk11bHRpVmFsdWVGaWVsZFwiKSB8fCB0YXJnZXRPdXRzaWRlT2ZDb250cm9sRG9tUmVmKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbmV3bHkgZm9jdXNlZCBGaWVsZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgb25lLCBidXQgdGhleSBzaGFyZSB0aGUgc2FtZSBmaWVsZEdyb3VwSURzXG5cdFx0XHQvLyAoZS5nLiBmaWVsZHMgaW4gZGlmZmVyZW50IHJvd3MgaW4gdGhlIHNhbWUgY29sdW1uIG9mIGEgdGFibGUpXG5cdFx0XHQvLyBJbiBzdWNoIGNhc2UsIHRoZSBmb2N1c091dCBoYW5kbGVyIHdhcyBub3QgY2FsbGVkIChiZWNhdXNlIHdlIHN0YXkgaW4gdGhlIHNhbWUgZmllbGRHcm91cElEKSwgc28gd2UgbmVlZCB0byBzZW5kIGEgZm9jdXNPdXQgZXZlbnQgbWFudWFsbHlcblx0XHRcdGNvbnN0IGxhc3RGb2N1c0lkID0gdGhpcy5nZXRMYXN0Rm9jdXNJZCgpO1xuXHRcdFx0aWYgKGxhc3RGb2N1c0lkICYmIGxhc3RGb2N1c0lkICE9PSBzb3VyY2UuZ2V0SWQoKSAmJiB0aGlzLmdldExhc3RGb2N1c0ZpZWxkR3JvdXBzKCkgPT09IHNvdXJjZS5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIikpIHtcblx0XHRcdFx0Y29uc3QgbGFzdEZvY3VzZWQgPSBFbGVtZW50LmdldEVsZW1lbnRCeUlkKGxhc3RGb2N1c0lkKSBhcyBGaWVsZDtcblx0XHRcdFx0dGhpcz8uc2VuZEZvY3VzT3V0TWVzc2FnZShsYXN0Rm9jdXNlZCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24oc291cmNlKTtcblxuXHRcdFx0dGhpcy5zZW5kRm9jdXNJbk1lc3NhZ2Uoc291cmNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgd2hlbiB0aGUgZm9jdXMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBGaWVsZCBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLlxuXHQgKiBAcGFyYW0gZmllbGRHcm91cEV2ZW50XG5cdCAqL1xuXHRwdWJsaWMgaGFuZGxlQ29udGVudEZvY3VzT3V0KGZpZWxkR3JvdXBFdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCk6IHZvaWQge1xuXHRcdGxldCBjb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblx0XHRpZiAoY29udHJvbC5pc0E8VG9rZW5pemVyPihcInNhcC5tLlRva2VuaXplclwiKSkge1xuXHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE11bHRpVmFsdWVGaWVsZDtcblx0XHR9XG5cdFx0aWYgKCFjb250cm9sLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdHdoaWxlIChjb250cm9sICYmICFjb250cm9sPy5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNvbnRyb2wpIHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gZmllbGRHcm91cEV2ZW50LmdldFBhcmFtZXRlcihcImZpZWxkR3JvdXBJZHNcIikgYXMgc3RyaW5nW107XG5cblx0XHQvLyBXZSBzZW5kIHRoZSBldmVudCBvbmx5IGlmIHRoZSB2YWxpZGF0ZWQgZmllbGRDcm91cCBjb3JyZXNwb25kcyB0byBhIGNvbGxhYm9yYXRpb24gZ3JvdXBcblx0XHRpZiAoXG5cdFx0XHRmaWVsZEdyb3VwSWRzLnNvbWUoKGdyb3VwSWQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdyb3VwSWQuc3RhcnRzV2l0aChDb2xsYWJvcmF0aW9uRmllbGRHcm91cFByZWZpeCk7XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc291cmNlQ29udHJvbDogQ29udHJvbCA9IGZpZWxkR3JvdXBFdmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHRoZSBjb250cm9sIHRoYXQgc2VudCB0aGUgZXZlbnQgc3RpbGwgaGFzIHRoZSBmb2N1cyAob3Igb25lIG9mIGl0cyBjaGlsZHJlbikuXG5cdFx0XHQvLyBUaGlzIGNvdWxkIGhhcHBlbiBlLmcuIGlmIHRoZSB1c2VyIHByZXNzZWQgPEVudGVyPiB0byB2YWxpZGF0ZSB0aGUgaW5wdXQuXG5cdFx0XHRsZXQgY3VycmVudEZvY3VzZWRDb250cm9sOiBNYW5hZ2VkT2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZCA9IEVsZW1lbnQuZ2V0QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0d2hpbGUgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAmJiBjdXJyZW50Rm9jdXNlZENvbnRyb2wgIT09IHNvdXJjZUNvbnRyb2wpIHtcblx0XHRcdFx0Y3VycmVudEZvY3VzZWRDb250cm9sID0gY3VycmVudEZvY3VzZWRDb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRGb2N1c2VkQ29udHJvbCAhPT0gc291cmNlQ29udHJvbCkge1xuXHRcdFx0XHQvLyBUaGUgY29udHJvbCB0aGF0IHNlbnQgdGhlIGV2ZW50IGlzbid0IGZvY3VzZWQgYW55bW9yZVxuXHRcdFx0XHR0aGlzLnNlbmRGb2N1c091dE1lc3NhZ2UoY29udHJvbCk7XG5cdFx0XHRcdGlmICh0aGlzLmdldExhc3RGb2N1c0lkKCkgPT09IGNvbnRyb2wuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdEZvY3VzSW5mb3JtYXRpb24odW5kZWZpbmVkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpZCBvZiB0aGUgbGFzdCBmb2N1c2VkIEZpZWxkIChpZiBhbnkpLlxuXHQgKiBAcmV0dXJucyBJRFxuXHQgKi9cblx0cHJpdmF0ZSBnZXRMYXN0Rm9jdXNJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmxhc3RGb2N1c0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGZpZWxkZ3JvdXBzIG9mIHRoZSBsYXN0IGZvY3VzZWQgRmllbGQgKGlmIGFueSkuXG5cdCAqIEByZXR1cm5zIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGZpZWxkZ3JvdXBzIHNlcGFyYXRlZCBieSAnLCdcblx0ICovXG5cdHByaXZhdGUgZ2V0TGFzdEZvY3VzRmllbGRHcm91cHMoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5sYXN0Rm9jdXNGaWVsZEdyb3Vwcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxhc3QgZm9jdXNlZCBGaWVsZCAoaWQgYW5kIGZpZWxkZ3JvdXBzKS5cblx0ICogQHBhcmFtIGZvY3VzZWRGaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRMYXN0Rm9jdXNJbmZvcm1hdGlvbihmb2N1c2VkRmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0dGhpcy5sYXN0Rm9jdXNJZCA9IGZvY3VzZWRGaWVsZD8uZ2V0SWQoKTtcblx0XHR0aGlzLmxhc3RGb2N1c0ZpZWxkR3JvdXBzID0gZm9jdXNlZEZpZWxkPy5nZXRGaWVsZEdyb3VwSWRzKCkuam9pbihcIixcIik7XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGEgTG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzSW5NZXNzYWdlKGZpZWxkcEFQSTogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQpOiB2b2lkIHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uUGF0aCA9IHRoaXMuZ2V0Q29sbGFib3JhdGlvblBhdGgoZmllbGRwQVBJKTtcblxuXHRcdGlmIChjb2xsYWJvcmF0aW9uUGF0aCkge1xuXHRcdFx0dGhpcy5zZW5kKHsgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrLCBjb250ZW50OiBjb2xsYWJvcmF0aW9uUGF0aCB9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSWYgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBzZW5kIGFuIFVubG9jayBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UuXG5cdCAqIEBwYXJhbSBmaWVsZHBBUElcblx0ICovXG5cdHByaXZhdGUgc2VuZEZvY3VzT3V0TWVzc2FnZShmaWVsZHBBUEk6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0aWYgKCFmaWVsZHBBUEkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvblBhdGggPSB0aGlzLmdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkcEFQSSk7XG5cdFx0aWYgKGNvbGxhYm9yYXRpb25QYXRoKSB7XG5cdFx0XHR0aGlzLnNlbmQoeyBhY3Rpb246IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogY29sbGFib3JhdGlvblBhdGggfSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBhdGggdXNlZCB0byBzZW5kIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBmaWVsZFxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCAob3IgdW5kZWZpbmVkIGlzIG5vIHZhbGlkIHBhdGggY291bGQgYmUgZm91bmQpXG5cdCAqL1xuXHRwcml2YXRlIGdldENvbGxhYm9yYXRpb25QYXRoKGZpZWxkOiBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gTm90ZTogd2Ugc2VuZCBtZXNzYWdlcyBldmVuIGlmIHRoZSBjb250ZXh0IGlzIGluYWN0aXZlIChlbXB0eSBjcmVhdGlvbiByb3dzKSxcblx0XHQvLyBvdGhlcndpc2Ugd2UgY2FuJ3QgdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGxvY2tzIHdoZW4gdGhlIGNvbnRleHQgaXMgYWN0aXZhdGVkLlxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gZmllbGQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChmaWVsZC5pc0E8RmllbGQ+KFwic2FwLmZlLm1hY3Jvcy5GaWVsZFwiKSkge1xuXHRcdFx0aWYgKCFmaWVsZC5nZXRNYWluUHJvcGVydHlSZWxhdGl2ZVBhdGgoKSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBmaWVsZFdyYXBwZXIgPSBmaWVsZC5jb250ZW50IGFzIEZpZWxkV3JhcHBlciB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChcblx0XHRcdFx0IVtGaWVsZEVkaXRNb2RlLkVkaXRhYmxlLCBGaWVsZEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSwgRmllbGRFZGl0TW9kZS5FZGl0YWJsZVJlYWRPbmx5XS5pbmNsdWRlcyhcblx0XHRcdFx0XHRmaWVsZFdyYXBwZXI/LmdldFByb3BlcnR5KFwiZWRpdE1vZGVcIilcblx0XHRcdFx0KVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSBmaWVsZCBpcyBub3QgaW4gZWRpdCBtb2RlIC0tPiBubyBjb2xsYWJvcmF0aW9uIG1lc3NhZ2VzXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBgJHtiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCl9LyR7ZmllbGQuZ2V0TWFpblByb3BlcnR5UmVsYXRpdmVQYXRoKCl9YDtcblx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzQTxNdWx0aVZhbHVlRmllbGQ+KFwic2FwLnVpLm1kYy5NdWx0aVZhbHVlRmllbGRcIikpIHtcblx0XHRcdGNvbnN0IGtleXBhdGggPSBmaWVsZC5nZXRCaW5kaW5nSW5mbyhcIml0ZW1zXCIpLnRlbXBsYXRlLmdldEJpbmRpbmdQYXRoKFwia2V5XCIpO1xuXHRcdFx0cmV0dXJuIGAke2JpbmRpbmdDb250ZXh0LmdldFBhdGgoKX0vJHtmaWVsZC5nZXRCaW5kaW5nSW5mbyhcIml0ZW1zXCIpLnBhdGh9LyR7a2V5cGF0aH1gO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZW5kKG1lc3NhZ2U6IHtcblx0XHRhY3Rpb246IEFjdGl2aXR5O1xuXHRcdGNvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRcdHRyaWdnZXJlZEFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cdFx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbjtcblx0XHRhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdH0pOiB2b2lkIHtcblx0XHR0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5zZW5kKHRoaXMuZ2V0VmlldygpLCBtZXNzYWdlKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIGNvbm5lY3QoZHJhZnRSb290Q29udGV4dDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5jb25uZWN0KGRyYWZ0Um9vdENvbnRleHQsIHRoaXMuZ2V0VmlldygpIGFzIEZFVmlldyk7XG5cdH1cblxuXHRwdWJsaWMgZGlzY29ubmVjdCgpOiB2b2lkIHtcblx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0dGhpcy5jbGVhbkRyYWZ0Um9vdCgpO1xuXHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIiwgdW5kZWZpbmVkKTtcblxuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcblx0XHRcdHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLmRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkgYXMgRkVWaWV3KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCkuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCh0aGlzLmdldFZpZXcoKSk7XG5cdH1cblxuXHRwdWJsaWMgcmV0YWluQXN5bmNNZXNzYWdlcyhhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5yZXRhaW5Bc3luY01lc3NhZ2VzKHRoaXMuZ2V0VmlldygpLCBhY3Rpdml0eVBhdGhzKTtcblx0fVxuXG5cdHB1YmxpYyByZWxlYXNlQXN5bmNNZXNzYWdlcyhhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHJldHVybiB0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5yZWxlYXNlQXN5bmNNZXNzYWdlcyh0aGlzLmdldFZpZXcoKSwgYWN0aXZpdHlQYXRocyk7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlTG9ja3NGb3JDb250ZXh0UGF0aChvbGRDb250ZXh0UGF0aDogc3RyaW5nLCBuZXdDb250ZXh0UGF0aDogc3RyaW5nKTogdm9pZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpLnVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgodGhpcy5nZXRWaWV3KCksIG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRwcml2YXRlIGdldEN1cnJlbnREcmFmdFJvb3RQYXRoKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0cmV0dXJuIGludGVybmFsTW9kZWw/LmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFJvb3RQYXRoXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXREcmFmdFVzZXJMaXN0UHJvbWlzZSgpOiBQcm9taXNlPERyYWZ0QWRtaW5Vc2VyW10+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0VXNlckxpc3RQcm9taXNlXCIpO1xuXHR9XG5cblx0cHJpdmF0ZSBpc0luaXRpYWxTaGFyZSgpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbD8uZ2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0U2hhcmVJbml0aWFsXCIpID09PSB0cnVlO1xuXHR9XG5cblx0c2V0SW5pdGlhbFNoYXJlKGlzSW5pdGlhbDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRpbnRlcm5hbE1vZGVsPy5zZXRQcm9wZXJ0eShcIi9jb2xsYWJvcmF0aXZlRHJhZnRTaGFyZUluaXRpYWxcIiwgaXNJbml0aWFsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBkcmFmdCByb290IGNvbnRleHQgZm9yIHRoZSBjb2xsYWJvcmF0aW9uLlxuXHQgKiBJdHMgcGF0aCBpcyBzdG9yZWQgaW4gdGhlIGludGVybmFsIG1vZGVsLCBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGNoZWNrIGlmIHRoZSBjb2xsYWJvcmF0aW9uIGlzIGFjdGl2ZS5cblx0ICogSXQgYWxzbyByZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgdXNlcnMgaW52aXRlZCBpbiB0aGUgZHJhZnQgYW5kIHN0b3JlcyBpdCBpbiB0aGUgaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEBwYXJhbSBkcmFmdFJvb3RDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgZHJhZnQgcm9vdFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCB0byByZXF1ZXN0IHRoZSBsaXN0IG9mIHVzZXJzIGludml0ZWQgaW4gdGhlIGRyYWZ0XG5cdCAqL1xuXHRwcml2YXRlIHNldERyYWZ0Um9vdChkcmFmdFJvb3RDb250ZXh0OiBDb250ZXh0LCBncm91cElkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0bGV0IHVzZXJMaXN0UHJvbWlzZTogUHJvbWlzZTxEcmFmdEFkbWluVXNlcltdPjtcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dC5nZXRPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR1c2VyTGlzdFByb21pc2UgPSBkcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXNlckxpc3RQcm9taXNlID0gZHJhZnRSb290Q29udGV4dFxuXHRcdFx0XHQucmVxdWVzdFNpZGVFZmZlY3RzKFtcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0QWRtaW5pc3RyYXRpdmVVc2VyXCJdLCBncm91cElkKVxuXHRcdFx0XHQudGhlbihhc3luYyAoKSA9PiBkcmFmdFJvb3RDb250ZXh0LnJlcXVlc3RPYmplY3QoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiKSk7XG5cdFx0fVxuXG5cdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0VXNlckxpc3RQcm9taXNlXCIsIHVzZXJMaXN0UHJvbWlzZSk7XG5cdFx0aW50ZXJuYWxNb2RlbD8uc2V0UHJvcGVydHkoXCIvY29sbGFib3JhdGl2ZURyYWZ0Um9vdFBhdGhcIiwgZHJhZnRSb290Q29udGV4dC5nZXRQYXRoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFucyB0aGUgZHJhZnQgcm9vdCBjb250ZXh0IGFuZCB0aGUgbGlzdCBvZiB1c2VycyBpbnZpdGVkIGluIHRoZSBkcmFmdC5cblx0ICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgY29sbGFib3JhdGlvbiBpcyBkZWFjdGl2YXRlZCBvciB3aGVuIHRoZSBkcmFmdCByb290IGNvbnRleHQgY2hhbmdlcy5cblx0ICovXG5cdHByaXZhdGUgY2xlYW5EcmFmdFJvb3QoKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFVzZXJMaXN0UHJvbWlzZVwiLCB1bmRlZmluZWQpO1xuXHRcdGludGVybmFsTW9kZWw/LnNldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpdmVEcmFmdFJvb3RQYXRoXCIsIHVuZGVmaW5lZCk7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGVzIHRoZSBjb2xsYWJvcmF0aW9uIGZvciB0aGUgZ2l2ZW4gcGFnZSBjb250ZXh0LlxuXHQgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyBhdXRob3JpemVkIHRvIGNvbGxhYm9yYXRlIG9uIHRoZSBkcmFmdCwgYW5kIHNldHMgdGhlIGZsYWcgaW4gdGhlIFVJIG1vZGVsIGFjY29yZGluZ2x5LlxuXHQgKiBAcGFyYW0gcGFnZUNvbnRleHQgVGhlIHBhZ2UgY29udGV4dCAobm90IG5lY2Vzc2FyaWx5IGEgZHJhZnQgcm9vdClcblx0ICogQHBhcmFtIGlzQWN0aXZlRW50aXR5IElzIHRoZSBjb250ZXh0IHRoZSBhY3RpdmUgb25lIChub3QgYSBkcmFmdCk/XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHVzZXIgaXMgYXV0aG9yaXplZCB0byBjb2xsYWJvcmF0ZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0YXN5bmMgYWN0aXZhdGVDb2xsYWJvcmF0aW9uKHBhZ2VDb250ZXh0OiBDb250ZXh0LCBpc0FjdGl2ZUVudGl0eTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRpZiAoaXNBY3RpdmVFbnRpdHkpIHtcblx0XHRcdFx0Ly8gV2UncmUgbm90IGluIGEgZHJhZnQgLT4gZGlzY29ubmVjdCBpZiB3ZSB3ZXJlIGNvbm5lY3RlZCBiZWZvcmVcblx0XHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShcIi9oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvblwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR0aGlzLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gQ29tbW9uVXRpbHMuZmluZE9yQ3JlYXRlUm9vdENvbnRleHQoXG5cdFx0XHRcdHBhZ2VDb250ZXh0LFxuXHRcdFx0XHRcIkRyYWZ0XCIsXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRcdHsgJCRncm91cElkOiBwYWdlQ29udGV4dC5nZXRHcm91cElkKCksICRzZWxlY3Q6IFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJcIiB9XG5cdFx0XHQpLnJvb3RDb250ZXh0O1xuXHRcdFx0aWYgKCFkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNvdWxkbid0IGZpbmQgZHJhZnQgcm9vdCBjb250ZXh0IGZvciBlbmFibGluZyBjb2xsYWJvcmF0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbnREcmFmdFJvb3RQYXRoID0gdGhpcy5nZXRDdXJyZW50RHJhZnRSb290UGF0aCgpO1xuXHRcdFx0aWYgKGN1cnJlbnREcmFmdFJvb3RQYXRoICE9PSBkcmFmdFJvb3RDb250ZXh0LmdldFBhdGgoKSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXG5cdFx0XHRcdFx0YFVuZXhwZWN0ZWQgcGF0aCBmb3IgY2hlY2tpbmcgY29sbGFib3JhdGlvbiBhdXRob3JpemF0aW9uczogJHtkcmFmdFJvb3RDb250ZXh0LmdldFBhdGgoKX0gKGV4cGVjdGluZyAke2N1cnJlbnREcmFmdFJvb3RQYXRofSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHVzZXJzSW52aXRlZCA9IGF3YWl0IHRoaXMuZ2V0RHJhZnRVc2VyTGlzdFByb21pc2UoKTtcblx0XHRcdGlmICh1aU1vZGVsLmdldFByb3BlcnR5KFwiL2hhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uXCIpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIHVpTW9kZWwuZ2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIik7IC8vIEFscmVhZHkgY2hlY2tlZCwgYWxsIGdvb2Rcblx0XHRcdH1cblx0XHRcdGNvbnN0IG1lID0gQ29sbGFib3JhdGlvblV0aWxzLmdldE1lKHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKSk7XG5cdFx0XHRjb25zdCBoYXNNZSA9IHVzZXJzSW52aXRlZD8uc29tZSgoc2luZ2xlVXNlcikgPT4gc2luZ2xlVXNlci5Vc2VySUQgPT09IG1lLmlkKSA/PyBmYWxzZTtcblx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvaGFzQ29sbGFib3JhdGlvbkF1dGhvcml6YXRpb25cIiwgaGFzTWUpO1xuXHRcdFx0dWlNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaG93Q29sbGFib3JhdGlvblN0cmlwXCIsICFoYXNNZSk7XG5cblx0XHRcdGlmIChoYXNNZSkge1xuXHRcdFx0XHR0aGlzLmNvbm5lY3QoZHJhZnRSb290Q29udGV4dCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hlbiBjb25uZWN0aW5nIHRvIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IFwiICsgZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG5cdFx0XHRcdC8vIERpc2Nvbm5lY3QgdGhlIHdlYnNvY2tldCBidXQga2VlcCB0aGUgcHJvcGVydGllcyBpbiB0aGUgaW50ZXJuYWwgbW9kZWwgKHNvIGRvbid0IGNhbGwgdGhpcy5kaXNjb25uZWN0KVxuXHRcdFx0XHR0aGlzLmdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKS5kaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpIGFzIEZFVmlldyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaGFzTWU7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBhY3RpdmF0aW5nIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IFwiICsgZXJyKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyB0aGUgY3VycmVudCB1c2VyIGluIHRoZSBkcmFmdCByb290IGNvbnRleHQuXG5cdCAqIEBwYXJhbSBwYWdlQ29udGV4dCBUaGUgcGFnZSBjb250ZXh0IChub3QgbmVjZXNzYXJpbHkgYSBkcmFmdCByb290KVxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZVNoYXJlQWN0aW9uKHBhZ2VDb250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSBDb21tb25VdGlscy5maW5kT3JDcmVhdGVSb290Q29udGV4dChcblx0XHRcdFx0cGFnZUNvbnRleHQsXG5cdFx0XHRcdFwiRHJhZnRcIixcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRcdHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKSxcblx0XHRcdFx0eyAkJGdyb3VwSWQ6IHBhZ2VDb250ZXh0LmdldEdyb3VwSWQoKSwgJHNlbGVjdDogXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdEFkbWluaXN0cmF0aXZlVXNlclwiIH1cblx0XHRcdCkucm9vdENvbnRleHQ7XG5cdFx0XHRpZiAoIWRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ291bGRuJ3QgZmluZCBkcmFmdCByb290IGNvbnRleHQgZm9yIGVuYWJsaW5nIGNvbGxhYm9yYXRpb25cIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVudERyYWZ0Um9vdFBhdGggPSB0aGlzLmdldEN1cnJlbnREcmFmdFJvb3RQYXRoKCk7XG5cdFx0XHRpZiAoY3VycmVudERyYWZ0Um9vdFBhdGggIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50RHJhZnRSb290UGF0aCAhPT0gZHJhZnRSb290Q29udGV4dC5nZXRQYXRoKCkpIHtcblx0XHRcdFx0Ly8gQ29sbGFib3JhdGlvbiB3YXMgZW5hYmxlZCBvbiBhbm90aGVyIGRyYWZ0IC0tPiBkaXNjb25uZWN0IGZpcnN0XG5cdFx0XHRcdHRoaXMuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY3VycmVudERyYWZ0Um9vdFBhdGggPT09IGRyYWZ0Um9vdENvbnRleHQuZ2V0UGF0aCgpKSB7XG5cdFx0XHRcdHJldHVybjsgLy8gc2hhcmUgd2FzIGFscmVhZHkgY2FsbGVkIGJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0byBjYWxsIHRoZSBTaGFyZSBhY3Rpb24gYWdhaW5cblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2hhcmVQcm9taXNlID0gdGhpcy5pc0luaXRpYWxTaGFyZSgpXG5cdFx0XHRcdD8gc2hhcmVPYmplY3QoZHJhZnRSb290Q29udGV4dCwgdW5kZWZpbmVkLCBkcmFmdFJvb3RDb250ZXh0LmdldEdyb3VwSWQoKSlcblx0XHRcdFx0OiBhZGRTZWxmKGRyYWZ0Um9vdENvbnRleHQpO1xuXHRcdFx0dGhpcy5zZXRJbml0aWFsU2hhcmUoZmFsc2UpOyAvLyBSZXNldCB0aGUgaW5pdGlhbCBzaGFyZSBmbGFnLCBzbyB0aGF0IHdlIGRvbid0IGNhbGwgdGhlIGluaXRpYWwgU2hhcmUgYWN0aW9uIGFnYWluXG5cdFx0XHR0aGlzLnNldERyYWZ0Um9vdChkcmFmdFJvb3RDb250ZXh0LCBkcmFmdFJvb3RDb250ZXh0LmdldEdyb3VwSWQoKSk7XG5cdFx0XHRhd2FpdCBzaGFyZVByb21pc2U7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBhZGRpbmcgY3VycmVudCB1c2VyIGluIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IFwiICsgZXJyKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMkJxQkEsa0JBQWtCLElBQUFDLElBQUEsR0FEdENDLGNBQWMsQ0FBQyxxREFBcUQsQ0FBQyxFQUFBRCxJQUFBLENBQUFFLE1BQUEsMEJBQUFDLHFCQUFBO0lBQUEsU0FBQUosbUJBQUE7TUFBQSxPQUFBSSxxQkFBQSxDQUFBQyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtJQUFBQyxRQUFBLEdBQUFQLGtCQUFBO0lBQUFRLGNBQUEsQ0FBQVIsa0JBQUEsRUFBQUkscUJBQUE7SUFBQSxJQUFBSyxNQUFBLEdBQUFULGtCQUFBLENBQUFVLFNBQUE7SUFBQUQsTUFBQSxDQVU3REUsNEJBQTRCLEdBQXBDLFNBQVFBLDRCQUE0QkEsQ0FBQSxFQUE4QjtNQUNqRSxJQUFJLENBQUNDLHlCQUF5QixHQUFHLElBQUksQ0FBQ0EseUJBQXlCLElBQUksSUFBSSxDQUFDQyxJQUFJLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUNILDRCQUE0QixDQUFDLENBQUM7TUFDN0gsT0FBTyxJQUFJLENBQUNDLHlCQUF5QjtJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQUgsTUFBQSxDQUtPTSxvQkFBb0IsR0FBM0IsU0FBT0Esb0JBQW9CQSxDQUFDQyxNQUErQixFQUFFQyxVQUF1QixFQUFRO01BQzNGO01BQ0EsSUFBSUQsTUFBTSxDQUFDRSxHQUFHLENBQVksaUJBQWlCLENBQUMsRUFBRTtRQUM3Q0YsTUFBTSxHQUFHQSxNQUFNLENBQUNHLFNBQVMsQ0FBQyxDQUFDLEVBQUVBLFNBQVMsQ0FBQyxDQUFvQjtNQUM1RDtNQUNBLElBQUlDLDRCQUE0QixHQUFHLEtBQUs7TUFDeEMs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
@@ -335,6 +335,7 @@ export default class CollaborationDraft extends BaseControllerExtension {
335
335
  const me = CollaborationUtils.getMe(this.base.getAppComponent());
336
336
  const hasMe = usersInvited?.some((singleUser) => singleUser.UserID === me.id) ?? false;
337
337
  uiModel.setProperty("/hasCollaborationAuthorization", hasMe);
338
+ uiModel.setProperty("/showCollaborationStrip", !hasMe);
338
339
 
339
340
  if (hasMe) {
340
341
  this.connect(draftRootContext).catch((error) => {