@sapui5/sap.fe.core 1.136.11 → 1.136.13

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 (44) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppStateHandler.js +8 -2
  4. package/src/sap/fe/core/AppStateHandler.ts +9 -1
  5. package/src/sap/fe/core/TemplateComponent.js +1 -1
  6. package/src/sap/fe/core/TemplateComponent.ts +1 -3
  7. package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
  8. package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
  9. package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
  10. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
  11. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  12. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
  13. package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
  14. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
  15. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
  16. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
  17. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
  18. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
  19. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
  20. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
  21. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
  22. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
  23. package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
  24. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
  25. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
  26. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
  27. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
  28. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
  29. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  30. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  31. package/src/sap/fe/core/fpm/manifest.json +1 -1
  32. package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
  33. package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
  34. package/src/sap/fe/core/library.js +1 -1
  35. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  36. package/src/sap/fe/core/messagebundle_ko.properties +3 -3
  37. package/src/sap/fe/core/messagebundle_uk.properties +2 -2
  38. package/src/sap/fe/core/messagebundle_vi.properties +4 -4
  39. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  40. package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
  41. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
  42. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
  43. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
  44. package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
@@ -209,6 +209,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
209
209
  return undefined;
210
210
  }
211
211
  }
212
+
213
+ // Filter recommendationData to only include active recommendations
214
+ if (this.acceptAllParams.recommendationData) {
215
+ this.acceptAllParams.recommendationData = this._filterActiveRecommendations(this.acceptAllParams.recommendationData);
216
+ }
212
217
  const acceptModel = this.getAcceptAllModel();
213
218
  this.view.setModel(acceptModel, "_acceptDialogModel");
214
219
  if (!acceptModel.getData().items?.length) {
@@ -234,6 +239,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
234
239
  this.confirmRecommendationDialog.current?.destroy();
235
240
  }
236
241
 
242
+ /**
243
+ * Filters recommendation data to only include recommendations that are currently active.
244
+ * @param recommendationData Array of recommendation data to filter
245
+ * @returns Filtered array containing only active recommendations
246
+ */;
247
+ _proto._filterActiveRecommendations = function _filterActiveRecommendations(recommendationData) {
248
+ const localAnnotationModel = this.view.getModel().getLocalAnnotationModel();
249
+ const activeRecommendations = localAnnotationModel.getProperty("/activeRecommendations") ?? {};
250
+ return recommendationData.filter(recommendation => {
251
+ const contextPath = recommendation.context?.getPath();
252
+ if (!contextPath || !recommendation.propertyPath) {
253
+ return false;
254
+ }
255
+ const activePathsForContext = activeRecommendations[contextPath];
256
+ if (!activePathsForContext || activePathsForContext.length === 0) {
257
+ return false;
258
+ }
259
+
260
+ // Check if the recommendation's propertyPath is in the active recommendations list
261
+ return activePathsForContext.includes(recommendation.propertyPath);
262
+ });
263
+ }
264
+
237
265
  /**
238
266
  * Handler for Accept and Save button.
239
267
  */;
@@ -451,4 +479,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/converte
451
479
  _exports.ConfirmRecommendationDialog = ConfirmRecommendationDialog;
452
480
  return _exports;
453
481
  }, false);
454
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsInByb3BzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9ucyIsInZpc2libGVDb250ZXh0UGF0aHMiLCJnZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocyIsIm9wZW5SZWNvbW1lbmRhdGlvbnMiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyIsInJlY29tbWVuZGF0aW9ucyIsImxlbmd0aCIsImZvckVhY2giLCJyZWNvbW1lbmRhdGlvbiIsImNvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwicHVzaCIsInZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwiZ2V0UGF0aCIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZmNsQ29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiY29udGV4dFBhdGhzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiY29udGV4dFBhdGgiLCJsb2NhbEFubm90YXRpb25PYmplY3QiLCJnZXRPYmplY3QiLCJhbm5vdGF0aW9uT2JqZWN0IiwiZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QiLCJyZWNvbW1lbmRhdGlvbk9iamVjdCIsImN1cnJlbnRLZXkiLCJjdXJyZW50VmFsdWUiLCJpbmNsdWRlcyIsImtleXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMiLCJjb250ZXh0SWRlbnRpZmllciIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0IiwiY29udGV4dERhdGEiLCJyZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJjb250ZXh0S2V5IiwiYXJndW1lbnRzIiwiY3VycmVudFZhbHVlSXNDb250ZXh0IiwiaXNBIiwic3BsaXQiLCJvcGVuUmVjb21tZW5kYXRpb24iLCJ2YWx1ZSIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwibGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsImFjY2VwdE1vZGVsIiwiZ2V0QWNjZXB0QWxsTW9kZWwiLCJzZXRNb2RlbCIsImdldERhdGEiLCJpdGVtcyIsIlNraXBwZWQiLCJkaWFsb2ciLCJnZXRDb250ZW50Iiwic2V0RXNjYXBlSGFuZGxlciIsIm9uQ29udGludWVFZGl0aW5nIiwiYmluZCIsImFkZERlcGVuZGVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbWlzZVJlc29sdmUiLCJwcm9taXNlUmVqZWN0IiwiY2xvc2UiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsIm9uQWNjZXB0QW5kU2F2ZSIsImlzQWNjZXB0ZWQiLCJhY2NlcHRSZWNvbW1lbmRhdGlvbnMiLCJBY2NlcHQiLCJMb2ciLCJlcnJvciIsIm9uSWdub3JlQW5kU2F2ZSIsImlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMiLCJJZ25vcmUiLCJDb250aW51ZSIsImdldEZpZWxkTmFtZSIsInRhcmdldFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkxhYmVsIiwidG9TdHJpbmciLCJnZXRUZXh0IiwiZGlzcGxheU1vZGUiLCJ2YWx1ZUZvcm1hdHRlcnMiLCJmb3JtYXRXaXRoQnJhY2tldHMiLCJnZXRCdXR0b24iLCJ0eXBlIiwicHJlc3NIYW5kbGVyIiwiX2pzeCIsIkJ1dHRvbiIsIndpZHRoIiwicHJlc3MiLCJjaGlsZHJlbiIsImxheW91dERhdGEiLCJfRnJhZ21lbnQiLCJGbGV4SXRlbURhdGEiLCJtaW5XaWR0aCIsImdldEZvb3RlciIsIlRvb2xiYXIiLCJjb250ZW50IiwiX2pzeHMiLCJUb29sYmFyU3BhY2VyIiwiX2dldERpYWxvZ0J1dHRvblRleHQiLCJzYXZlIiwicmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiIsImlzQWNjZXB0QnV0dG9uIiwiSGFzQWN0aXZlRW50aXR5IiwiSlNPTk1vZGVsIiwiZW50aXR5TmFtZUxhYmVsIiwiZ2V0RW50aXR5TmFtZSIsImlkZW50aWZpZXJUZXh0cyIsImdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aCIsImxpc3REYXRhIiwiZmllbGROYW1lIiwidmFsdWVPZiIsImZpZWxkVmFsdWUiLCJzZXREYXRhIiwiZ2V0R3JvdXAiLCJnZXRNZXNzYWdlIiwiYWNjZXB0QWxsRGF0YSIsIm1lc3NhZ2VUZXh0IiwiVGV4dCIsImdldERpYWxvZ0NvbnRlbnQiLCJMaXN0IiwibW9kZWwiLCJwYXRoIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiTWFuYWdlZE9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwiLi4vLi4vUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRBbGxQYXJhbXMsIFJlY29tbWVuZGF0aW9uRGF0YSB9IGZyb20gXCIuLi8uLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9SZWNvbW1lbmRhdGlvbnNcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcIi4uLy4uL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0SWdub3JlID0gXCJJZ25vcmVfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9scy5SZWNvbW1lbmRhdGlvbnMuQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIpXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIGV4dGVuZHMgTWFuYWdlZE9iamVjdCB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHR9XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdHB1YmxpYyB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwhOiBSZXNvdXJjZU1vZGVsO1xuXG5cdHByb3RlY3RlZCBrZXkhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpc1NhdmUhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYWNjZXB0QWxsUGFyYW1zITogQWNjZXB0QWxsUGFyYW1zO1xuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzZWxlY3RlZCBkaWFsb2cgbGlzdCBvcHRpb25cblx0ICovXG5cdHByaXZhdGUgcHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogUmVqZWN0cyB0aGUgcHJvbWlzZSBvZiBvcGVuIGRpYWxvZ1xuXHQgKi9cblx0cHVibGljIHByb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZUNvbnRleHRQYXRocyA9IHRoaXMuZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyh2aXNpYmxlQ29udGV4dFBhdGhzKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoID8gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoIDogXCJcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT09IG51bGwgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09IFwiXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25zLnB1c2gocmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9ucztcblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIHJlY29tbWVuZGF0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxvY2FsQW5ub3RhdGlvbk1vZGVsXG5cdFx0Ly8gcmV0dXJuIG9wZW4gcmVjb21tZW5kYXRpb25zLlxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdHZpc2libGVQYWdlQ29udGV4dFBhdGhzLnB1c2gocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZpc2libGVQYWdlQ29udGV4dFBhdGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aHMgUGF0aHMgb2YgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YSBmb3IgdmlzaWJsZSBjb250ZXh0c1xuXHQgKi9cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChjb250ZXh0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGNvbnRleHQgcGF0aHMgaW4gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbHMgd2hpY2ggbWF0Y2ggdG9cblx0XHRcdC8vIDEuIGN1cnJlbnQgcGFnZSBhbmRcblx0XHRcdC8vIDIuIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBwYWdlXG5cdFx0XHQvLyBOZWVkIHRvIGNvbnNpZGVyIGFsc28gaW1tZWRpYXRlIGNoaWxkcmVuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGtleXNcblx0XHRcdGNvbnRleHRQYXRocy5mb3JFYWNoKChjb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsQW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdFx0ICogVGhlIGxvY2FsIGFubm90YXRpb24gb2JqZWN0IHdpbGwgYmUgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgOlxuXHRcdFx0XHRcdFx0ICoge1xuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBQcm9wZXJ0eU5hbWU6IHtcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogXHQgfVxuXHRcdFx0XHRcdFx0ICogcmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiB9XG5cdFx0XHRcdFx0XHQgKlxuXHRcdFx0XHRcdFx0ICogc28gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZWNvbW1lbmRhdGlvbnMgYXMgcGVyIGVhY2ggY29udGV4dCAtIGZvciBwYXJlbnQvY2hpbGQgZW50aXRpZXMgd2UgbmVlZCB0byBpdGVyYXRlIG92ZXIgZWFjaCBrZXlzIHJlY3Vyc2l2ZWx5IGluIHRoZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdCBmdW5jdGlvbixcblx0XHRcdFx0XHRcdCAqIGZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgc3RydWN0dXJlIGFuZCB0aGVuIHNlbmQgaXQgZm9yIGdldHRpbmcgdGhlIHJlY29tbWVuZGF0aW9ucyBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BlblJlY29tbWVuZGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHByaXZhdGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gPSBhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICgoY3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIE9EYXRhVjRDb250ZXh0PilbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbY3VycmVudEtleV0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBrZXlzID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyhcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdCk7XG5cdFx0XHQocmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyID0ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ/IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0OiBrZXlzW1widGVjaG5pY2FsS2V5c1wiXTtcblx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0RGF0YSBUaGUgY29udGV4dCBkYXRhIG9iamVjdCBmb3IgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkNvbnRleHQgVGhlIHJlY29tbWVuZGF0aW9uIGNvbnRleHRcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBjb250ZXh0S2V5IENvbnRleHQgS2V5XG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0Y29udGV4dERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10sXG5cdFx0Y29udGV4dEtleSA9IFwiXCJcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGNvbnRleHREYXRhKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBjb250ZXh0RGF0YVtjdXJyZW50S2V5XTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlSXNDb250ZXh0ID1cblx0XHRcdFx0XHQoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EgJiYgKGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIik7XG5cdFx0XHRcdGlmIChjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBjdXJyZW50S2V5LnNwbGl0KFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIilbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uOiBSZWNvbW1lbmRhdGlvbkRhdGEgPSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiByZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGNvbnRleHRLZXkgPyBgJHtjb250ZXh0S2V5fS8ke3Byb3BlcnR5UGF0aH1gIDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGN1cnJlbnRWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllcjogKHJlY29tbWVuZGF0aW9uQ29udGV4dCBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclRleHQ6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRleHREYXRhW2Ake3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmBdO1xuXHRcdFx0XHRcdGlmIChkZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uLnRleHQgPSBkZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMucHVzaChvcGVuUmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiAhY3VycmVudFZhbHVlSXNDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybSByZWNvbW1lbmRhdGlvbnMgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlIEJvb2xlYW4gZmxhZyB3aGljaCB3b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBhcmUgc2F2aW5nIHRoZSBkb2N1bWVudCBhbmQgd291bGQgYmUgZmFsc2UgaWYgd2UgZG8gYXBwbHkgY2hhbmdlc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdvdWxkIHJlc29sdmUgd2l0aCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIChBY2NlcHQsIElnbm9yZSwgQ29udGludWUsIFNraXBwZWQpXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihpc1NhdmU6IGJvb2xlYW4pOiBQcm9taXNlPFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfCB1bmRlZmluZWQ+IHtcblx0XHQvLyBjaGVjayBmb3IgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zXG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpO1xuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KFxuXHRcdFx0XHR7IHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9ucyB9LFxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSB7XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgZm91bmQgdGhlbiBjaGVjayBmb3IgbGVnYWN5IHJlY29tbWVuZGF0aW9ucy5cblx0XHRcdGNvbnN0IGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0ID0gKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk7XG5cdFx0XHRpZiAobGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QpIHtcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFjY2VwdEFsbFBhcmFtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9nZXREaWFsb2dCdXR0b25UZXh0KHRoaXMuaXNTYXZlLCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCksXG5cdFx0XHRcdFx0XHRcdFx0XCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFjY2VwdEFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uSWdub3JlQW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0NPTlRJTlVFX0VESVRJTkdcIiksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXREaWFsb2dCdXR0b25UZXh0KHNhdmU6IGJvb2xlYW4sIHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb246IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQWNjZXB0QnV0dG9uOiBib29sZWFuID0gcmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQ7XG5cdFx0aWYgKHNhdmUpIHtcblx0XHRcdGlmICghdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9TQVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BbUNZQSw0QkFBNEIsMEJBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUFBLE9BQTVCQSw0QkFBNEI7RUFBQTtFQUFBQyxRQUFBLENBQUFELDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsSUFRM0JFLDJCQUEyQixJQUFBQyxJQUFBLEdBRHZDQyxjQUFjLENBQUMsa0VBQWtFLENBQUMsRUFBQUMsS0FBQSxHQVFqRkMsZUFBZSxDQUFDLENBQUMsRUFBQUgsSUFBQSxD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
482
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImRlZmluZVJlZmVyZW5jZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfTWFuYWdlZE9iamVjdCIsInByb3BzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9ucyIsInZpc2libGVDb250ZXh0UGF0aHMiLCJnZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocyIsIm9wZW5SZWNvbW1lbmRhdGlvbnMiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyIsInJlY29tbWVuZGF0aW9ucyIsImxlbmd0aCIsImZvckVhY2giLCJyZWNvbW1lbmRhdGlvbiIsImNvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInByb3BlcnR5UGF0aCIsImdldFByb3BlcnR5IiwidW5kZWZpbmVkIiwicHVzaCIsInZpc2libGVQYWdlQ29udGV4dFBhdGhzIiwiZ2V0UGF0aCIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZmNsQ29udHJvbGxlciIsImdldEFwcENvbXBvbmVudCIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsIl9pc0ZjbEVuYWJsZWQiLCJpc0Z1bGxTY3JlZW4iLCJnZXRIZWxwZXIiLCJnZXRDdXJyZW50VUlTdGF0ZSIsInJpZ2h0TW9zdENvbnRleHQiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwiY29udGV4dFBhdGhzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRNb2RlbCIsImdldExvY2FsQW5ub3RhdGlvbk1vZGVsIiwiY29udGV4dFBhdGgiLCJsb2NhbEFubm90YXRpb25PYmplY3QiLCJnZXRPYmplY3QiLCJhbm5vdGF0aW9uT2JqZWN0IiwiZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QiLCJyZWNvbW1lbmRhdGlvbk9iamVjdCIsImN1cnJlbnRLZXkiLCJjdXJyZW50VmFsdWUiLCJpbmNsdWRlcyIsImtleXMiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMiLCJjb250ZXh0SWRlbnRpZmllciIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0IiwiY29udGV4dERhdGEiLCJyZWNvbW1lbmRhdGlvbkNvbnRleHQiLCJjb250ZXh0S2V5IiwiYXJndW1lbnRzIiwiY3VycmVudFZhbHVlSXNDb250ZXh0IiwiaXNBIiwic3BsaXQiLCJvcGVuUmVjb21tZW5kYXRpb24iLCJ2YWx1ZSIsImNvbnRleHRJZGVudGlmaWVyVGV4dCIsImRlc2NyaXB0aW9uIiwidGV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm9wZW4iLCJpc1NhdmUiLCJzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyIiwiYWRkQ29udGV4dElkZW50aWZpZXJUZXh0IiwicmVjb21tZW5kYXRpb25EYXRhIiwiYWNjZXB0QWxsUGFyYW1zIiwibGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJmZXRjaEFjY2VwdEFsbFBhcmFtcyIsIl9maWx0ZXJBY3RpdmVSZWNvbW1lbmRhdGlvbnMiLCJhY2NlcHRNb2RlbCIsImdldEFjY2VwdEFsbE1vZGVsIiwic2V0TW9kZWwiLCJnZXREYXRhIiwiaXRlbXMiLCJTa2lwcGVkIiwiZGlhbG9nIiwiZ2V0Q29udGVudCIsInNldEVzY2FwZUhhbmRsZXIiLCJvbkNvbnRpbnVlRWRpdGluZyIsImJpbmQiLCJhZGREZXBlbmRlbnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInByb21pc2VSZXNvbHZlIiwicHJvbWlzZVJlamVjdCIsImNsb3NlIiwiY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nIiwiY3VycmVudCIsImRlc3Ryb3kiLCJhY3RpdmVSZWNvbW1lbmRhdGlvbnMiLCJmaWx0ZXIiLCJhY3RpdmVQYXRoc0ZvckNvbnRleHQiLCJvbkFjY2VwdEFuZFNhdmUiLCJpc0FjY2VwdGVkIiwiYWNjZXB0UmVjb21tZW5kYXRpb25zIiwiQWNjZXB0IiwiTG9nIiwiZXJyb3IiLCJvbklnbm9yZUFuZFNhdmUiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwiSWdub3JlIiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsIkhhc0FjdGl2ZUVudGl0eSIsIkpTT05Nb2RlbCIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsImFjY2VwdEFsbERhdGEiLCJtZXNzYWdlVGV4dCIsIlRleHQiLCJnZXREaWFsb2dDb250ZW50IiwiTGlzdCIsIm1vZGVsIiwicGF0aCIsInNvcnRlciIsIlNvcnRlciIsIkN1c3RvbUxpc3RJdGVtIiwiSEJveCIsImNsYXNzIiwiRGlhbG9nIiwidGl0bGUiLCJzdGF0ZSIsIlZhbHVlU3RhdGUiLCJJbmZvcm1hdGlvbiIsInJlZiIsInJlc2l6YWJsZSIsImNvbnRlbnRXaWR0aCIsImZvb3RlciIsIk1hbmFnZWRPYmplY3QiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVJlZmVyZW5jZSwgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDdXN0b21MaXN0SXRlbSBmcm9tIFwic2FwL20vQ3VzdG9tTGlzdEl0ZW1cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwic2FwL20vVG9vbGJhclwiO1xuaW1wb3J0IFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcIi4uLy4uL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQWNjZXB0QWxsUGFyYW1zLCBSZWNvbW1lbmRhdGlvbkRhdGEgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCIuLi8uLi9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlciwgdHlwZSBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi8uLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuXG5leHBvcnQgZW51bSBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRfUmVjb21tZW5kYXRpb25zXCIsXG5cdElnbm9yZSA9IFwiSWdub3JlX1JlY29tbWVuZGF0aW9uc1wiLFxuXHRDb250aW51ZSA9IFwiQ29udGludWVfRWRpdGluZ1wiLFxuXHRTa2lwcGVkID0gXCJTa2lwcGVkXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuUmVjb21tZW5kYXRpb25zLkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiKVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyBleHRlbmRzIE1hbmFnZWRPYmplY3Qge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZz4pIHtcblx0XHRzdXBlcihwcm9wcyk7XG5cdFx0dGhpcy52aWV3ID0gcHJvcHMudmlldyBhcyBWaWV3O1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwodGhpcy52aWV3KTtcblx0fVxuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2chOiBSZWY8RGlhbG9nPjtcblxuXHRwdWJsaWMgdmlldyE6IFZpZXc7XG5cblx0cHJpdmF0ZSBjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsITogUmVzb3VyY2VNb2RlbDtcblxuXHRwcm90ZWN0ZWQga2V5ITogc3RyaW5nO1xuXG5cdHByaXZhdGUgaXNTYXZlITogYm9vbGVhbjtcblxuXHRwcml2YXRlIGFjY2VwdEFsbFBhcmFtcyE6IEFjY2VwdEFsbFBhcmFtcztcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgc2VsZWN0ZWQgZGlhbG9nIGxpc3Qgb3B0aW9uXG5cdCAqL1xuXHRwcml2YXRlIHByb21pc2VSZXNvbHZlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFJlamVjdHMgdGhlIHByb21pc2Ugb2Ygb3BlbiBkaWFsb2dcblx0ICovXG5cdHB1YmxpYyBwcm9taXNlUmVqZWN0ITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IHZpc2libGVDb250ZXh0UGF0aHMgPSB0aGlzLmdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHModmlzaWJsZUNvbnRleHRQYXRocyk7XG5cdFx0Y29uc3QgcmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMuZm9yRWFjaCgocmVjb21tZW5kYXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgY29udGV4dCA9IHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHJlY29tbWVuZGF0aW9uLnByb3BlcnR5UGF0aCA/IHJlY29tbWVuZGF0aW9uLnByb3BlcnR5UGF0aCA6IFwiXCI7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09PSBudWxsIHx8XG5cdFx0XHRcdFx0Y29udGV4dD8uZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdFx0Y29udGV4dD8uZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSA9PSBcIlwiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJlY29tbWVuZGF0aW9ucy5wdXNoKHJlY29tbWVuZGF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiByZWNvbW1lbmRhdGlvbnM7XG5cdFx0Ly8gY2hlY2sgaWYgd2UgaGF2ZSByZWNvbW1lbmRhdGlvbnMgZnJvbSB0aGUgY3VycmVudCBwYWdlIGluIHRoZSBsb2NhbEFubm90YXRpb25Nb2RlbFxuXHRcdC8vIHJldHVybiBvcGVuIHJlY29tbWVuZGF0aW9ucy5cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGNvbnRleHQgcGF0aHNcblx0ICovXG5cblx0cHVibGljIGdldFZpc2libGVQYWdlQ29udGV4dFBhdGhzKCk6IChzdHJpbmcgfCB1bmRlZmluZWQpW10ge1xuXHRcdGNvbnN0IHZpc2libGVQYWdlQ29udGV4dFBhdGhzID0gW3RoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCldO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB0aGlzLnZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIEJhc2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IGZjbENvbnRyb2xsZXIgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0Y29uc3QgaXNGY2xFbmFibGVkID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5faXNGY2xFbmFibGVkKCk7XG5cdFx0Y29uc3QgaXNGdWxsU2NyZWVuID0gaXNGY2xFbmFibGVkID8gZmNsQ29udHJvbGxlci5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlbiA6IHRydWU7XG5cdFx0aWYgKGlzRmNsRW5hYmxlZCAmJiAhaXNGdWxsU2NyZWVuKSB7XG5cdFx0XHRjb25zdCByaWdodE1vc3RDb250ZXh0ID0gZmNsQ29udHJvbGxlci5nZXRSaWdodG1vc3RDb250ZXh0KCk7XG5cdFx0XHR2aXNpYmxlUGFnZUNvbnRleHRQYXRocy5wdXNoKHJpZ2h0TW9zdENvbnRleHQ/LmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB2aXNpYmxlUGFnZUNvbnRleHRQYXRocztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhzIFBhdGhzIG9mIHRoZSBjb250ZXh0c1xuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbkRhdGEgZm9yIHZpc2libGUgY29udGV4dHNcblx0ICovXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyhjb250ZXh0UGF0aHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblx0XHRpZiAoY29udGV4dFBhdGhzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gKHRoaXMudmlldy5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldExvY2FsQW5ub3RhdGlvbk1vZGVsKCk7XG5cdFx0XHQvLyBjaGVjayBjb250ZXh0IHBhdGhzIGluIGxvY2FsIGFubm90YXRpb24gbW9kZWxzIHdoaWNoIG1hdGNoIHRvXG5cdFx0XHQvLyAxLiBjdXJyZW50IHBhZ2UgYW5kXG5cdFx0XHQvLyAyLiBpbW1lZGlhdGUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcGFnZVxuXHRcdFx0Ly8gTmVlZCB0byBjb25zaWRlciBhbHNvIGltbWVkaWF0ZSBjaGlsZHJlblxuXHRcdFx0Ly8gaXRlcmF0ZSBvdmVyIGFsbCBrZXlzXG5cdFx0XHRjb250ZXh0UGF0aHMuZm9yRWFjaCgoY29udGV4dFBhdGgpID0+IHtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXRoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25Nb2RlbC5nZXRPYmplY3QoY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGlmIChsb2NhbEFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25PYmplY3QgPSBsb2NhbEFubm90YXRpb25PYmplY3Q7XG5cdFx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHRcdCAqIFRoZSBsb2NhbCBhbm5vdGF0aW9uIG9iamVjdCB3aWxsIGJlIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIDpcblx0XHRcdFx0XHRcdCAqIHtcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogUHJvcGVydHlOYW1lOiB7XG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIFx0IH1cblx0XHRcdFx0XHRcdCAqIHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogfVxuXHRcdFx0XHRcdFx0ICpcblx0XHRcdFx0XHRcdCAqIHNvIGluIG9yZGVyIHRvIGdldCB0aGUgcmVjb21tZW5kYXRpb25zIGFzIHBlciBlYWNoIGNvbnRleHQgLSBmb3IgcGFyZW50L2NoaWxkIGVudGl0aWVzIHdlIG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGVhY2gga2V5cyByZWN1cnNpdmVseSBpbiB0aGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QgZnVuY3Rpb24sXG5cdFx0XHRcdFx0XHQgKiBmb3JtIHRoZSBjb3JyZXNwb25kaW5nIHN0cnVjdHVyZSBhbmQgdGhlbiBzZW5kIGl0IGZvciBnZXR0aW5nIHRoZSByZWNvbW1lbmRhdGlvbnMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdFx0XHQgKi9cblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdCwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9wZW5SZWNvbW1lbmRhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGFubm90YXRpb25PYmplY3Rcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwcml2YXRlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSk6IHZvaWQge1xuXHRcdGlmIChhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRjb25zdCByZWNvbW1lbmRhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdID0gYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBhbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV07XG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoKGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBPRGF0YVY0Q29udGV4dD4pW1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3RbY3VycmVudEtleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIilcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldID0gY3VycmVudFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qga2V5cyA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEVudGl0eUtleXMoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0KHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllciA9IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0PyBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdDoga2V5c1tcInRlY2huaWNhbEtleXNcIl07XG5cdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdCxcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQsXG5cdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgZGF0YSBvYmplY3QgZm9yIHJlY29tbWVuZGF0aW9uc1xuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25Db250ZXh0IFRoZSByZWNvbW1lbmRhdGlvbiBjb250ZXh0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uRGF0YVxuXHQgKiBAcGFyYW0gY29udGV4dEtleSBDb250ZXh0IEtleVxuXHQgKi9cblxuXHRwcml2YXRlIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdGNvbnRleHREYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRcdG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdLFxuXHRcdGNvbnRleHRLZXkgPSBcIlwiXG5cdCk6IHZvaWQge1xuXHRcdGZvciAoY29uc3QgY3VycmVudEtleSBpbiBjb250ZXh0RGF0YSkge1xuXHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gY29udGV4dERhdGFbY3VycmVudEtleV07XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZUlzQ29udGV4dCA9XG5cdFx0XHRcdFx0KGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBICYmIChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCIpO1xuXHRcdFx0XHRpZiAoY3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gY3VycmVudEtleS5zcGxpdChcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpWzBdO1xuXHRcdFx0XHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbjogUmVjb21tZW5kYXRpb25EYXRhID0ge1xuXHRcdFx0XHRcdFx0Y29udGV4dDogcmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBjb250ZXh0S2V5ID8gYCR7Y29udGV4dEtleX0vJHtwcm9wZXJ0eVBhdGh9YCA6IHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdHZhbHVlOiBjdXJyZW50VmFsdWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXI6IChyZWNvbW1lbmRhdGlvbkNvbnRleHQgYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyLFxuXHRcdFx0XHRcdFx0Y29udGV4dElkZW50aWZpZXJUZXh0OiBbXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Y29uc3QgZGVzY3JpcHRpb24gPSBjb250ZXh0RGF0YVtgJHtwcm9wZXJ0eVBhdGh9QCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25gXTtcblx0XHRcdFx0XHRpZiAoZGVzY3JpcHRpb24pIHtcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbi50ZXh0ID0gZGVzY3JpcHRpb24gYXMgc3RyaW5nO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLnB1c2gob3BlblJlY29tbWVuZGF0aW9uKTtcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgJiYgIWN1cnJlbnRWYWx1ZUlzQ29udGV4dCkge1xuXHRcdFx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdFx0XHRjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgdGhlIGNvbmZpcm0gcmVjb21tZW5kYXRpb25zIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzU2F2ZSBCb29sZWFuIGZsYWcgd2hpY2ggd291bGQgYmUgc2V0IHRvIHRydWUgaWYgd2UgYXJlIHNhdmluZyB0aGUgZG9jdW1lbnQgYW5kIHdvdWxkIGJlIGZhbHNlIGlmIHdlIGRvIGFwcGx5IGNoYW5nZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCB3b3VsZCByZXNvbHZlIHdpdGggUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiAoQWNjZXB0LCBJZ25vcmUsIENvbnRpbnVlLCBTa2lwcGVkKVxuXHQgKi9cblx0cHVibGljIGFzeW5jIG9wZW4oaXNTYXZlOiBib29sZWFuKTogUHJvbWlzZTxSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIHwgdW5kZWZpbmVkPiB7XG5cdFx0Ly8gY2hlY2sgZm9yIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9uc1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnMoKTtcblx0XHRpZiAob3BlblJlY29tbWVuZGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmFkZENvbnRleHRJZGVudGlmaWVyVGV4dChcblx0XHRcdFx0eyByZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnMgfSxcblx0XHRcdFx0dGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0ge1xuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGE6IG9wZW5SZWNvbW1lbmRhdGlvbnNcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGJ1aWx0LWluIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IGZvdW5kIHRoZW4gY2hlY2sgZm9yIGxlZ2FjeSByZWNvbW1lbmRhdGlvbnMuXG5cdFx0XHRjb25zdCBsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCA9ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmNoZWNrSWZSZWNvbW1lbmRhdGlvbnNFeGlzdCgpO1xuXHRcdFx0aWYgKGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuZmV0Y2hBY2NlcHRBbGxQYXJhbXMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyIHJlY29tbWVuZGF0aW9uRGF0YSB0byBvbmx5IGluY2x1ZGUgYWN0aXZlIHJlY29tbWVuZGF0aW9uc1xuXHRcdGlmICh0aGlzLmFjY2VwdEFsbFBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEpIHtcblx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zLnJlY29tbWVuZGF0aW9uRGF0YSA9IHRoaXMuX2ZpbHRlckFjdGl2ZVJlY29tbWVuZGF0aW9ucyh0aGlzLmFjY2VwdEFsbFBhcmFtcy5yZWNvbW1lbmRhdGlvbkRhdGEpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gdGhpcy5nZXRBY2NlcHRBbGxNb2RlbCgpO1xuXHRcdHRoaXMudmlldy5zZXRNb2RlbChhY2NlcHRNb2RlbCwgXCJfYWNjZXB0RGlhbG9nTW9kZWxcIik7XG5cdFx0aWYgKCFhY2NlcHRNb2RlbC5nZXREYXRhKCkuaXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uU2tpcHBlZDtcblx0XHR9XG5cdFx0dGhpcy5pc1NhdmUgPSBpc1NhdmU7XG5cdFx0Y29uc3QgZGlhbG9nID0gdGhpcy5nZXRDb250ZW50KCk7XG5cdFx0ZGlhbG9nPy5zZXRFc2NhcGVIYW5kbGVyKHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy52aWV3LmFkZERlcGVuZGVudChkaWFsb2cgYXMgVUk1RWxlbWVudCk7XG5cdFx0ZGlhbG9nPy5vcGVuKCk7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgdG8gY2xvc2UgdGhlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbiBkaWFsb2cuXG5cdCAqXG5cdCAqL1xuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uY2xvc2UoKTtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogRmlsdGVycyByZWNvbW1lbmRhdGlvbiBkYXRhIHRvIG9ubHkgaW5jbHVkZSByZWNvbW1lbmRhdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uRGF0YSBBcnJheSBvZiByZWNvbW1lbmRhdGlvbiBkYXRhIHRvIGZpbHRlclxuXHQgKiBAcmV0dXJucyBGaWx0ZXJlZCBhcnJheSBjb250YWluaW5nIG9ubHkgYWN0aXZlIHJlY29tbWVuZGF0aW9uc1xuXHQgKi9cblx0cHJpdmF0ZSBfZmlsdGVyQWN0aXZlUmVjb21tZW5kYXRpb25zKHJlY29tbWVuZGF0aW9uRGF0YTogUmVjb21tZW5kYXRpb25EYXRhW10pOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRjb25zdCBhY3RpdmVSZWNvbW1lbmRhdGlvbnMgPVxuXHRcdFx0KGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldFByb3BlcnR5KFwiL2FjdGl2ZVJlY29tbWVuZGF0aW9uc1wiKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gfCBudWxsKSA/PyB7fTtcblxuXHRcdHJldHVybiByZWNvbW1lbmRhdGlvbkRhdGEuZmlsdGVyKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSByZWNvbW1lbmRhdGlvbi5jb250ZXh0Py5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoIWNvbnRleHRQYXRoIHx8ICFyZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhY3RpdmVQYXRoc0ZvckNvbnRleHQgPSBhY3RpdmVSZWNvbW1lbmRhdGlvbnNbY29udGV4dFBhdGhdO1xuXHRcdFx0aWYgKCFhY3RpdmVQYXRoc0ZvckNvbnRleHQgfHwgYWN0aXZlUGF0aHNGb3JDb250ZXh0Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSByZWNvbW1lbmRhdGlvbidzIHByb3BlcnR5UGF0aCBpcyBpbiB0aGUgYWN0aXZlIHJlY29tbWVuZGF0aW9ucyBsaXN0XG5cdFx0XHRyZXR1cm4gYWN0aXZlUGF0aHNGb3JDb250ZXh0LmluY2x1ZGVzKHJlY29tbWVuZGF0aW9uLnByb3BlcnR5UGF0aCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQWNjZXB0IGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25BY2NlcHRBbmRTYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBpc0FjY2VwdGVkID0gYXdhaXQgKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuYWNjZXB0UmVjb21tZW5kYXRpb25zKFxuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtc1xuXHRcdFx0KTtcblx0XHRcdGlmICghaXNBY2NlcHRlZCkge1xuXHRcdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRMb2cuZXJyb3IoXCJBY2NlcHQgUmVjb21tZW5kYXRpb25zIEZhaWxlZFwiKTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgSWdub3JlIGFuZCBTYXZlIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25JZ25vcmVBbmRTYXZlKCk6IHZvaWQge1xuXHRcdCh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmlnbm9yZVJlY29tbWVuZGF0aW9uRm9yQ29udGV4dHMoKTtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uSWdub3JlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciBmb3IgQ29udGludWUgRWRpdGluZyBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIG9uQ29udGludWVFZGl0aW5nKCk6IHZvaWQge1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxhYmVsIG9yIG5hbWUgb2YgdGhlIEZpZWxkIGJhc2VkIG9uIGl0cyBwcm9wZXJ0eSBwYXRoLlxuXHQgKiBAcGFyYW0gdGFyZ2V0UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBsYWJlbCBvZiB0aGUgRmllbGQuXG5cdCAqL1xuXHRwcml2YXRlIGdldEZpZWxkTmFtZSh0YXJnZXRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludm9sdmVkRGF0YU1vZGVsT2JqZWN0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGg8UHJvcGVydHk+KFxuXHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fFxuXHRcdFx0dGFyZ2V0UGF0aC5zcGxpdChcIi9cIilbdGFyZ2V0UGF0aC5zcGxpdChcIi9cIikubGVuZ3RoIC0gMV1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGV4dCBmb3IgcmVjb21tZW5kYXRpb24gYmFzZWQgb24gZGlzcGxheSBtb2RlLlxuXHQgKiBAcGFyYW0gcmVjb21tZW5kYXRpb25cblx0ICogQHBhcmFtIGRpc3BsYXlNb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgZm9yIGEgcmVjb21tZW5kYXRpb25cblx0ICovXG5cdHByaXZhdGUgZ2V0VGV4dChyZWNvbW1lbmRhdGlvbjogU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlLCBkaXNwbGF5TW9kZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAocmVjb21tZW5kYXRpb24udGV4dCB8fCByZWNvbW1lbmRhdGlvbi52YWx1ZSkge1xuXHRcdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udGV4dCE7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udGV4dCwgcmVjb21tZW5kYXRpb24udmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnZhbHVlLCByZWNvbW1lbmRhdGlvbi50ZXh0KTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlITtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnZhbHVlIHx8IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBCdXR0b24gd2l0aCBnaXZlbiB0ZXh0LCB0eXBlIGFuZCBwcmVzc0hhbmRsZXIuXG5cdCAqIEBwYXJhbSB0ZXh0IFRleHQgZm9yIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHR5cGUgVHlwZSBvZiB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSBwcmVzc0hhbmRsZXIgUHJlc3MgSGFuZGxlciBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcmV0dXJucyBCdXR0b24gd2l0aCB0aGUgZ2l2ZW4gc2V0dGluZ3Ncblx0ICovXG5cdHByaXZhdGUgZ2V0QnV0dG9uKHRleHQ6IHN0cmluZywgdHlwZTogc3RyaW5nLCBwcmVzc0hhbmRsZXI6IEV2ZW50SGFuZGxlcik6IEJ1dHRvbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b24gdGV4dD17dGV4dH0gdHlwZT17dHlwZX0gd2lkdGg9e1wiYXV0b1wifSBwcmVzcz17cHJlc3NIYW5kbGVyfT5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8RmxleEl0ZW1EYXRhIG1pbldpZHRoPXtcIjEwMCVcIn0+PC9GbGV4SXRlbURhdGE+XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgRm9vdGVyIHdpdGggQnV0dG9ucy5cblx0ICogQHJldHVybnMgRm9vdGVyXG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0Rm9vdGVyKCk6IFRvb2xiYXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VG9vbGJhcj5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VG9vbGJhclNwYWNlciAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpLFxuXHRcdFx0XHRcdFx0XHRcdFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BY2NlcHRBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX2dldERpYWxvZ0J1dHRvblRleHQodGhpcy5pc1NhdmUsIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uSWdub3JlKSxcblx0XHRcdFx0XHRcdFx0XHRcIkdob3N0XCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbklnbm9yZUFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19DT05USU5VRV9FRElUSU5HXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0RGlhbG9nQnV0dG9uVGV4dChzYXZlOiBib29sZWFuLCByZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uOiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0FjY2VwdEJ1dHRvbjogYm9vbGVhbiA9IHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0O1xuXHRcdGlmIChzYXZlKSB7XG5cdFx0XHRpZiAoIXRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRPYmplY3QoKS5IYXNBY3RpdmVFbnRpdHkpIHtcblx0XHRcdFx0cmV0dXJuIGlzQWNjZXB0QnV0dG9uXG5cdFx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfQ1JFQVRFXCIpXG5cdFx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRV9BTkRfQ1JFQVRFXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGlzQWNjZXB0QnV0dG9uXG5cdFx0XHRcdD8gdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19BQ0NFUFRfQU5EX1NBVkVcIilcblx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRV9BTkRfU0FWRVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGlzQWNjZXB0QnV0dG9uXG5cdFx0XHRcdD8gdGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19BQ0NFUFRcIilcblx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0lHTk9SRVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY3JlYXRlZCBhIEpTT04gTW9kZWwgZm9yIHRoZSBhY2NlcHQgYWxsIGRpYWxvZyBkYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUgSlNPTiBNb2RlbCBmb3IgYWNjZXB0IGFsbCBkaWFsb2cuXG5cdCAqL1xuXHRnZXRBY2NlcHRBbGxNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGNvbnN0IGl0ZW1zID0gW107XG5cdFx0Zm9yIChjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgb2YgdGhpcy5hY2NlcHRBbGxQYXJhbXM/LnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXSkge1xuXHRcdFx0Y29uc3QgZW50aXR5TmFtZUxhYmVsID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXRFbnRpdHlOYW1lKHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCBpZGVudGlmaWVyVGV4dHMgPVxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0ICYmIHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gYCR7ZW50aXR5TmFtZUxhYmVsfSAoJHtyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0fSlgXG5cdFx0XHRcdFx0OiBlbnRpdHlOYW1lTGFiZWw7XG5cblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEudmFsdWUgfHwgcmVjb21tZW5kYXRpb25EYXRhLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0Py5nZXRQYXRoKCkgKyBcIi9cIiArIHJlY29tbWVuZGF0aW9uRGF0YS5wcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHR0aGlzLnZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGxpc3REYXRhID0ge1xuXHRcdFx0XHRcdGZpZWxkTmFtZTogdGhpcy5nZXRGaWVsZE5hbWUodGFyZ2V0UGF0aCkudmFsdWVPZigpLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWU6IHRoaXMuZ2V0VGV4dChyZWNvbW1lbmRhdGlvbkRhdGEsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRpZGVudGlmaWVyVGV4dHM6IGlkZW50aWZpZXJUZXh0c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpdGVtcy5wdXNoKGxpc3REYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YWNjZXB0TW9kZWwuc2V0RGF0YSh7IGl0ZW1zOiBpdGVtcyB9KTtcblx0XHRyZXR1cm4gYWNjZXB0TW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZ3JvdXBzIHRoZSBjb250ZXh0cyBhY2NvcmRpbmcgdG8gdGhlIGlkZW50aWZpZXIgdGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBpdGVtXG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IG9mIHRoZSBncm91cFxuXHQgKi9cblx0Z2V0R3JvdXAoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBjb250ZXh0LmdldFByb3BlcnR5KFwiaWRlbnRpZmllclRleHRzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0aGUgYWNjZXB0IGRpYWxvZy5cblx0ICogQHJldHVybnMgQSBtZXNzYWdlIHdpdGggdGhlIGRlc2lyZWQgdGV4dC5cblx0ICovXG5cdGdldE1lc3NhZ2UoKTogVGV4dCB7XG5cdFx0Y29uc3QgYWNjZXB0QWxsRGF0YSA9ICh0aGlzLnZpZXcuZ2V0TW9kZWwoXCJfYWNjZXB0RGlhbG9nTW9kZWxcIikgYXMgSlNPTk1vZGVsKT8uZ2V0RGF0YSgpPy5pdGVtcztcblx0XHRjb25zdCBtZXNzYWdlVGV4dCA9XG5cdFx0XHRhY2NlcHRBbGxEYXRhLmxlbmd0aCA+IDFcblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRcIiwgW2FjY2VwdEFsbERhdGEubGVuZ3RoXSlcblx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRfU0lOR1VMQVJcIik7XG5cdFx0cmV0dXJuIDxUZXh0IHRleHQ9e21lc3NhZ2VUZXh0fSAvPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBjb250ZW50IGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIGxpc3QgYXMgY29udGVudCBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0Z2V0RGlhbG9nQ29udGVudCgpOiBMaXN0IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PExpc3QgaXRlbXM9e3sgbW9kZWw6IFwiX2FjY2VwdERpYWxvZ01vZGVsXCIsIHBhdGg6IFwiL2l0ZW1zXCIsIHNvcnRlcjogbmV3IFNvcnRlcihcImlkZW50aWZpZXJUZXh0c1wiLCBmYWxzZSwgdGhpcy5nZXRHcm91cCkgfX0+XG5cdFx0XHRcdDxDdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHQ8SEJveCBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5CZWdpbiBzYXBVaVRpbnlNYXJnaW5cIj5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9XCJ7X2FjY2VwdERpYWxvZ01vZGVsPmZpZWxkTmFtZX06IHtfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGRWYWx1ZX1cIiAvPlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdDwvTGlzdD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBidWlsZGluZyBibG9jayByZW5kZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGdldENvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19USVRMRVwiKX1cblx0XHRcdFx0c3RhdGU9e1ZhbHVlU3RhdGUuSW5mb3JtYXRpb259XG5cdFx0XHRcdHR5cGU9e1wiTWVzc2FnZVwifVxuXHRcdFx0XHRyZWY9e3RoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nfVxuXHRcdFx0XHRyZXNpemFibGU9e1widHJ1ZVwifVxuXHRcdFx0XHRjb250ZW50V2lkdGg9e1wiMzVyZW1cIn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNZXNzYWdlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldERpYWxvZ0NvbnRlbnQoKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Zm9vdGVyOiA8Pnt0aGlzLmdldEZvb3RlcigpfTwvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KSBhcyBEaWFsb2c7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW1DWUEsNEJBQTRCLDBCQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBQSxPQUE1QkEsNEJBQTRCO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCw0QkFBQSxHQUFBQSw0QkFBQTtFQUFBLElBUTNCRSwyQkFBMkIsSUFBQUMsSUFBQSxHQUR2Q0MsY0FBYyxDQUFDLGtFQUFrRSxDQUFDLEVBQUFDLEtBQUEsR0FRakZDLGVBQWUsQ0FBQyxDQUFDLEVBQUFILElBQUEsQ0FBQUksTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBTmxCLFNBQUFQLDRCQUFZUSxLQUFnRCxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUM3REEsS0FBQSxHQUFBRixjQUFBLENBQUFHLElBQUEsT0FBTUYsS0FBSyxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsaUNBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUNiQSxLQUFBLENBQUtJLElBQUksR0FBR0wsS0FBSyxDQUFDSyxJQUFZO01BQzlCSixLQUFBLENBQUtLLHdDQUF3QyxHQUFHQyxnQkFBZ0IsQ0FB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
@@ -268,6 +268,12 @@ export class ConfirmRecommendationDialog extends ManagedObject {
268
268
  return undefined;
269
269
  }
270
270
  }
271
+
272
+ // Filter recommendationData to only include active recommendations
273
+ if (this.acceptAllParams.recommendationData) {
274
+ this.acceptAllParams.recommendationData = this._filterActiveRecommendations(this.acceptAllParams.recommendationData);
275
+ }
276
+
271
277
  const acceptModel = this.getAcceptAllModel();
272
278
  this.view.setModel(acceptModel, "_acceptDialogModel");
273
279
  if (!acceptModel.getData().items?.length) {
@@ -293,6 +299,32 @@ export class ConfirmRecommendationDialog extends ManagedObject {
293
299
  this.confirmRecommendationDialog.current?.destroy();
294
300
  }
295
301
 
302
+ /**
303
+ * Filters recommendation data to only include recommendations that are currently active.
304
+ * @param recommendationData Array of recommendation data to filter
305
+ * @returns Filtered array containing only active recommendations
306
+ */
307
+ private _filterActiveRecommendations(recommendationData: RecommendationData[]): RecommendationData[] {
308
+ const localAnnotationModel = (this.view.getModel() as ODataModel).getLocalAnnotationModel();
309
+ const activeRecommendations =
310
+ (localAnnotationModel.getProperty("/activeRecommendations") as Record<string, string[] | undefined> | null) ?? {};
311
+
312
+ return recommendationData.filter((recommendation) => {
313
+ const contextPath = recommendation.context?.getPath();
314
+ if (!contextPath || !recommendation.propertyPath) {
315
+ return false;
316
+ }
317
+
318
+ const activePathsForContext = activeRecommendations[contextPath];
319
+ if (!activePathsForContext || activePathsForContext.length === 0) {
320
+ return false;
321
+ }
322
+
323
+ // Check if the recommendation's propertyPath is in the active recommendations list
324
+ return activePathsForContext.includes(recommendation.propertyPath);
325
+ });
326
+ }
327
+
296
328
  /**
297
329
  * Handler for Accept and Save button.
298
330
  */