@sapui5/sap.fe.templates 1.148.1 → 1.149.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
  4. package/src/sap/fe/templates/ListComponent.js +2 -5
  5. package/src/sap/fe/templates/ListReport/Component.js +2 -5
  6. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +84 -14
  7. package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +88 -13
  8. package/src/sap/fe/templates/ListReport/LRMessageStrip.js +41 -1
  9. package/src/sap/fe/templates/ListReport/LRMessageStrip.ts +43 -0
  10. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +6 -9
  11. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +4 -7
  12. package/src/sap/fe/templates/ListReport/manifest.json +1 -1
  13. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +12 -6
  14. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +14 -6
  15. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +7 -1
  16. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +5 -0
  17. package/src/sap/fe/templates/ObjectPage/Component.js +12 -15
  18. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +15 -9
  19. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +7 -3
  20. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +35 -24
  21. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +20 -2
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +5 -18
  23. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +2 -15
  24. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +10 -3
  25. package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +12 -1
  26. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -5
  27. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -5
  28. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -6
  29. package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
  30. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +0 -4
  31. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +0 -1
  32. package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +0 -1
  33. package/src/sap/fe/templates/library.js +1 -1
@@ -238,8 +238,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
238
238
  * If the counts are set to "out of date" and the selected IconTabFilter doesn't contain an inner control, all inner controls are requested to get the new counts.
239
239
  * @param bValue Either freezes the control or not
240
240
  */;
241
- _proto.setCountsOutDated = function setCountsOutDated() {
242
- let bValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
241
+ _proto.setCountsOutDated = function setCountsOutDated(bValue = true) {
243
242
  this.setProperty("countsOutDated", bValue);
244
243
  // if the current tab is not configured with no inner Control
245
244
  // the tab counts must be manually refreshed since no Macro API will sent event internalDataRequested
@@ -323,8 +322,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
323
322
  * @param bOnlyForVisibleTab Should display only the visible controls
324
323
  * @returns An array of controls
325
324
  */;
326
- _proto.getAllInnerControls = function getAllInnerControls() {
327
- let bOnlyForVisibleTab = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
325
+ _proto.getAllInnerControls = function getAllInnerControls(bOnlyForVisibleTab = false) {
328
326
  return this.innerControls.reduce((aInnerControls, sInnerControl) => {
329
327
  const oControl = UI5Element.getElementById(sInnerControl);
330
328
  if (oControl) {
@@ -439,8 +437,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
439
437
  this?.refreshSelectedInnerControlContent();
440
438
  }
441
439
  };
442
- _proto._setInnerBinding = function _setInnerBinding() {
443
- let bRequestIfNotInitialized = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
440
+ _proto._setInnerBinding = function _setInnerBinding(bRequestIfNotInitialized = false) {
444
441
  if (this.content) {
445
442
  this.getAllInnerControls().forEach(oMacroAPI => {
446
443
  const oIconTabFilter = this._getTabFromInnerControl(oMacroAPI);
@@ -519,4 +516,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUt
519
516
  }), _class2)) || _class);
520
517
  return MultipleModeControl;
521
518
  }, false);
522
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJkZWZhdWx0VmFsdWUiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzciLCJhc3NvY2lhdGlvbiIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiY29udGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwib25BZnRlckljb25UYWJCYXJSZW5kZXJpbmciLCJiaW5kIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInNob3dDb3VudHMiLCJzZXRWaXNpYmxlT3ZlcnJpZGRlbiIsInNldFByb3BlcnR5IiwiZ2V0QWxsSW5uZXJDb250cm9scyIsImZvckVhY2giLCJtYWNyb0FQSSIsImljb25UYWJGaWx0ZXIiLCJfZ2V0VGFiRnJvbUlubmVyQ29udHJvbCIsIm9yaWdpblNldFZpc2libGUiLCJzZXRWaXNpYmxlIiwidmFsdWUiLCJnZXRWaXNpYmxlIiwicmVmcmVzaFRhYkNvdW50Iiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRUYWJzTW9kZWwiLCJvRmlsdGVyQ29udHJvbCIsIl9nZXRGaWx0ZXJDb250cm9sIiwic2V0Q291bnRzT3V0RGF0ZWQiLCJvRmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50Iiwib01hY3JvQVBJIiwiYXR0YWNoRXZlbnQiLCJpbnRlcm5hbFJlZnJlc2hUYWJzQ291bnQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJyZW5kZXIiLCJvUm0iLCJvQ29udHJvbCIsInJlbmRlckNvbnRyb2wiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJwZXJzb25hbGl6YXRpb25Qcm9taXNlIiwib0ZpbHRlckJhciIsIl9yZWZyZXNoQ3VzdG9tVmlldyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUiLCJfZ2V0Vmlld0NvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImZpcmVFdmVudCIsImljb25UYWJCYXIiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsImVycm9yIiwiTG9nIiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsImludmFsaWRhdGVDb250ZW50Iiwia2V5cyIsImtleSIsImJWYWx1ZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwidGFic01vZGVsIiwicmVzdWx0cyIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwib1RhYiIsInNUYWJJZCIsIm1JZ25vcmVkRmllbGRzIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJub3RBcHBsaWNhYmxlIiwiZmllbGRzIiwidGl0bGUiLCJfc2V0VGFiTWVzc2FnZVN0cmlwIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhIiwiaWdub3JlZEZpZWxkcyIsImdldFRleHQiLCJpc0EiLCJjaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQiLCJzZXREYXRhIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJvQ2hhcnQiLCJnZXRDb250ZW50IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbmNsdWRlcyIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImZpbHRlckNvbnRyb2wiLCJvVmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwiZ2V0Q291bnRzIiwic2V0Q291bnQiLCJlZGl0RmxvdyIsInN5bmNUYXNrIiwidGhlbiIsImNvdW50IiwiY2F0Y2giLCJ0YWJsZUV2ZW50IiwiZXZlbnRNYWNyb0FQSSIsInRhcmdldEtleSIsInRhYktleXMiLCJtYXAiLCJ0YWIiLCJzcGxpdCIsInJlZnJlc2hUYWJzQ291bnQiLCJvSWNvblRhYkZpbHRlciIsImNvdW50c091dERhdGVkIiwic2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nIiwic2VsZWN0ZWRUYWJLZXkiLCJyZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50IiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSWNvblRhYkJhciRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdFx0Z2V0Q29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2V0VmlzaWJsZU92ZXJyaWRkZW4hOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGZyZWV6ZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGNvdW50c091dERhdGVkITogYm9vbGVhbjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkljb25UYWJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IEljb25UYWJCYXI7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGlubmVyQ29udHJvbHMhOiBzdHJpbmdbXTtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRmaWx0ZXJDb250cm9sITogc3RyaW5nO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgKFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPiAmICRDb250cm9sU2V0dGluZ3MpLFxuXHRcdHNldHRpbmdzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPlxuXHQpIHtcblx0XHRzdXBlcihpZCBhcyBzdHJpbmcsIHNldHRpbmdzKTtcblx0XHR0aGlzLmNvbnRlbnQ/LmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogdGhpcy5vbkFmdGVySWNvblRhYkJhclJlbmRlcmluZy5iaW5kKHRoaXMpXG5cdFx0fSk7XG5cdH1cblxuXHRvbkFmdGVySWNvblRhYkJhclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LnJlc3VtZUJpbmRpbmc/LighdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpO1xuXHRcdGlmICh0aGlzLnNob3dDb3VudHMgJiYgIXRoaXMuc2V0VmlzaWJsZU92ZXJyaWRkZW4pIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzZXRWaXNpYmxlT3ZlcnJpZGRlblwiLCB0cnVlKTtcblx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJOiBNYWNyb0FQSSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdC8vIE5vIGNvdW50IHRvIHNob3dcblx0XHRcdFx0aWYgKCFpY29uVGFiRmlsdGVyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb3JpZ2luU2V0VmlzaWJsZSA9IGljb25UYWJGaWx0ZXIuc2V0VmlzaWJsZTtcblx0XHRcdFx0aWNvblRhYkZpbHRlci5zZXRWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0aWYgKGljb25UYWJGaWx0ZXIuZ2V0VmlzaWJsZSgpID09PSBmYWxzZSAmJiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoVGFiQ291bnQobWFjcm9BUEkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luU2V0VmlzaWJsZS5iaW5kKGljb25UYWJGaWx0ZXIpKHZhbHVlKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3NcblxuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpO1xuXHRcdGlmICghb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBubyBmaWx0ZXJiYXIsIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBjb3VudHMgaW4gdGhlIHRhYnMgaW1tZWRpYXRlbHlcblx0XHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXJBUEkgPSBvRmlsdGVyQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdG9NYWNyb0FQSS5hdHRhY2hFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCB0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHZvaWQge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IEpTT05Nb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvQ29udGVudC5zZXRNb2RlbChvTW9kZWwsIHNUYWJzTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlubmVyIGNvbnRyb2wgb2YgdGhlIGRpc3BsYXllZCB0YWIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sXG5cdCAqL1xuXHRnZXRTZWxlY3RlZElubmVyQ29udHJvbCgpOiBJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvU2VsZWN0ZWRUYWIgPSB0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkuZmluZCgob0l0ZW0pID0+IChvSXRlbSBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdHJldHVybiBvU2VsZWN0ZWRUYWJcblx0XHRcdD8gdGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZmluZCgob01hY3JvQVBJKSA9PiB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSkgPT09IG9TZWxlY3RlZFRhYilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBmaXJlZCBieSB0aGUgSWNvblRhYkJhclxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB1cGRhdGVkLCBvdGhlcndpc2Ugbm90aGluZ1xuXHQgKi9cblx0c3RhdGljIGhhbmRsZVRhYkNoYW5nZShvRXZlbnQ6IEljb25UYWJCYXIkU2VsZWN0RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0Y29uc3Qgb0ljb25UYWJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgb011bHRpQ29udHJvbCA9IG9JY29uVGFiQmFyLmdldFBhcmVudCgpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uUHJvbWlzZTtcblx0XHRpZiAoc1NlbGVjdGVkS2V5ICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvTXVsdGlDb250cm9sLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiAhb011bHRpQ29udHJvbC5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKCFvTXVsdGlDb250cm9sLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdFx0XHQvL2N1c3RvbSB0YWJcblx0XHRcdFx0XHRvTXVsdGlDb250cm9sLl9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSwgXCJ0YWJDaGFuZ2VkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwZXJzb25hbGl6YXRpb25Qcm9taXNlID0gTXVsdGlwbGVNb2RlQ29udHJvbC5oYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoc1NlbGVjdGVkS2V5LCBzUHJldmlvdXNTZWxlY3RlZEtleSwgb0ljb25UYWJCYXIpO1xuXHRcdH1cblxuXHRcdG9NdWx0aUNvbnRyb2wuX2dldFZpZXdDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpPy51cGRhdGVBcHBTdGF0ZSgpO1xuXG5cdFx0b011bHRpQ29udHJvbC5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogb0ljb25UYWJCYXIsXG5cdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0cHJldmlvdXNLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhc3luYyBoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoXG5cdFx0c1NlbGVjdGVkS2V5OiBzdHJpbmcsXG5cdFx0c1ByZXZpb3VzU2VsZWN0ZWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvSWNvblRhYkJhcjogSWNvblRhYkJhclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0Q29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJLmFkZCh7XG5cdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjaGFuZ2VTcGVjaWZpY0RhdGE6IHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9JY29uVGFiQmFyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgdXBkYXRpbmcgdGhlIHBlcnNvbmFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgTXVsdGlwbGVNb2RlQ29udHJvbFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIGlubmVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRyZWZyZXNoU2VsZWN0ZWRJbm5lckNvbnRyb2xDb250ZW50KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQ/LigpO1xuXHRcdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4odHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KHVuZGVmaW5lZCwgXCJmb3JjZWRSZWZyZXNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSBpbnZhbGlkYXRlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgaW52YWxpZGF0ZWRcblx0ICovXG5cdGludmFsaWRhdGVDb250ZW50KGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgobWFjcm9BUEkpID0+IHtcblx0XHRcdGlmIChrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGljb25UYWJGaWx0ZXIgJiZcblx0XHRcdFx0XHRcdChpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OnRhYmxlOjoke2tleX06OkxpbmVJdGVtYCB8fCBpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OkN1c3RvbVRhYjo6JHtrZXl9YClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudHMgdG8gXCJvdXQgb2YgZGF0ZVwiIG9yIFwidXAgdG8gZGF0ZVwiXG5cdCAqIElmIHRoZSBjb3VudHMgYXJlIHNldCB0byBcIm91dCBvZiBkYXRlXCIgYW5kIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGRvZXNuJ3QgY29udGFpbiBhbiBpbm5lciBjb250cm9sLCBhbGwgaW5uZXIgY29udHJvbHMgYXJlIHJlcXVlc3RlZCB0byBnZXQgdGhlIG5ldyBjb3VudHMuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRWl0aGVyIGZyZWV6ZXMgdGhlIGNvbnRyb2wgb3Igbm90XG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqIC0gY29udGVudCBpcyB1bmZyb3plbjogdGhlIGJpbmRpbmcgb2YgaW5uZXIgY29udHJvbCByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIHJlc3VtZWQuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAodGFic01vZGVsICYmIG9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHRjb25zdCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+ID0ge307XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdFx0aWYgKCF2aWV3RGF0YS51c2VIaWRkZW5GaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RhYklkID0gb1RhYi5nZXRLZXkoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRub3RBcHBsaWNhYmxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoOiBvRmlsdGVyQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvTWFjcm9BUEkgJiYgb01hY3JvQVBJLmlzQShcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0gdGhpcy5jaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQob01hY3JvQVBJLCBzVGFiSWQsIHJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRhYnNNb2RlbC5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNb2RpZmllcyB0aGUgbWVzc2FnZXN0cmlwIG1lc3NhZ2UgYmFzZWQgb24gZW50aXR5IHNldCBpcyBmaWxlcmFibGUgb3Igbm90LlxuXHQgKiBAcGFyYW0gb01hY3JvQVBJIE1hY3JvIGNoYXJ0IGFwaVxuXHQgKiBAcGFyYW0gc1RhYklkIFRhYiBrZXkgSURcblx0ICogQHBhcmFtIHJlc3VsdHMgU2hvdWxkIGNvbnRhaW4gZmllbGRzIGFuZCB0aXRsZVxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgbW9kaWZpZWQgZmllbGRzIGFuZCB0aXRsZVxuXHQgKi9cblx0Y2hlY2tOb25GaWx0ZXJhYmxlRW50aXR5U2V0KFxuXHRcdG9NYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSxcblx0XHRzVGFiSWQ6IHN0cmluZyxcblx0XHRyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+XG5cdCk6IHsgbm90QXBwbGljYWJsZTogeyBmaWVsZHM6IHN0cmluZ1tdOyB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob01hY3JvQVBJKTtcblx0XHRjb25zdCBvQ2hhcnQgPSBvTWFjcm9BUEk/LmdldENvbnRlbnQgPyBvTWFjcm9BUEkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJFbnRpdHlTZXRGaWxlcmFibGUgPVxuXHRcdFx0b0NoYXJ0ICYmXG5cdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEVudGl0eVNldD4oXG5cdFx0XHRcdChvQ2hhcnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGAke29DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9YClcblx0XHRcdCk/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdGlmIChiRW50aXR5U2V0RmlsZXJhYmxlICE9PSB1bmRlZmluZWQgJiYgIWJFbnRpdHlTZXRGaWxlcmFibGUpIHtcblx0XHRcdGlmIChyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS5maWVsZHMuaW5jbHVkZXMoXCIkc2VhcmNoXCIpKSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlICs9IFwiIFwiICsgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLmZpZWxkcyA9IFtcIm5vbkZpbHRlcmFibGVcIl07XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHNbc1RhYklkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9scy5cblx0ICogQHBhcmFtIGJPbmx5Rm9yVmlzaWJsZVRhYiBTaG91bGQgZGlzcGxheSBvbmx5IHRoZSB2aXNpYmxlIGNvbnRyb2xzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJDb250cm9sKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvQ29udHJvbDogQ29udHJvbCk6IEljb25UYWJGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvVGFiOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSAmJiAob1RhYiBhcyB7IGdldFBhcmVudD86IEZ1bmN0aW9uIH0pLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBvVGFiICYmIG9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSA/IG9UYWIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKTogUGFnZUNvbnRyb2xsZXIge1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJDb25kaXRpb25zOiB1bmtub3duLCBzUmVmcmVzaENhdXNlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQodGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik/Lm9uVmlld05lZWRzUmVmcmVzaD8uKHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0Y3VycmVudFRhYklkOiB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdHJlZnJlc2hDYXVzZTogc1JlZnJlc2hDYXVzZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgY291bnQgb2YgdGhlIFRhYiBjb250YWluaW5nIHRoZSBtYWNybyBwYXNzZWQgYXMgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWFjcm9BUEkgVGhlIGNvbnRlbnQgb2YgdGhlIHRhYiB3ZSB3YW50IHRvIHJlZnJlc2hcblx0ICovXG5cdGFzeW5jIHJlZnJlc2hUYWJDb3VudChtYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRpZiAoIWljb25UYWJGaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG1hY3JvQVBJPy5nZXRDb3VudHMpIHtcblx0XHRcdGljb25UYWJGaWx0ZXIuc2V0Q291bnQoXCIuLi5cIik7XG5cdFx0XHRhd2FpdCB0aGlzLl9nZXRWaWV3Q29udHJvbGxlcigpLmVkaXRGbG93LnN5bmNUYXNrKCk7IC8vIGVuc3VyZSBhbGwgcGVuZGluZyBjaGFuZ2VzIGFyZSBkb25lIGJlZm9yZSByZWZyZXNoaW5nIGNvdW50c1xuXHRcdFx0bWFjcm9BUElcblx0XHRcdFx0LmdldENvdW50cygpXG5cdFx0XHRcdC50aGVuKChjb3VudDogc3RyaW5nKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGljb25UYWJGaWx0ZXIuc2V0Q291bnQoY291bnQgfHwgXCIwXCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbDogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aW50ZXJuYWxSZWZyZXNoVGFic0NvdW50KHRhYmxlRXZlbnQ/OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgcmVmcmVzaCBpcyB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgKGludGVybmFsRGF0YVJlcXVlc3RlZClcblx0XHQvLyB3ZSBjYW5ub3QgdXNlIHRoZSBzZWxlY3RlZCBrZXkgYXMgcmVmZXJlbmNlIHNpbmNlIHRhYmxlIGNhbiBiZSByZWZyZXNoZWQgYnkgU2lkZUVmZmVjdHNcblx0XHQvLyBzbyB0aGUgdGFibGUgY291bGQgYmUgaW50byBhIGRpZmZlcmVudCB0YWIgLT4gd2UgdXNlIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGhlIHRhcmdldGVkIHRhYlxuXHRcdC8vIElmIG5vdCB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgLT4gcmVmcmVzaCBhdCBsZWFzdCB0aGUgY291bnRzIG9mIHRoZSBjdXJyZW50IE1hY3JvQVBJXG5cdFx0Y29uc3QgZXZlbnRNYWNyb0FQSSA9IHRhYmxlRXZlbnQ/LmdldFNvdXJjZSgpIGFzIE1hY3JvQVBJO1xuXHRcdGNvbnN0IHRhcmdldEtleSA9IGV2ZW50TWFjcm9BUEkgPyB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKGV2ZW50TWFjcm9BUEkpPy5nZXRLZXkoKSA6IHRoaXMuY29udGVudD8uZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRpZiAodHlwZW9mIHRhcmdldEtleSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHRhcmdldEtleSA9PT0gXCJcIikge1xuXHRcdFx0XHRjb25zdCB0YWJLZXlzID0gdGhpcy5jb250ZW50Py5nZXRJdGVtcygpLm1hcCgodGFiKSA9PiAodGFiIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpLnNwbGl0KFwiOjpcIilbMl0pID8/IFtdO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQodGFiS2V5cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQoW3RhcmdldEtleS5zcGxpdChcIjo6XCIpWzJdXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyB0aGUgY291bnQgb2YgdGhlIHZpZXdzIGluIHRoZSBNdWx0aU1vZGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtrZXlzXSBUaGUgbGlzdCBvZiB0aGUga2V5cyBpZGVudGlmeWluZyB0aGUgdmlld3MgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHdoaWNoIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWQuIElmIG5vdCBwcm92aWRlZCwgYWxsIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHJlZnJlc2hUYWJzQ291bnQoa2V5cz86IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNob3dDb3VudHMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFrZXlzKSB7XG5cdFx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdH1cblx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHModHJ1ZSkuZm9yRWFjaCgob01hY3JvQVBJKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvSWNvblRhYkZpbHRlciA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdGlmICh0aGlzLmNvdW50c091dERhdGVkIHx8IChrZXlzICYmIG9JY29uVGFiRmlsdGVyICYmIGtleXMuaW5jbHVkZXMob0ljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSkpKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFRhYkNvdW50KG9NYWNyb0FQSSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBjb250ZW50IG9mIHRoZSB1bmRlcmx5aW5nIHZpZXdzIHVwb24gdGhlIG5leHQgb3BlbmluZy5cblx0ICogTm90ZTogVGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIHZpZXcsIGlmIHBhcnQgb2YgdGhlIHByb3ZpZGVkIGtleXMsIHdpbGwgYmUgcmVmcmVzaGVkIGltbWVkaWF0ZWx5LlxuXHQgKiBAcGFyYW0gW2tleXNdIFRoZSBsaXN0IG9mIHRoZSBrZXlzIGlkZW50aWZ5aW5nIHRoZSB2aWV3cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3Igd2hpY2ggdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgcmVmcmVzaGVkLiBJZiBub3QgcHJvdmlkZWQsIGFsbCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHNldFRhYkNvbnRlbnRUb0JlUmVmcmVzaGVkT25OZXh0T3BlbmluZyhrZXlzPzogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBzZWxlY3RlZFRhYktleSA9IHRoaXM/LmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRjb25zdCB0YWJLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IHJlZnJlc2hTZWxlY3RlZFRhYkNvbnRlbnQgPSBrZXlzID8ga2V5cy5pbmNsdWRlcyhzZWxlY3RlZFRhYktleT8uc3BsaXQoXCI6OlwiKVsyXSkgOiB0cnVlO1xuXHRcdGlmIChrZXlzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RlZFRhYktleSAhPT0gYGZlOjp0YWJsZTo6JHtrZXl9OjpMaW5lSXRlbWAgJiYgc2VsZWN0ZWRUYWJLZXkgIT09IGBmZTo6Q3VzdG9tVGFiOjoke2tleX1gKSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcz8uZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzPy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdGlmIChpY29uVGFiRmlsdGVyICYmIGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkgIT09IHNlbGVjdGVkVGFiS2V5KSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzPy5pbnZhbGlkYXRlQ29udGVudCh0YWJLZXlzKTtcblx0XHRpZiAocmVmcmVzaFNlbGVjdGVkVGFiQ29udGVudCkge1xuXHRcdFx0dGhpcz8ucmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0Y29uc3QgYUlnbm9yZWRGaWVsZHMgPSBwcm9wZXJ0aWVzLmlnbm9yZWRGaWVsZHM7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAob0ZpbHRlckNvbnRyb2wgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBwcm9wZXJ0aWVzLnRpdGxlKSB7XG5cdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLmVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRcdFx0Z2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQ29udHJvbClcblx0XHRcdCk7XG5cdFx0XHRzVGV4dCA9IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQ29udHJvbCwgcHJvcGVydGllcy50aXRsZSk7XG5cdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0fVxuXHR9XG5cblx0X29uU2VhcmNoKG9FdmVudDogQ29yZUV2ZW50PHsgY29uZGl0aW9uczogdW5rbm93biB9Pik6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY3VzdG9tIHRhYlxuXHRcdFx0dGhpcy5fcmVmcmVzaEN1c3RvbVZpZXcob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNcIiksIFwic2VhcmNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkZpbHRlckNoYW5nZWQob0V2ZW50OiBDb3JlRXZlbnQ8eyBjb25kaXRpb25zQmFzZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZU1vZGVDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1Q0tBLGFBQWEsMEJBQWJBLGFBQWE7SUFBYkEsYUFBYTtJQUFiQSxhQUFhO0lBQUEsT0FBYkEsYUFBYTtFQUFBLEVBQWJBLGFBQWE7RUFBQSxJQU1aQyxtQkFBbUIsSUFBQUMsSUFBQSxHQUR4QkMsY0FBYyxDQUFDLDBEQUEwRCxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVFLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2xESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUUsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHbERMLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFRSxZQUFZLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUdsREMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSxrQkFBa0I7SUFBRU8sUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHM0VDLFdBQVcsQ0FBQztJQUFFVixJQUFJLEVBQUUscUJBQXFCO0lBQUVPLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVERCxXQUFXLENBQUM7SUFBRVYsSUFBSSxFQUFFLGtDQUFrQztJQUFFTyxRQUFRLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUcxRUMsS0FBSyxDQUFD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
519
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCaW5kaW5nQWN0aW9uIiwiTXVsdGlwbGVNb2RlQ29udHJvbCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzMiLCJkZWZhdWx0VmFsdWUiLCJfZGVjNCIsIl9kZWM1IiwiX2RlYzYiLCJhZ2dyZWdhdGlvbiIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzciLCJhc3NvY2lhdGlvbiIsIl9kZWM4IiwiX2RlYzkiLCJldmVudCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsImlkIiwic2V0dGluZ3MiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiY29udGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbkFmdGVyUmVuZGVyaW5nIiwib25BZnRlckljb25UYWJCYXJSZW5kZXJpbmciLCJiaW5kIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJnZXRTZWxlY3RlZElubmVyQ29udHJvbCIsInJlc3VtZUJpbmRpbmciLCJnZXRQcm9wZXJ0eSIsInNob3dDb3VudHMiLCJzZXRWaXNpYmxlT3ZlcnJpZGRlbiIsInNldFByb3BlcnR5IiwiZ2V0QWxsSW5uZXJDb250cm9scyIsImZvckVhY2giLCJtYWNyb0FQSSIsImljb25UYWJGaWx0ZXIiLCJfZ2V0VGFiRnJvbUlubmVyQ29udHJvbCIsIm9yaWdpblNldFZpc2libGUiLCJzZXRWaXNpYmxlIiwidmFsdWUiLCJnZXRWaXNpYmxlIiwicmVmcmVzaFRhYkNvdW50Iiwib25CZWZvcmVSZW5kZXJpbmciLCJnZXRUYWJzTW9kZWwiLCJvRmlsdGVyQ29udHJvbCIsIl9nZXRGaWx0ZXJDb250cm9sIiwic2V0Q291bnRzT3V0RGF0ZWQiLCJvRmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50Iiwib01hY3JvQVBJIiwiYXR0YWNoRXZlbnQiLCJpbnRlcm5hbFJlZnJlc2hUYWJzQ291bnQiLCJzdXNwZW5kQmluZGluZyIsIl9vblNlYXJjaCIsIl9vbkZpbHRlckNoYW5nZWQiLCJyZW5kZXIiLCJvUm0iLCJvQ29udHJvbCIsInJlbmRlckNvbnRyb2wiLCJzVGFic01vZGVsIiwib0NvbnRlbnQiLCJ1bmRlZmluZWQiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIkpTT05Nb2RlbCIsInNldE1vZGVsIiwib1NlbGVjdGVkVGFiIiwiZ2V0SXRlbXMiLCJmaW5kIiwib0l0ZW0iLCJnZXRLZXkiLCJnZXRTZWxlY3RlZEtleSIsImhhbmRsZVRhYkNoYW5nZSIsIm9FdmVudCIsIm9JY29uVGFiQmFyIiwiZ2V0U291cmNlIiwib011bHRpQ29udHJvbCIsIm1QYXJhbWV0ZXJzIiwiZ2V0UGFyYW1ldGVycyIsIl9zZXRJbm5lckJpbmRpbmciLCJzUHJldmlvdXNTZWxlY3RlZEtleSIsInByZXZpb3VzS2V5Iiwic1NlbGVjdGVkS2V5Iiwic2VsZWN0ZWRLZXkiLCJwZXJzb25hbGl6YXRpb25Qcm9taXNlIiwib0ZpbHRlckJhciIsIl9yZWZyZXNoQ3VzdG9tVmlldyIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUiLCJfZ2V0Vmlld0NvbnRyb2xsZXIiLCJnZXRFeHRlbnNpb25BUEkiLCJ1cGRhdGVBcHBTdGF0ZSIsImZpcmVFdmVudCIsImljb25UYWJCYXIiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiZGVmYXVsdCIsImFkZCIsImNoYW5nZXMiLCJjaGFuZ2VTcGVjaWZpY0RhdGEiLCJjaGFuZ2VUeXBlIiwicHJldmlvdXNTZWxlY3RlZEtleSIsInNlbGVjdG9yRWxlbWVudCIsImVycm9yIiwiTG9nIiwicmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCIsImludmFsaWRhdGVDb250ZW50Iiwia2V5cyIsImtleSIsImJWYWx1ZSIsInNldEZyZWV6ZUNvbnRlbnQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwidGFic01vZGVsIiwicmVzdWx0cyIsInZpZXciLCJDb21tb25VdGlscyIsImdldFRhcmdldFZpZXciLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwidXNlSGlkZGVuRmlsdGVyQmFyIiwib1RhYiIsInNUYWJJZCIsIm1JZ25vcmVkRmllbGRzIiwicmVmcmVzaE5vdEFwcGxpY2FibGVGaWVsZHMiLCJub3RBcHBsaWNhYmxlIiwiZmllbGRzIiwidGl0bGUiLCJfc2V0VGFiTWVzc2FnZVN0cmlwIiwiZW50aXR5VHlwZVBhdGgiLCJkYXRhIiwiaWdub3JlZEZpZWxkcyIsImdldFRleHQiLCJpc0EiLCJjaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQiLCJzZXREYXRhIiwicmVzb3VyY2VNb2RlbCIsImdldFJlc291cmNlTW9kZWwiLCJvQ2hhcnQiLCJnZXRDb250ZW50IiwiYkVudGl0eVNldEZpbGVyYWJsZSIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJ0YXJnZXRPYmplY3QiLCJhbm5vdGF0aW9ucyIsIkNhcGFiaWxpdGllcyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIkZpbHRlcmFibGUiLCJpbmNsdWRlcyIsImJPbmx5Rm9yVmlzaWJsZVRhYiIsImlubmVyQ29udHJvbHMiLCJyZWR1Y2UiLCJhSW5uZXJDb250cm9scyIsInNJbm5lckNvbnRyb2wiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwiZmlsdGVyIiwib0lubmVyQ29udHJvbCIsImZpbHRlckNvbnRyb2wiLCJvVmlldyIsImdldENvbnRyb2xsZXIiLCJvRmlsdGVyQ29uZGl0aW9ucyIsInNSZWZyZXNoQ2F1c2UiLCJvblZpZXdOZWVkc1JlZnJlc2giLCJmaWx0ZXJDb25kaXRpb25zIiwiY3VycmVudFRhYklkIiwicmVmcmVzaENhdXNlIiwiZ2V0Q291bnRzIiwic2V0Q291bnQiLCJlZGl0RmxvdyIsInN5bmNUYXNrIiwidGhlbiIsImNvdW50IiwiY2F0Y2giLCJ0YWJsZUV2ZW50IiwiZXZlbnRNYWNyb0FQSSIsInRhcmdldEtleSIsInRhYktleXMiLCJtYXAiLCJ0YWIiLCJzcGxpdCIsInJlZnJlc2hUYWJzQ291bnQiLCJvSWNvblRhYkZpbHRlciIsImNvdW50c091dERhdGVkIiwic2V0VGFiQ29udGVudFRvQmVSZWZyZXNoZWRPbk5leHRPcGVuaW5nIiwic2VsZWN0ZWRUYWJLZXkiLCJyZWZyZXNoU2VsZWN0ZWRUYWJDb250ZW50IiwiYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkIiwiYklzU2VsZWN0ZWRLZXkiLCJzQWN0aW9uIiwiUmVzdW1lIiwiU3VzcGVuZCIsInByb3BlcnRpZXMiLCJzVGV4dCIsImFJZ25vcmVkRmllbGRzIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiYUlnbm9yZWRMYWJlbHMiLCJNZXNzYWdlU3RyaXAiLCJnZXRMYWJlbHMiLCJnZXRQYXJhbWV0ZXIiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNdWx0aXBsZU1vZGVDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hY3JvQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL01hY3JvQVBJXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCB0eXBlIHsgSWNvblRhYkJhciRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9JY29uVGFiQmFyXCI7XG5pbXBvcnQgdHlwZSBJY29uVGFiRmlsdGVyIGZyb20gXCJzYXAvbS9JY29uVGFiRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBDb3JlRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIElubmVyQ29udHJvbFR5cGUgPSBNYWNyb0FQSSAmXG5cdFBhcnRpYWw8e1xuXHRcdHJlc3VtZUJpbmRpbmc6IEZ1bmN0aW9uO1xuXHRcdHN1c3BlbmRCaW5kaW5nOiBGdW5jdGlvbjtcblx0XHRnZXRDb3VudHM6IEZ1bmN0aW9uO1xuXHRcdHJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzOiBGdW5jdGlvbjtcblx0XHRpbnZhbGlkYXRlQ29udGVudDogRnVuY3Rpb247XG5cdFx0Z2V0Q29udGVudDogRnVuY3Rpb247XG5cdH0+O1xuXG50eXBlIE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMgPSB7XG5cdGVudGl0eVR5cGVQYXRoOiBzdHJpbmc7XG5cdGlnbm9yZWRGaWVsZHM6IHN0cmluZ1tdO1xuXHR0aXRsZTogc3RyaW5nO1xufTtcblxuZW51bSBCaW5kaW5nQWN0aW9uIHtcblx0U3VzcGVuZCA9IFwic3VzcGVuZEJpbmRpbmdcIixcblx0UmVzdW1lID0gXCJyZXN1bWVCaW5kaW5nXCJcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0LmNvbnRyb2xzLk11bHRpcGxlTW9kZUNvbnRyb2xcIilcbmNsYXNzIE11bHRpcGxlTW9kZUNvbnRyb2wgZXh0ZW5kcyBDb250cm9sIHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0c2hvd0NvdW50cyE6IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJib29sZWFuXCIsIGRlZmF1bHRWYWx1ZTogZmFsc2UgfSlcblx0c2V0VmlzaWJsZU92ZXJyaWRkZW4hOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGZyZWV6ZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhblwiLCBkZWZhdWx0VmFsdWU6IGZhbHNlIH0pXG5cdGNvdW50c091dERhdGVkITogYm9vbGVhbjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLkljb25UYWJCYXJcIiwgbXVsdGlwbGU6IGZhbHNlLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Y29udGVudCE6IEljb25UYWJCYXI7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIsIG11bHRpcGxlOiB0cnVlIH0pXG5cdGlubmVyQ29udHJvbHMhOiBzdHJpbmdbXTtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuRmlsdGVyQmFyXCIsIG11bHRpcGxlOiBmYWxzZSB9KVxuXHRmaWx0ZXJDb250cm9sITogc3RyaW5nO1xuXG5cdEBldmVudCgpXG5cdHNlbGVjdCE6IEZ1bmN0aW9uO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdGlkPzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgKFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPiAmICRDb250cm9sU2V0dGluZ3MpLFxuXHRcdHNldHRpbmdzPzogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxNdWx0aXBsZU1vZGVDb250cm9sPlxuXHQpIHtcblx0XHRzdXBlcihpZCBhcyBzdHJpbmcsIHNldHRpbmdzKTtcblx0XHR0aGlzLmNvbnRlbnQ/LmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogdGhpcy5vbkFmdGVySWNvblRhYkJhclJlbmRlcmluZy5iaW5kKHRoaXMpXG5cdFx0fSk7XG5cdH1cblxuXHRvbkFmdGVySWNvblRhYkJhclJlbmRlcmluZygpOiB2b2lkIHtcblx0XHR0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCk/LnJlc3VtZUJpbmRpbmc/LighdGhpcy5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpO1xuXHRcdGlmICh0aGlzLnNob3dDb3VudHMgJiYgIXRoaXMuc2V0VmlzaWJsZU92ZXJyaWRkZW4pIHtcblx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzZXRWaXNpYmxlT3ZlcnJpZGRlblwiLCB0cnVlKTtcblx0XHRcdHRoaXMuZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJOiBNYWNyb0FQSSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBpY29uVGFiRmlsdGVyID0gdGhpcy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdC8vIE5vIGNvdW50IHRvIHNob3dcblx0XHRcdFx0aWYgKCFpY29uVGFiRmlsdGVyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb3JpZ2luU2V0VmlzaWJsZSA9IGljb25UYWJGaWx0ZXIuc2V0VmlzaWJsZTtcblx0XHRcdFx0aWNvblRhYkZpbHRlci5zZXRWaXNpYmxlID0gKHZhbHVlOiBib29sZWFuKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0aWYgKGljb25UYWJGaWx0ZXIuZ2V0VmlzaWJsZSgpID09PSBmYWxzZSAmJiB2YWx1ZSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoVGFiQ291bnQobWFjcm9BUEkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luU2V0VmlzaWJsZS5iaW5kKGljb25UYWJGaWx0ZXIpKHZhbHVlKTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0VGFic01vZGVsKCk7IC8vIEdlbmVyYXRlIHRoZSBtb2RlbCB3aGljaCBpcyBtYW5kYXRvcnkgZm9yIHNvbWUgYmluZGluZ3NcblxuXHRcdGNvbnN0IG9GaWx0ZXJDb250cm9sID0gdGhpcy5fZ2V0RmlsdGVyQ29udHJvbCgpO1xuXHRcdGlmICghb0ZpbHRlckNvbnRyb2wpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlcmUncyBubyBmaWx0ZXJiYXIsIHdlIGhhdmUgdG8gdXBkYXRlIHRoZSBjb3VudHMgaW4gdGhlIHRhYnMgaW1tZWRpYXRlbHlcblx0XHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXJBUEkgPSBvRmlsdGVyQ29udHJvbD8uZ2V0UGFyZW50KCk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5zaG93Q291bnRzKSB7XG5cdFx0XHRcdG9NYWNyb0FQSS5hdHRhY2hFdmVudChcImludGVybmFsRGF0YVJlcXVlc3RlZFwiLCB0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudC5iaW5kKHRoaXMpKTtcblx0XHRcdH1cblx0XHRcdG9NYWNyb0FQSS5zdXNwZW5kQmluZGluZz8uKCk7XG5cdFx0fSk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJBUEkpIHtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbFNlYXJjaFwiLCB0aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpKTtcblx0XHRcdG9GaWx0ZXJCYXJBUEkuYXR0YWNoRXZlbnQoXCJpbnRlcm5hbEZpbHRlckNoYW5nZWRcIiwgdGhpcy5fb25GaWx0ZXJDaGFuZ2VkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIob1JtOiBSZW5kZXJNYW5hZ2VyLCBvQ29udHJvbDogTXVsdGlwbGVNb2RlQ29udHJvbCk6IHZvaWQge1xuXHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmNvbnRlbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG1vZGVsIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgSWNvblRhYkZpbHRlcnMuXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0Z2V0VGFic01vZGVsKCk6IEpTT05Nb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhYnNNb2RlbCA9IFwidGFic0ludGVybmFsXCI7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG5cdFx0aWYgKCFvQ29udGVudCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0bGV0IG9Nb2RlbCA9IG9Db250ZW50LmdldE1vZGVsKHNUYWJzTW9kZWwpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIW9Nb2RlbCkge1xuXHRcdFx0b01vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0XHRvQ29udGVudC5zZXRNb2RlbChvTW9kZWwsIHNUYWJzTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGlubmVyIGNvbnRyb2wgb2YgdGhlIGRpc3BsYXllZCB0YWIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sXG5cdCAqL1xuXHRnZXRTZWxlY3RlZElubmVyQ29udHJvbCgpOiBJbm5lckNvbnRyb2xUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvU2VsZWN0ZWRUYWIgPSB0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkuZmluZCgob0l0ZW0pID0+IChvSXRlbSBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKSA9PT0gdGhpcy5jb250ZW50LmdldFNlbGVjdGVkS2V5KCkpO1xuXHRcdHJldHVybiBvU2VsZWN0ZWRUYWJcblx0XHRcdD8gdGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZmluZCgob01hY3JvQVBJKSA9PiB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSkgPT09IG9TZWxlY3RlZFRhYilcblx0XHRcdDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIGJpbmRpbmcgb2YgYWxsIGlubmVyIGNvbnRyb2xzIHdoZW4gdGhlIHNlbGVjdGVkIEljb25UYWJGaWx0ZXIgaXMgY2hhbmdlZC5cblx0ICogQHBhcmFtIG9FdmVudCBFdmVudCBmaXJlZCBieSB0aGUgSWNvblRhYkJhclxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaWYgdGhlIHBlcnNvbmFsaXphdGlvbiBpcyB1cGRhdGVkLCBvdGhlcndpc2Ugbm90aGluZ1xuXHQgKi9cblx0c3RhdGljIGhhbmRsZVRhYkNoYW5nZShvRXZlbnQ6IEljb25UYWJCYXIkU2VsZWN0RXZlbnQpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0Y29uc3Qgb0ljb25UYWJCYXIgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3Qgb011bHRpQ29udHJvbCA9IG9JY29uVGFiQmFyLmdldFBhcmVudCgpIGFzIE11bHRpcGxlTW9kZUNvbnRyb2w7XG5cblx0XHRjb25zdCBtUGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0b011bHRpQ29udHJvbC5fc2V0SW5uZXJCaW5kaW5nKHRydWUpO1xuXHRcdGNvbnN0IHNQcmV2aW91c1NlbGVjdGVkS2V5ID0gbVBhcmFtZXRlcnM/LnByZXZpb3VzS2V5O1xuXHRcdGNvbnN0IHNTZWxlY3RlZEtleSA9IG1QYXJhbWV0ZXJzPy5zZWxlY3RlZEtleTtcblx0XHRsZXQgcGVyc29uYWxpemF0aW9uUHJvbWlzZTtcblx0XHRpZiAoc1NlbGVjdGVkS2V5ICYmIHNQcmV2aW91c1NlbGVjdGVkS2V5ICE9PSBzU2VsZWN0ZWRLZXkpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvTXVsdGlDb250cm9sLl9nZXRGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiAhb011bHRpQ29udHJvbC5nZXRQcm9wZXJ0eShcImZyZWV6ZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKCFvTXVsdGlDb250cm9sLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdFx0XHQvL2N1c3RvbSB0YWJcblx0XHRcdFx0XHRvTXVsdGlDb250cm9sLl9yZWZyZXNoQ3VzdG9tVmlldyhvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKSwgXCJ0YWJDaGFuZ2VkXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwZXJzb25hbGl6YXRpb25Qcm9taXNlID0gTXVsdGlwbGVNb2RlQ29udHJvbC5oYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoc1NlbGVjdGVkS2V5LCBzUHJldmlvdXNTZWxlY3RlZEtleSwgb0ljb25UYWJCYXIpO1xuXHRcdH1cblxuXHRcdG9NdWx0aUNvbnRyb2wuX2dldFZpZXdDb250cm9sbGVyKCk/LmdldEV4dGVuc2lvbkFQSSgpPy51cGRhdGVBcHBTdGF0ZSgpO1xuXG5cdFx0b011bHRpQ29udHJvbC5maXJlRXZlbnQoXCJzZWxlY3RcIiwge1xuXHRcdFx0aWNvblRhYkJhcjogb0ljb25UYWJCYXIsXG5cdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0cHJldmlvdXNLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblByb21pc2U7XG5cdH1cblxuXHRwcml2YXRlIHN0YXRpYyBhc3luYyBoYW5kbGVQZXJzb25hbGl6YXRpb25VcGRhdGUoXG5cdFx0c1NlbGVjdGVkS2V5OiBzdHJpbmcsXG5cdFx0c1ByZXZpb3VzU2VsZWN0ZWRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvSWNvblRhYkJhcjogSWNvblRhYkJhclxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCIpKS5kZWZhdWx0O1xuXHRcdFx0Q29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJLmFkZCh7XG5cdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjaGFuZ2VTcGVjaWZpY0RhdGE6IHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleTogc1NlbGVjdGVkS2V5LFxuXHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9JY29uVGFiQmFyXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hpbGUgdXBkYXRpbmcgdGhlIHBlcnNvbmFsaXphdGlvbiBzdGF0ZSBvZiB0aGUgTXVsdGlwbGVNb2RlQ29udHJvbFwiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIGlubmVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRyZWZyZXNoU2VsZWN0ZWRJbm5lckNvbnRyb2xDb250ZW50KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmdldFNlbGVjdGVkSW5uZXJDb250cm9sKCkpIHtcblx0XHRcdHRoaXMuZ2V0U2VsZWN0ZWRJbm5lckNvbnRyb2woKT8uaW52YWxpZGF0ZUNvbnRlbnQ/LigpO1xuXHRcdFx0dGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpPy5yZXN1bWVCaW5kaW5nPy4odHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGN1c3RvbSB0YWJcblx0XHRcdHRoaXMuX3JlZnJlc2hDdXN0b21WaWV3KHVuZGVmaW5lZCwgXCJmb3JjZWRSZWZyZXNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnZhbGlkYXRlcyB0aGUgY29udGVudCBvZiB0aGUgaW5uZXIgY29udHJvbHMuXG5cdCAqIEBwYXJhbSBba2V5c10gVGhlIGxpc3Qgb2YgdGhlIGtleXMgaWRlbnRpZnlpbmcgdGhlIHZpZXdzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IGZvciB3aGljaCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSBpbnZhbGlkYXRlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgaW52YWxpZGF0ZWRcblx0ICovXG5cdGludmFsaWRhdGVDb250ZW50KGtleXM/OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgobWFjcm9BUEkpID0+IHtcblx0XHRcdGlmIChrZXlzKSB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGljb25UYWJGaWx0ZXIgJiZcblx0XHRcdFx0XHRcdChpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OnRhYmxlOjoke2tleX06OkxpbmVJdGVtYCB8fCBpY29uVGFiRmlsdGVyLmdldEtleSgpID09PSBgZmU6OkN1c3RvbVRhYjo6JHtrZXl9YClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hY3JvQVBJLmludmFsaWRhdGVDb250ZW50Py4oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBjb3VudHMgdG8gXCJvdXQgb2YgZGF0ZVwiIG9yIFwidXAgdG8gZGF0ZVwiXG5cdCAqIElmIHRoZSBjb3VudHMgYXJlIHNldCB0byBcIm91dCBvZiBkYXRlXCIgYW5kIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGRvZXNuJ3QgY29udGFpbiBhbiBpbm5lciBjb250cm9sLCBhbGwgaW5uZXIgY29udHJvbHMgYXJlIHJlcXVlc3RlZCB0byBnZXQgdGhlIG5ldyBjb3VudHMuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRWl0aGVyIGZyZWV6ZXMgdGhlIGNvbnRyb2wgb3Igbm90XG5cdCAqL1xuXHRzZXRDb3VudHNPdXREYXRlZChiVmFsdWUgPSB0cnVlKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImNvdW50c091dERhdGVkXCIsIGJWYWx1ZSk7XG5cdFx0Ly8gaWYgdGhlIGN1cnJlbnQgdGFiIGlzIG5vdCBjb25maWd1cmVkIHdpdGggbm8gaW5uZXIgQ29udHJvbFxuXHRcdC8vIHRoZSB0YWIgY291bnRzIG11c3QgYmUgbWFudWFsbHkgcmVmcmVzaGVkIHNpbmNlIG5vIE1hY3JvIEFQSSB3aWxsIHNlbnQgZXZlbnQgaW50ZXJuYWxEYXRhUmVxdWVzdGVkXG5cdFx0aWYgKGJWYWx1ZSAmJiAhdGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLmludGVybmFsUmVmcmVzaFRhYnNDb3VudCgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGcmVlemVzIHRoZSBjb250ZW50IDpcblx0ICogLSBjb250ZW50IGlzIGZyb3plbjogdGhlIGJpbmRpbmcgb2YgdGhlIGlubmVyIGNvbnRyb2xzIGFyZSBzdXNwZW5kZWQuXG5cdCAqIC0gY29udGVudCBpcyB1bmZyb3plbjogdGhlIGJpbmRpbmcgb2YgaW5uZXIgY29udHJvbCByZWxhdGVkIHRvIHRoZSBzZWxlY3RlZCBJY29uVGFiRmlsdGVyIGlzIHJlc3VtZWQuXG5cdCAqIEBwYXJhbSBiVmFsdWUgRnJlZXplIG9yIG5vdCB0aGUgY29udHJvbFxuXHQgKi9cblx0c2V0RnJlZXplQ29udGVudChiVmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiLCBiVmFsdWUpO1xuXHRcdHRoaXMuX3NldElubmVyQmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIG1vZGVsIHdpdGggdGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgb24gZWFjaCBJY29uVGFiRmlsdGVyIChjb250YWluaW5nIGlubmVyIGNvbnRyb2wpIGFjY29yZGluZyB0byB0aGUgZW50aXR5VHlwZSBvZiB0aGUgZmlsdGVyIGNvbnRyb2wuXG5cdCAqXG5cdCAqL1xuXHRfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzKCk6IHZvaWQge1xuXHRcdGNvbnN0IHRhYnNNb2RlbCA9IHRoaXMuZ2V0VGFic01vZGVsKCk7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAodGFic01vZGVsICYmIG9GaWx0ZXJDb250cm9sKSB7XG5cdFx0XHRjb25zdCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+ID0ge307XG5cdFx0XHRjb25zdCB2aWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdFx0aWYgKCF2aWV3RGF0YS51c2VIaWRkZW5GaWx0ZXJCYXIpIHtcblx0XHRcdFx0dGhpcy5nZXRBbGxJbm5lckNvbnRyb2xzKCkuZm9yRWFjaCgob01hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhYiA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdFx0XHRpZiAob1RhYikge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc1RhYklkID0gb1RhYi5nZXRLZXkoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG1JZ25vcmVkRmllbGRzID0gb01hY3JvQVBJLnJlZnJlc2hOb3RBcHBsaWNhYmxlRmllbGRzPy4ob0ZpbHRlckNvbnRyb2wpIHx8IFtdO1xuXHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0ge1xuXHRcdFx0XHRcdFx0XHRub3RBcHBsaWNhYmxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0ZmllbGRzOiBtSWdub3JlZEZpZWxkcyxcblx0XHRcdFx0XHRcdFx0XHR0aXRsZTogdGhpcy5fc2V0VGFiTWVzc2FnZVN0cmlwKHtcblx0XHRcdFx0XHRcdFx0XHRcdGVudGl0eVR5cGVQYXRoOiBvRmlsdGVyQ29udHJvbC5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdGlnbm9yZWRGaWVsZHM6IG1JZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IG9UYWIuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGlmIChvTWFjcm9BUEkgJiYgb01hY3JvQVBJLmlzQShcInNhcC5mZS5tYWNyb3MuQ2hhcnRcIikpIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0c1tzVGFiSWRdID0gdGhpcy5jaGVja05vbkZpbHRlcmFibGVFbnRpdHlTZXQob01hY3JvQVBJLCBzVGFiSWQsIHJlc3VsdHMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRhYnNNb2RlbC5zZXREYXRhKHJlc3VsdHMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNb2RpZmllcyB0aGUgbWVzc2FnZXN0cmlwIG1lc3NhZ2UgYmFzZWQgb24gZW50aXR5IHNldCBpcyBmaWxlcmFibGUgb3Igbm90LlxuXHQgKiBAcGFyYW0gb01hY3JvQVBJIE1hY3JvIGNoYXJ0IGFwaVxuXHQgKiBAcGFyYW0gc1RhYklkIFRhYiBrZXkgSURcblx0ICogQHBhcmFtIHJlc3VsdHMgU2hvdWxkIGNvbnRhaW4gZmllbGRzIGFuZCB0aXRsZVxuXHQgKiBAcmV0dXJucyBBbiBvYmplY3Qgb2YgbW9kaWZpZWQgZmllbGRzIGFuZCB0aXRsZVxuXHQgKi9cblx0Y2hlY2tOb25GaWx0ZXJhYmxlRW50aXR5U2V0KFxuXHRcdG9NYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSxcblx0XHRzVGFiSWQ6IHN0cmluZyxcblx0XHRyZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB7IG5vdEFwcGxpY2FibGU6IHsgZmllbGRzOiBzdHJpbmdbXTsgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IH0+XG5cdCk6IHsgbm90QXBwbGljYWJsZTogeyBmaWVsZHM6IHN0cmluZ1tdOyB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfSB7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob01hY3JvQVBJKTtcblx0XHRjb25zdCBvQ2hhcnQgPSBvTWFjcm9BUEk/LmdldENvbnRlbnQgPyBvTWFjcm9BUEkuZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGJFbnRpdHlTZXRGaWxlcmFibGUgPVxuXHRcdFx0b0NoYXJ0ICYmXG5cdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEVudGl0eVNldD4oXG5cdFx0XHRcdChvQ2hhcnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKS5nZXRDb250ZXh0KGAke29DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIil9YClcblx0XHRcdCk/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uRmlsdGVyUmVzdHJpY3Rpb25zPy5GaWx0ZXJhYmxlO1xuXHRcdGlmIChiRW50aXR5U2V0RmlsZXJhYmxlICE9PSB1bmRlZmluZWQgJiYgIWJFbnRpdHlTZXRGaWxlcmFibGUpIHtcblx0XHRcdGlmIChyZXN1bHRzW3NUYWJJZF0ubm90QXBwbGljYWJsZS5maWVsZHMuaW5jbHVkZXMoXCIkc2VhcmNoXCIpKSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlICs9IFwiIFwiICsgcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLmZpZWxkcyA9IFtcIm5vbkZpbHRlcmFibGVcIl07XG5cdFx0XHRcdHJlc3VsdHNbc1RhYklkXS5ub3RBcHBsaWNhYmxlLnRpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19MUl9NVUxUSVZJWl9DSEFSVF9NVUxUSV9OT05fRklMVEVSQUJMRVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdHNbc1RhYklkXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbm5lciBjb250cm9scy5cblx0ICogQHBhcmFtIGJPbmx5Rm9yVmlzaWJsZVRhYiBTaG91bGQgZGlzcGxheSBvbmx5IHRoZSB2aXNpYmxlIGNvbnRyb2xzXG5cdCAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGNvbnRyb2xzXG5cdCAqL1xuXHRnZXRBbGxJbm5lckNvbnRyb2xzKGJPbmx5Rm9yVmlzaWJsZVRhYiA9IGZhbHNlKTogSW5uZXJDb250cm9sVHlwZVtdIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xzLnJlZHVjZSgoYUlubmVyQ29udHJvbHM6IElubmVyQ29udHJvbFR5cGVbXSwgc0lubmVyQ29udHJvbDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9Db250cm9sID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZChzSW5uZXJDb250cm9sKSBhcyBJbm5lckNvbnRyb2xUeXBlO1xuXHRcdFx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdFx0XHRhSW5uZXJDb250cm9scy5wdXNoKG9Db250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYUlubmVyQ29udHJvbHMuZmlsdGVyKFxuXHRcdFx0XHRcdChvSW5uZXJDb250cm9sKSA9PiAhYk9ubHlGb3JWaXNpYmxlVGFiIHx8IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob0lubmVyQ29udHJvbCk/LmdldFZpc2libGUoKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSwgW10pIHx8IFtdXG5cdFx0KTtcblx0fVxuXG5cdF9nZXRGaWx0ZXJDb250cm9sKCk6IEZpbHRlckJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJDb250cm9sKSBhcyBGaWx0ZXJCYXIgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0VGFiRnJvbUlubmVyQ29udHJvbChvQ29udHJvbDogQ29udHJvbCk6IEljb25UYWJGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRcdGxldCBvVGFiOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkID0gb0NvbnRyb2w7XG5cdFx0aWYgKG9UYWIgJiYgIW9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSAmJiAob1RhYiBhcyB7IGdldFBhcmVudD86IEZ1bmN0aW9uIH0pLmdldFBhcmVudCkge1xuXHRcdFx0b1RhYiA9IG9Db250cm9sLmdldFBhcmVudCgpIGFzIFVJNUVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBvVGFiICYmIG9UYWIuaXNBPEljb25UYWJGaWx0ZXI+KFwic2FwLm0uSWNvblRhYkZpbHRlclwiKSA/IG9UYWIgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Vmlld0NvbnRyb2xsZXIoKTogUGFnZUNvbnRyb2xsZXIge1xuXHRcdGNvbnN0IG9WaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyh0aGlzKTtcblx0XHRyZXR1cm4gb1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0X3JlZnJlc2hDdXN0b21WaWV3KG9GaWx0ZXJDb25kaXRpb25zOiB1bmtub3duLCBzUmVmcmVzaENhdXNlOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQodGhpcy5fZ2V0Vmlld0NvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcik/Lm9uVmlld05lZWRzUmVmcmVzaD8uKHtcblx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0Y3VycmVudFRhYklkOiB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdHJlZnJlc2hDYXVzZTogc1JlZnJlc2hDYXVzZVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgY291bnQgb2YgdGhlIFRhYiBjb250YWluaW5nIHRoZSBtYWNybyBwYXNzZWQgYXMgcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWFjcm9BUEkgVGhlIGNvbnRlbnQgb2YgdGhlIHRhYiB3ZSB3YW50IHRvIHJlZnJlc2hcblx0ICovXG5cdGFzeW5jIHJlZnJlc2hUYWJDb3VudChtYWNyb0FQSTogSW5uZXJDb250cm9sVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG1hY3JvQVBJKTtcblx0XHRpZiAoIWljb25UYWJGaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKG1hY3JvQVBJPy5nZXRDb3VudHMpIHtcblx0XHRcdGljb25UYWJGaWx0ZXIuc2V0Q291bnQoXCIuLi5cIik7XG5cdFx0XHRhd2FpdCB0aGlzLl9nZXRWaWV3Q29udHJvbGxlcigpLmVkaXRGbG93LnN5bmNUYXNrKCk7IC8vIGVuc3VyZSBhbGwgcGVuZGluZyBjaGFuZ2VzIGFyZSBkb25lIGJlZm9yZSByZWZyZXNoaW5nIGNvdW50c1xuXHRcdFx0bWFjcm9BUElcblx0XHRcdFx0LmdldENvdW50cygpXG5cdFx0XHRcdC50aGVuKChjb3VudDogc3RyaW5nKTogSWNvblRhYkZpbHRlciA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGljb25UYWJGaWx0ZXIuc2V0Q291bnQoY291bnQgfHwgXCIwXCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBFcnJvciB3aGlsZSByZXF1ZXN0aW5nIENvdW50cyBmb3IgQ29udHJvbDogJHtlcnJvcn1gKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aW50ZXJuYWxSZWZyZXNoVGFic0NvdW50KHRhYmxlRXZlbnQ/OiBDb3JlRXZlbnQpOiB2b2lkIHtcblx0XHQvLyBJZiB0aGUgcmVmcmVzaCBpcyB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgKGludGVybmFsRGF0YVJlcXVlc3RlZClcblx0XHQvLyB3ZSBjYW5ub3QgdXNlIHRoZSBzZWxlY3RlZCBrZXkgYXMgcmVmZXJlbmNlIHNpbmNlIHRhYmxlIGNhbiBiZSByZWZyZXNoZWQgYnkgU2lkZUVmZmVjdHNcblx0XHQvLyBzbyB0aGUgdGFibGUgY291bGQgYmUgaW50byBhIGRpZmZlcmVudCB0YWIgLT4gd2UgdXNlIHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IHRvIGZpbmQgdGhlIHRhcmdldGVkIHRhYlxuXHRcdC8vIElmIG5vdCB0cmlnZ2VyZWQgYnkgYW4gZXZlbnQgLT4gcmVmcmVzaCBhdCBsZWFzdCB0aGUgY291bnRzIG9mIHRoZSBjdXJyZW50IE1hY3JvQVBJXG5cdFx0Y29uc3QgZXZlbnRNYWNyb0FQSSA9IHRhYmxlRXZlbnQ/LmdldFNvdXJjZSgpIGFzIE1hY3JvQVBJO1xuXHRcdGNvbnN0IHRhcmdldEtleSA9IGV2ZW50TWFjcm9BUEkgPyB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKGV2ZW50TWFjcm9BUEkpPy5nZXRLZXkoKSA6IHRoaXMuY29udGVudD8uZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRpZiAodHlwZW9mIHRhcmdldEtleSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0aWYgKHRhcmdldEtleSA9PT0gXCJcIikge1xuXHRcdFx0XHRjb25zdCB0YWJLZXlzID0gdGhpcy5jb250ZW50Py5nZXRJdGVtcygpLm1hcCgodGFiKSA9PiAodGFiIGFzIEljb25UYWJGaWx0ZXIpLmdldEtleSgpLnNwbGl0KFwiOjpcIilbMl0pID8/IFtdO1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQodGFiS2V5cyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2hUYWJzQ291bnQoW3RhcmdldEtleS5zcGxpdChcIjo6XCIpWzJdXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyB0aGUgY291bnQgb2YgdGhlIHZpZXdzIGluIHRoZSBNdWx0aU1vZGUgY29udHJvbC5cblx0ICogQHBhcmFtIFtrZXlzXSBUaGUgbGlzdCBvZiB0aGUga2V5cyBpZGVudGlmeWluZyB0aGUgdmlld3MgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHdoaWNoIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWQuIElmIG5vdCBwcm92aWRlZCwgYWxsIHRoZSB2aWV3cycgY291bnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHJlZnJlc2hUYWJzQ291bnQoa2V5cz86IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNob3dDb3VudHMpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFrZXlzKSB7XG5cdFx0XHR0aGlzLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdH1cblx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHModHJ1ZSkuZm9yRWFjaCgob01hY3JvQVBJKTogdm9pZCA9PiB7XG5cdFx0XHRjb25zdCBvSWNvblRhYkZpbHRlciA9IHRoaXMuX2dldFRhYkZyb21Jbm5lckNvbnRyb2wob01hY3JvQVBJKTtcblx0XHRcdGlmICh0aGlzLmNvdW50c091dERhdGVkIHx8IChrZXlzICYmIG9JY29uVGFiRmlsdGVyICYmIGtleXMuaW5jbHVkZXMob0ljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSkpKSB7XG5cdFx0XHRcdHRoaXMucmVmcmVzaFRhYkNvdW50KG9NYWNyb0FQSSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5zZXRDb3VudHNPdXREYXRlZChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVmcmVzaGVzIHRoZSBjb250ZW50IG9mIHRoZSB1bmRlcmx5aW5nIHZpZXdzIHVwb24gdGhlIG5leHQgb3BlbmluZy5cblx0ICogTm90ZTogVGhlIGNvbnRlbnQgb2YgdGhlIHNlbGVjdGVkIHZpZXcsIGlmIHBhcnQgb2YgdGhlIHByb3ZpZGVkIGtleXMsIHdpbGwgYmUgcmVmcmVzaGVkIGltbWVkaWF0ZWx5LlxuXHQgKiBAcGFyYW0gW2tleXNdIFRoZSBsaXN0IG9mIHRoZSBrZXlzIGlkZW50aWZ5aW5nIHRoZSB2aWV3cyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBmb3Igd2hpY2ggdGhlIHZpZXdzJyBjb250ZW50IHdpbGwgYmUgcmVmcmVzaGVkLiBJZiBub3QgcHJvdmlkZWQsIGFsbCB0aGUgdmlld3MnIGNvbnRlbnQgd2lsbCBiZSByZWZyZXNoZWRcblx0ICovXG5cdHNldFRhYkNvbnRlbnRUb0JlUmVmcmVzaGVkT25OZXh0T3BlbmluZyhrZXlzPzogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBzZWxlY3RlZFRhYktleSA9IHRoaXM/LmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRjb25zdCB0YWJLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IHJlZnJlc2hTZWxlY3RlZFRhYkNvbnRlbnQgPSBrZXlzID8ga2V5cy5pbmNsdWRlcyhzZWxlY3RlZFRhYktleT8uc3BsaXQoXCI6OlwiKVsyXSkgOiB0cnVlO1xuXHRcdGlmIChrZXlzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RlZFRhYktleSAhPT0gYGZlOjp0YWJsZTo6JHtrZXl9OjpMaW5lSXRlbWAgJiYgc2VsZWN0ZWRUYWJLZXkgIT09IGBmZTo6Q3VzdG9tVGFiOjoke2tleX1gKSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcz8uZ2V0QWxsSW5uZXJDb250cm9scygpLmZvckVhY2goKG1hY3JvQVBJKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGljb25UYWJGaWx0ZXIgPSB0aGlzPy5fZ2V0VGFiRnJvbUlubmVyQ29udHJvbChtYWNyb0FQSSk7XG5cdFx0XHRcdGlmIChpY29uVGFiRmlsdGVyICYmIGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkgIT09IHNlbGVjdGVkVGFiS2V5KSB7XG5cdFx0XHRcdFx0dGFiS2V5cy5wdXNoKGljb25UYWJGaWx0ZXIuZ2V0S2V5KCkuc3BsaXQoXCI6OlwiKVsyXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzPy5pbnZhbGlkYXRlQ29udGVudCh0YWJLZXlzKTtcblx0XHRpZiAocmVmcmVzaFNlbGVjdGVkVGFiQ29udGVudCkge1xuXHRcdFx0dGhpcz8ucmVmcmVzaFNlbGVjdGVkSW5uZXJDb250cm9sQ29udGVudCgpO1xuXHRcdH1cblx0fVxuXG5cdF9zZXRJbm5lckJpbmRpbmcoYlJlcXVlc3RJZk5vdEluaXRpYWxpemVkID0gZmFsc2UpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50KSB7XG5cdFx0XHR0aGlzLmdldEFsbElubmVyQ29udHJvbHMoKS5mb3JFYWNoKChvTWFjcm9BUEkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb0ljb25UYWJGaWx0ZXIgPSB0aGlzLl9nZXRUYWJGcm9tSW5uZXJDb250cm9sKG9NYWNyb0FQSSk7XG5cdFx0XHRcdGNvbnN0IGJJc1NlbGVjdGVkS2V5ID0gb0ljb25UYWJGaWx0ZXI/LmdldEtleSgpID09PSB0aGlzLmNvbnRlbnQuZ2V0U2VsZWN0ZWRLZXkoKTtcblx0XHRcdFx0Y29uc3Qgc0FjdGlvbiA9IGJJc1NlbGVjdGVkS2V5ICYmICF0aGlzLmdldFByb3BlcnR5KFwiZnJlZXplQ29udGVudFwiKSA/IEJpbmRpbmdBY3Rpb24uUmVzdW1lIDogQmluZGluZ0FjdGlvbi5TdXNwZW5kO1xuXHRcdFx0XHRvTWFjcm9BUElbc0FjdGlvbl0/LihzQWN0aW9uID09PSBCaW5kaW5nQWN0aW9uLlJlc3VtZSA/IGJSZXF1ZXN0SWZOb3RJbml0aWFsaXplZCAmJiBiSXNTZWxlY3RlZEtleSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfc2V0VGFiTWVzc2FnZVN0cmlwKHByb3BlcnRpZXM6IE1lc3NhZ2VTdHJpcFByb3BlcnRpZXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0Y29uc3QgYUlnbm9yZWRGaWVsZHMgPSBwcm9wZXJ0aWVzLmlnbm9yZWRGaWVsZHM7XG5cdFx0Y29uc3Qgb0ZpbHRlckNvbnRyb2wgPSB0aGlzLl9nZXRGaWx0ZXJDb250cm9sKCkgYXMgQ29udHJvbDtcblx0XHRpZiAob0ZpbHRlckNvbnRyb2wgJiYgQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkcykgJiYgYUlnbm9yZWRGaWVsZHMubGVuZ3RoID4gMCAmJiBwcm9wZXJ0aWVzLnRpdGxlKSB7XG5cdFx0XHRjb25zdCBhSWdub3JlZExhYmVscyA9IE1lc3NhZ2VTdHJpcC5nZXRMYWJlbHMoXG5cdFx0XHRcdGFJZ25vcmVkRmllbGRzLFxuXHRcdFx0XHRwcm9wZXJ0aWVzLmVudGl0eVR5cGVQYXRoLFxuXHRcdFx0XHRvRmlsdGVyQ29udHJvbCxcblx0XHRcdFx0Z2V0UmVzb3VyY2VNb2RlbChvRmlsdGVyQ29udHJvbClcblx0XHRcdCk7XG5cdFx0XHRzVGV4dCA9IE1lc3NhZ2VTdHJpcC5nZXRUZXh0KGFJZ25vcmVkTGFiZWxzLCBvRmlsdGVyQ29udHJvbCwgcHJvcGVydGllcy50aXRsZSk7XG5cdFx0XHRyZXR1cm4gc1RleHQ7XG5cdFx0fVxuXHR9XG5cblx0X29uU2VhcmNoKG9FdmVudDogQ29yZUV2ZW50PHsgY29uZGl0aW9uczogdW5rbm93biB9Pik6IHZvaWQge1xuXHRcdHRoaXMuc2V0Q291bnRzT3V0RGF0ZWQodHJ1ZSk7XG5cdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KGZhbHNlKTtcblx0XHRpZiAodGhpcy5nZXRTZWxlY3RlZElubmVyQ29udHJvbCgpKSB7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gY3VzdG9tIHRhYlxuXHRcdFx0dGhpcy5fcmVmcmVzaEN1c3RvbVZpZXcob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNcIiksIFwic2VhcmNoXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9vbkZpbHRlckNoYW5nZWQob0V2ZW50OiBDb3JlRXZlbnQ8eyBjb25kaXRpb25zQmFzZWQ6IGJvb2xlYW4gfT4pOiB2b2lkIHtcblx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0dGhpcy5zZXRGcmVlemVDb250ZW50KHRydWUpO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBNdWx0aXBsZU1vZGVDb250cm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1Q0tBLGFBQWEsMEJBQWJBLGFBQWE7SUFBYkEsYUFBYTtJQUFiQSxhQUFhO0lBQUEsT0FBYkEsYUFBYTtFQUFBLEVBQWJBLGFBQWE7RUFBQSxJQU1aQyxtQkFBbUIsSUFBQUMsSUFBQSxHQUR4QkMsY0FBYyxDQUFDLDBEQUEwRCxDQUFDLEVBQUFDLEtBQUEsR0FFekVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBVSxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3QkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxTQUFTO0lBQUVFLFlBQVksRUFBRTtFQUFNLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2xESixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFNBQVM7SUFBRUUsWUFBWSxFQUFFO0VBQU0sQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHbERMLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsU0FBUztJQUFFRSxZQUFZLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUcsS0FBQSxHQUdsREMsV0FBVyxDQUFDO0lBQUVOLElBQUksRUFBRSxrQkFBa0I7SUFBRU8sUUFBUSxFQUFFLEtBQUs7SUFBRUMsU0FBUyxFQUFFO0VBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHM0VDLFdBQVcsQ0FBQztJQUFFVixJQUFJLEVBQUUscUJBQXFCO0lBQUVPLFFBQVEsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVERCxXQUFXLENBQUM7SUFBRVYsSUFBSSxFQUFFLGtDQUFrQztJQUFFTyxRQUFRLEVBQUU7RUFBTSxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUcxRUMsS0FBSyxDQUFDLENBQUMsRUFBQWpC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
@@ -5,7 +5,7 @@
5
5
  "type": "component",
6
6
  "i18n": "../messagebundle.properties",
7
7
  "applicationVersion": {
8
- "version": "1.148.1"
8
+ "version": "1.149.0"
9
9
  },
10
10
  "title": "List Report",
11
11
  "tags": {
@@ -8,10 +8,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/navigation/SelectionVariant"], function (
8
8
  const IntentBasedNavigationOverride = {
9
9
  adaptNavigationContext: function (selectionVariant, targetInfo) {
10
10
  try {
11
- const view = this.base.getView(),
12
- controller = view.getController(),
11
+ const view = this.getView();
12
+ const model = view.getModel();
13
+ if (!model) {
14
+ Log.error("Navigation context adaptation skipped: no model bound to view");
15
+ return;
16
+ }
17
+ const controller = view.getController(),
13
18
  filterBar = controller._getFilterBarControl(),
14
- metaModel = view.getModel().getMetaModel();
19
+ metaModel = model.getMetaModel();
15
20
  let preparedSV, updatedValues;
16
21
  const keepNavigationProperties = controller._intentBasedNavigation.keepNavigationPropertiesForNavigation();
17
22
  // Adding filter bar values to the navigation does not make sense if no context has been selected.
@@ -23,7 +28,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/navigation/SelectionVariant"], function (
23
28
  let modifiedOData = {
24
29
  selectionVariant: {}
25
30
  };
26
- modifiedOData = this.base.getAppComponent().getNavigationService().checkIsPotentiallySensitive(oData);
31
+ modifiedOData = controller.getAppComponent().getNavigationService().checkIsPotentiallySensitive(oData);
27
32
  let filterBarSelectionVariant = new SelectionVariant(modifiedOData?.selectionVariant);
28
33
  const viewData = view.getViewData(),
29
34
  rootPath = viewData.fullContextPath;
@@ -208,9 +213,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/navigation/SelectionVariant"], function (
208
213
  };
209
214
  },
210
215
  getEntitySet: function () {
211
- return this.base.getCurrentEntitySet();
216
+ const controller = this.getView()?.getController();
217
+ return controller?.getCurrentEntitySet() ?? "";
212
218
  }
213
219
  };
214
220
  return IntentBasedNavigationOverride;
215
221
  }, false);
216
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50IiwidGFyZ2V0SW5mbyIsInZpZXciLCJiYXNlIiwiZ2V0VmlldyIsImNvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwiZmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJtZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsInByZXBhcmVkU1YiLCJ1cGRhdGVkVmFsdWVzIiwia2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24iLCJpc0VtcHR5Iiwib0RhdGEiLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwibW9kaWZpZWRPRGF0YSIsImdldEFwcENvbXBvbmVudCIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiY2hlY2tJc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwicm9vdFBhdGgiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZQcm9wZXJ0aWVzIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZSIsInJlbW92ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbVNWIiwicHJlcGFyZUZpbHRlcnNGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJoYW5kbGVNdWx0aU1vZGVDb250cm9sIiwidXBkYXRlTm9uQ29uZmxpY3RpbmdGaWx0ZXJQcm9wZXJ0aWVzIiwiZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJMb2ciLCJlcnJvciIsIm11bHRpcGxlTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInRhYnNNb2RlbCIsImdldFRhYnNNb2RlbCIsImFJZ25vcmVkRmllbGRzRm9yVGFiIiwiZ2V0UHJvcGVydHkiLCJjb250ZW50IiwiZ2V0U2VsZWN0ZWRLZXkiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmb3JFYWNoIiwic1Byb3BlcnR5IiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwicGF0aCIsImRpc3RpbmN0S2V5c09iamVjdCIsIm1haW5FbnRpdHlWYWx1ZVBhdGgiLCJjdXJyZW50VmFsdWVQYXRoIiwid2lubmVyVmFsdWVQYXRoIiwicGF0aEluQ29udGV4dCIsIl9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QiLCJMb29rVXBPYmplY3QiLCJsb29rVXBPYmplY3RNZXRhUGF0aCIsImtleSIsImtleUluQ29udGV4dCIsImluY2x1ZGVzIiwicGF0aFBhcnRzIiwic3BsaXQiLCJwdXNoIiwic2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsInNlbGVjdE9wdGlvbnNPYmplY3QiLCJwcm9wZXJ0eU5hbWUiLCJzZWxlY3RPcHRpb24iLCJnZXRTZWxlY3RPcHRpb24iLCJkaXN0aW5jdEtleSIsImNvbmZsaWN0aW5nUGF0aHMiLCJpIiwicmVwbGFjZUFsbCIsImZpbHRlciIsInNWYWx1ZSIsImpvaW4iLCJ1cGRhdGVkU1YiLCJtYXNzQWRkU2VsZWN0T3B0aW9uIiwidXBkYXRlZFNlbGVjdGlvblZhcmlhbnQiLCJuYXZQcm9wTmFtZXMiLCJtYXAiLCJuYXZQcm9wIiwibmFtZSIsInJlZHVjZSIsInN2IiwiZmlyc3ROYXZQYXJ0Iiwic2VsZWN0T3B0aW9ucyIsInRhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsImZpbHRlckJhclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUiLCJmaWx0ZXJCYXJTZWxlY3RPcHRpb24iLCJuYXZpZ2F0aW9uU2VsZWN0T3B0aW9uTmFtZXMiLCJnZXRFbnRpdHlTZXQiLCJnZXRDdXJyZW50RW50aXR5U2V0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0T3B0aW9uIH0gZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBMaXN0UmVwb3J0Q29udHJvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L0xpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXJcIjtcbnR5cGUgRXh0ZXJuYWxOYXZpZ2F0aW9uSW5mbyA9IHtcblx0dGFyZ2V0SW5mbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQ7XG59O1xuXG50eXBlIEZpbHRlckluZm9PZkV4dGVybmFsTmF2ID0ge1xuXHR1cGRhdGVkU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcblx0ZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn07XG5cbmNvbnN0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlID0ge1xuXHRhZGFwdE5hdmlnYXRpb25Db250ZXh0OiBmdW5jdGlvbiAoXG5cdFx0dGhpczogSW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0dGFyZ2V0SW5mbzoge1xuXHRcdFx0cHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fVxuXHQpOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuYmFzZS5nZXRWaWV3KCksXG5cdFx0XHRcdGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdFx0ZmlsdGVyQmFyID0gY29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLFxuXHRcdFx0XHRtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRsZXQgcHJlcGFyZWRTViwgdXBkYXRlZFZhbHVlcztcblx0XHRcdGNvbnN0IGtlZXBOYXZpZ2F0aW9uUHJvcGVydGllcyA9IGNvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5rZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uKCk7XG5cdFx0XHQvLyBBZGRpbmcgZmlsdGVyIGJhciB2YWx1ZXMgdG8gdGhlIG5hdmlnYXRpb24gZG9lcyBub3QgbWFrZSBzZW5zZSBpZiBubyBjb250ZXh0IGhhcyBiZWVuIHNlbGVjdGVkLlxuXHRcdFx0Ly8gSGVuY2Ugb25seSBjb25zaWRlciBmaWx0ZXIgYmFyIHZhbHVlcyB3aGVuIFNlbGVjdGlvblZhcmlhbnQgaXMgbm90IGVtcHR5XG5cdFx0XHRpZiAoZmlsdGVyQmFyICYmICFzZWxlY3Rpb25WYXJpYW50LmlzRW1wdHkoKSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YSA9IHtcblx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBjb250cm9sbGVyLmdldEZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQoKS50b0pTT05PYmplY3QoKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRsZXQgbW9kaWZpZWRPRGF0YSA9IHtcblx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50OiB7fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRtb2RpZmllZE9EYXRhID0gdGhpcy5iYXNlXG5cdFx0XHRcdFx0LmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHRcdFx0LmdldE5hdmlnYXRpb25TZXJ2aWNlKClcblx0XHRcdFx0XHQuY2hlY2tJc1BvdGVudGlhbGx5U2Vuc2l0aXZlKG9EYXRhKSBhcyB0eXBlb2YgbW9kaWZpZWRPRGF0YTtcblxuXHRcdFx0XHRsZXQgZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KG1vZGlmaWVkT0RhdGE/LnNlbGVjdGlvblZhcmlhbnQpO1xuXHRcdFx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSxcblx0XHRcdFx0XHRyb290UGF0aCA9IHZpZXdEYXRhLmZ1bGxDb250ZXh0UGF0aDtcblx0XHRcdFx0aWYgKCFrZWVwTmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdFx0XHRjb25zdCBuYXZQcm9wZXJ0aWVzID0gY29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUobWV0YU1vZGVsLCByb290UGF0aCk7XG5cdFx0XHRcdFx0ZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCA9IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlLnJlbW92ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbVNWKFxuXHRcdFx0XHRcdFx0ZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRcdG5hdlByb3BlcnRpZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXBhcmVkU1YgPSBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZS5wcmVwYXJlRmlsdGVyc0ZvckV4dGVybmFsTmF2aWdhdGlvbihmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LCByb290UGF0aCk7XG5cdFx0XHRcdEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlLmhhbmRsZU11bHRpTW9kZUNvbnRyb2woY29udHJvbGxlciwgZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0XHRcdHVwZGF0ZWRWYWx1ZXMgPSBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZS51cGRhdGVOb25Db25mbGljdGluZ0ZpbHRlclByb3BlcnRpZXMoXG5cdFx0XHRcdFx0dGFyZ2V0SW5mbyxcblx0XHRcdFx0XHRmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0cHJlcGFyZWRTVi5maWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRhcmdldEluZm8gPSB1cGRhdGVkVmFsdWVzLnRhcmdldEluZm87XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXhjZXB0aW9uOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXhjZXB0aW9uIGluc3RhbmNlb2YgRXJyb3IgPyBleGNlcHRpb24ubWVzc2FnZSA6IFN0cmluZyhleGNlcHRpb24pO1xuXHRcdFx0TG9nLmVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyBuYXZpZ2F0aW9uIGNvbnRleHQgLSAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogSGFuZGxlIG11bHRpIG1vZGUgY29udHJvbCBpbiBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGlzIGlzIGxpc3RSZXBvcnRDb250cm9sbGVyLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb24gdmFyaWFudCBmb3JtYXQgb2YgZmlsdGVyIGNvbmRpdGlvbnMuXG5cdCAqL1xuXHRoYW5kbGVNdWx0aU1vZGVDb250cm9sOiBmdW5jdGlvbiAoY29udHJvbGxlcjogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQpOiB2b2lkIHtcblx0XHRjb25zdCBtdWx0aXBsZU1vZGVDb250cm9sID0gY29udHJvbGxlci5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdGlmIChtdWx0aXBsZU1vZGVDb250cm9sKSB7XG5cdFx0XHQvLyBEbyB3ZSBuZWVkIHRvIGV4Y2x1ZGUgRmllbGRzIChtdWx0aSB0YWJsZXMgbW9kZSB3aXRoIG11bHRpIGVudGl0eSBzZXRzKT9cblx0XHRcdGNvbnN0IHRhYnNNb2RlbCA9IG11bHRpcGxlTW9kZUNvbnRyb2wuZ2V0VGFic01vZGVsKCk7XG5cdFx0XHRpZiAodGFic01vZGVsKSB7XG5cdFx0XHRcdGNvbnN0IGFJZ25vcmVkRmllbGRzRm9yVGFiID0gdGFic01vZGVsLmdldFByb3BlcnR5KFxuXHRcdFx0XHRcdGAvJHttdWx0aXBsZU1vZGVDb250cm9sLmNvbnRlbnQ/LmdldFNlbGVjdGVkS2V5KCl9L25vdEFwcGxpY2FibGUvZmllbGRzYFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhSWdub3JlZEZpZWxkc0ZvclRhYikgJiYgYUlnbm9yZWRGaWVsZHNGb3JUYWIubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFJZ25vcmVkRmllbGRzRm9yVGFiLmZvckVhY2goZnVuY3Rpb24gKHNQcm9wZXJ0eTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzUHJvcGVydHkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogUHJlcGFyZSBTViB0byBiZSBwYXNzZWQgdG8gZXh0ZXJuYWwgbmF2aWdhdGlvbi5cblx0ICogQHBhcmFtIGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uIHZhcmlhbnQgZm9ybWF0IG9mIGZpbHRlciBjb25kaXRpb25zLlxuXHQgKiBAcGFyYW0gcm9vdFBhdGggUm9vdCBwYXRoIG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICogQHJldHVybnMgT2JqZWN0IG9mIHByZXBhcmVkIFNWIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBmaWx0ZXJzLlxuXHQgKi9cblx0cHJlcGFyZUZpbHRlcnNGb3JFeHRlcm5hbE5hdmlnYXRpb24oZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgcm9vdFBhdGg6IHN0cmluZyk6IEZpbHRlckluZm9PZkV4dGVybmFsTmF2IHtcblx0XHRsZXQgcGF0aDtcblx0XHRjb25zdCBkaXN0aW5jdEtleXNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4gPSB7fTtcblx0XHRjb25zdCBmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0bGV0IG1haW5FbnRpdHlWYWx1ZVBhdGggPSBcIlwiLFxuXHRcdFx0Y3VycmVudFZhbHVlUGF0aCA9IFwiXCIsXG5cdFx0XHRmdWxsQ29udGV4dFBhdGg6IHN0cmluZyxcblx0XHRcdHdpbm5lclZhbHVlUGF0aDogc3RyaW5nLFxuXHRcdFx0cGF0aEluQ29udGV4dDogc3RyaW5nO1xuXHRcdGZ1bmN0aW9uIF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QoTG9va1VwT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBTZWxlY3RPcHRpb25bXT4pOiB2b2lkIHtcblx0XHRcdGxldCBsb29rVXBPYmplY3RNZXRhUGF0aDtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIExvb2tVcE9iamVjdCkge1xuXHRcdFx0XHRsZXQga2V5SW5Db250ZXh0ID0ga2V5O1xuXHRcdFx0XHRpZiAoTG9va1VwT2JqZWN0W2tleUluQ29udGV4dF0pIHtcblx0XHRcdFx0XHRpZiAoa2V5SW5Db250ZXh0LmluY2x1ZGVzKFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0bG9va1VwT2JqZWN0TWV0YVBhdGggPSBrZXlJbkNvbnRleHQ7IC8vIFwiL1NhbGVzT3JkZXJtYW5hZ2UvX0l0ZW0vTWF0ZXJpYWxcIlxuXHRcdFx0XHRcdFx0Y29uc3QgcGF0aFBhcnRzID0ga2V5SW5Db250ZXh0LnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdGtleUluQ29udGV4dCA9IHBhdGhQYXJ0c1twYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGxvb2tVcE9iamVjdE1ldGFQYXRoID0gcm9vdFBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghZGlzdGluY3RLZXlzT2JqZWN0W2tleUluQ29udGV4dF0pIHtcblx0XHRcdFx0XHRcdC8vIGlmIGtleSBpcyBmb3VuZCBmb3IgdGhlIGZpcnN0IHRpbWUgdGhlbiBjcmVhdGUgYXJyYXlcblx0XHRcdFx0XHRcdGRpc3RpbmN0S2V5c09iamVjdFtrZXlJbkNvbnRleHRdID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHB1c2ggcGF0aCB0byBhcnJheVxuXHRcdFx0XHRcdGRpc3RpbmN0S2V5c09iamVjdFtrZXlJbkNvbnRleHRdLnB1c2gobG9va1VwT2JqZWN0TWV0YVBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnNPYmplY3Q6IFJlY29yZDxzdHJpbmcsIFNlbGVjdE9wdGlvbltdPiA9IHt9O1xuXHRcdHNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmZvckVhY2goKHByb3BlcnR5TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb24gPSBmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0aWYgKHNlbGVjdE9wdGlvbikge1xuXHRcdFx0XHRzZWxlY3RPcHRpb25zT2JqZWN0W2Ake3Byb3BlcnR5TmFtZX1gXSA9IHNlbGVjdE9wdGlvbjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0KHNlbGVjdE9wdGlvbnNPYmplY3QpO1xuXHRcdGZvciAoY29uc3QgZGlzdGluY3RLZXkgaW4gZGlzdGluY3RLZXlzT2JqZWN0KSB7XG5cdFx0XHRjb25zdCBjb25mbGljdGluZ1BhdGhzID0gZGlzdGluY3RLZXlzT2JqZWN0W2Rpc3RpbmN0S2V5XTtcblx0XHRcdGlmIChjb25mbGljdGluZ1BhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0Ly8gY29uZmxpY3Rcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gY29uZmxpY3RpbmdQYXRocy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRwYXRoID0gY29uZmxpY3RpbmdQYXRoc1tpXTtcblx0XHRcdFx0XHRpZiAocGF0aCA9PT0gcm9vdFBhdGgpIHtcblx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aCA9IGAke3Jvb3RQYXRofS8ke2Rpc3RpbmN0S2V5fWA7XG5cdFx0XHRcdFx0XHRwYXRoSW5Db250ZXh0ID0gZGlzdGluY3RLZXk7XG5cdFx0XHRcdFx0XHRtYWluRW50aXR5VmFsdWVQYXRoID0gZGlzdGluY3RLZXk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHBhdGhJbkNvbnRleHQgPSBwYXRoIGFzIHN0cmluZztcblx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aCA9IGAke3Jvb3RQYXRofS8ke3BhdGh9YC5yZXBsYWNlQWxsKC9cXCovZywgXCJcIik7XG5cdFx0XHRcdFx0XHRjdXJyZW50VmFsdWVQYXRoID0gcGF0aCBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNlbGVjdE9wdGlvbnNPYmplY3RbXG5cdFx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIuXCIpXG5cdFx0XHRcdFx0XSA9IHNlbGVjdE9wdGlvbnNPYmplY3RbcGF0aEluQ29udGV4dF07XG5cdFx0XHRcdFx0ZGVsZXRlIHNlbGVjdE9wdGlvbnNPYmplY3RbcGF0aCBhcyBzdHJpbmddO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHdpbm5lclZhbHVlUGF0aCA9IG1haW5FbnRpdHlWYWx1ZVBhdGggfHwgY3VycmVudFZhbHVlUGF0aDtcblx0XHRcdFx0c2VsZWN0T3B0aW9uc09iamVjdFtkaXN0aW5jdEtleV0gPSBzZWxlY3RPcHRpb25zT2JqZWN0W3dpbm5lclZhbHVlUGF0aF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBubyBjb25mbGljdCwgYWRkIGRpc3RpbmN0IGtleSB3aXRob3V0IGFkZGluZyBwYXRoc1xuXHRcdFx0XHRwYXRoID0gY29uZmxpY3RpbmdQYXRoc1swXTtcblx0XHRcdFx0ZnVsbENvbnRleHRQYXRoID1cblx0XHRcdFx0XHRwYXRoID09PSByb290UGF0aCA/IGAke3Jvb3RQYXRofS8ke2Rpc3RpbmN0S2V5fWAgOiAoYCR7cm9vdFBhdGh9LyR7cGF0aH1gIGFzIHVua25vd24gYXMgc3RyaW5nKS5yZXBsYWNlQWxsKFwiKlwiLCBcIlwiKTtcblx0XHRcdFx0ZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtkaXN0aW5jdEtleV0gPSBmdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5qb2luKFwiLlwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Ly9ub3cgd2UgbG9vcCB0aHJvdWdoIG9iamVjdCBhbmQgdXBkYXRlIGV4aXN0aW5nIFNWIHdpdGggdXBkYXRlZCBzZWxlY3Rpb24gb3B0aW9uc1xuXHRcdGNvbnN0IHVwZGF0ZWRTViA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gc2VsZWN0T3B0aW9uc09iamVjdCkge1xuXHRcdFx0dXBkYXRlZFNWLm1hc3NBZGRTZWxlY3RPcHRpb24oc1Byb3BlcnR5LCBzZWxlY3RPcHRpb25zT2JqZWN0W3NQcm9wZXJ0eV0pO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXBkYXRlZFNlbGVjdGlvblZhcmlhbnQ6IHVwZGF0ZWRTVixcblx0XHRcdGZpbHRlclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IGZpbHRlclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gU1YuXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvbiB2YXJpYW50LlxuXHQgKiBAcGFyYW0gbmF2UHJvcGVydGllcyBOYXZpZ2F0aW9uIHByb3BlcnRpZXMuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBTViBmb3IgZXh0ZXJuYWwgbmF2aWdhdGlvbiBhbmQgbm8gY29uZmxpY3QgZmlsdGVycy5cblx0ICovXG5cdHJlbW92ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbVNWKHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIG5hdlByb3BlcnRpZXM6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3QgbmF2UHJvcE5hbWVzID0gbmF2UHJvcGVydGllcyA/IG5hdlByb3BlcnRpZXMubWFwKChuYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkpID0+IG5hdlByb3AubmFtZSkgOiBbXTtcblx0XHRjb25zdCBzZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyA9IHNlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKTtcblx0XHRyZXR1cm4gc2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMucmVkdWNlKChzdjogU2VsZWN0aW9uVmFyaWFudCwgcHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChuYXZQcm9wTmFtZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBmaXJzdE5hdlBhcnQgPSBwcm9wZXJ0eU5hbWUuc3BsaXQoXCIuXCIpWzBdO1xuXHRcdFx0XHRpZiAoZmlyc3ROYXZQYXJ0ICYmIG5hdlByb3BOYW1lcy5pbmNsdWRlcyhmaXJzdE5hdlBhcnQpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN2O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24ocHJvcGVydHlOYW1lKTtcblx0XHRcdGlmIChzZWxlY3RPcHRpb25zKSB7XG5cdFx0XHRcdHN2Lm1hc3NBZGRTZWxlY3RPcHRpb24ocHJvcGVydHlOYW1lLCBzZWxlY3RPcHRpb25zKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHN2O1xuXHRcdH0sIG5ldyBTZWxlY3Rpb25WYXJpYW50KCkpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gYWRkIG5vbiBjb25mbGljdGluZyBmaWx0ZXIgY29uZGl0aW9ucyB0byBTVi5cblx0ICogQHBhcmFtIHRhcmdldEluZm8gVGFyZ2V0IGNvbnRleHRcblx0ICogQHBhcmFtIHRhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCBUYWJsZSBwcm9wZXJ0aWVzIHdpdGhvdXQgY29uZmxpY3Rcblx0ICogQHBhcmFtIGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQgQ29uZGl0aW9ucyBmcm9tIGZpbHRlcmJhciBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gU1YgYW5kIHNlbnQgaGVyZVxuXHQgKiBAcGFyYW0gc2VsZWN0aW9uVmFyaWFudCBTViB3aGljaCBpcyBmaW5hbGx5IGZvcm1lZCBhZnRlciBhbGwgdGhlIGNhbGN1bGF0aW9uc1xuXHQgKiBAcGFyYW0gZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCBGaWx0ZXIgYmFyIGNvbmRpdGlvbnMgd2l0aG91dCBjb25mbGljdFxuXHQgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCB0YXJnZXRJbmZvIGFuZCBzZWxlY3Rpb24gdmFyaWFudFxuXHQgKi9cblx0dXBkYXRlTm9uQ29uZmxpY3RpbmdGaWx0ZXJQcm9wZXJ0aWVzOiBmdW5jdGlvbiAoXG5cdFx0dGFyZ2V0SW5mbzoge1xuXHRcdFx0cHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cdFx0fSxcblx0XHRmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LFxuXHRcdHNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0ZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblx0KTogRXh0ZXJuYWxOYXZpZ2F0aW9uSW5mbyB7XG5cdFx0Y29uc3QgdGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID0gdGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdGNvbnN0IGZpbHRlckJhclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0O1xuXHRcdGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKS5mb3JFYWNoKGZ1bmN0aW9uIChzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUpIHtcblx0XHRcdGNvbnN0IGZpbHRlckJhclNlbGVjdE9wdGlvbiA9IGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNlbGVjdE9wdGlvblByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoZmlsdGVyQmFyU2VsZWN0T3B0aW9uICYmIGZpbHRlckJhclNlbGVjdE9wdGlvbi5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblNlbGVjdE9wdGlvbk5hbWVzID0gc2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdFx0XHRpZiAoIW5hdmlnYXRpb25TZWxlY3RPcHRpb25OYW1lcy5pbmNsdWRlcyhzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUpKSB7XG5cdFx0XHRcdFx0Ly8gRmlyc3QgYWRkIGFsbCB0aGUgZmlsdGVyYmFyIFNWIGlmIHRoZXkgZG9uJ3QgZXhpc3QgaW4gbmF2aWdhdGlvbiBTVlxuXHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUsIGZpbHRlckJhclNlbGVjdE9wdGlvbik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gTm93IGlmIG5hdmlnYXRpb24gcGF0aCBpcyBwcmVzZW50IGFkZCBpdCBoZXJlXG5cdFx0XHRcdFx0Ly8gU2VsZWN0IG9wdGlvbiBwYXRocyBmcm9tIHRhYmxlICh3aXRoIG5hdmlnYXRpb24gcGF0aCBhZGRlZCB0byB0aGUgc3RyaW5nIG5hbWUpIHRoYXQgZG9uJ3QgY3JlYXRlIGNvbmZsaWN0cyB3aXRoIGZpbHRlciBiYXIgc2VsZWN0IG9wdGlvbiBuYW1lc1xuXHRcdFx0XHRcdGlmICh0YWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgJiYgc2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lIGluIHRhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lXSxcblx0XHRcdFx0XHRcdFx0ZmlsdGVyQmFyU2VsZWN0T3B0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZmlsdGVyQmFyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUgaW4gZmlsdGVyQmFyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJCYXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W3NlbGVjdE9wdGlvblByb3BlcnR5TmFtZV0sXG5cdFx0XHRcdFx0XHRcdGZpbHRlckJhclNlbGVjdE9wdGlvblxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4geyB0YXJnZXRJbmZvLCBzZWxlY3Rpb25WYXJpYW50IH07XG5cdH0sXG5cdGdldEVudGl0eVNldDogZnVuY3Rpb24gKHRoaXM6IEludGVudEJhc2VkTmF2aWdhdGlvbik6IHN0cmluZyB7XG5cdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1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
222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50IiwidGFyZ2V0SW5mbyIsInZpZXciLCJnZXRWaWV3IiwibW9kZWwiLCJnZXRNb2RlbCIsIkxvZyIsImVycm9yIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJmaWx0ZXJCYXIiLCJfZ2V0RmlsdGVyQmFyQ29udHJvbCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInByZXBhcmVkU1YiLCJ1cGRhdGVkVmFsdWVzIiwia2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImtlZXBOYXZpZ2F0aW9uUHJvcGVydGllc0Zvck5hdmlnYXRpb24iLCJpc0VtcHR5Iiwib0RhdGEiLCJnZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OT2JqZWN0IiwibW9kaWZpZWRPRGF0YSIsImdldEFwcENvbXBvbmVudCIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiY2hlY2tJc1BvdGVudGlhbGx5U2Vuc2l0aXZlIiwiZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwicm9vdFBhdGgiLCJmdWxsQ29udGV4dFBhdGgiLCJuYXZQcm9wZXJ0aWVzIiwiZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZSIsInJlbW92ZU5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbVNWIiwicHJlcGFyZUZpbHRlcnNGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJoYW5kbGVNdWx0aU1vZGVDb250cm9sIiwidXBkYXRlTm9uQ29uZmxpY3RpbmdGaWx0ZXJQcm9wZXJ0aWVzIiwiZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJleGNlcHRpb24iLCJtZXNzYWdlIiwiRXJyb3IiLCJTdHJpbmciLCJtdWx0aXBsZU1vZGVDb250cm9sIiwiX2dldE11bHRpTW9kZUNvbnRyb2wiLCJ0YWJzTW9kZWwiLCJnZXRUYWJzTW9kZWwiLCJhSWdub3JlZEZpZWxkc0ZvclRhYiIsImdldFByb3BlcnR5IiwiY29udGVudCIsImdldFNlbGVjdGVkS2V5IiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiZm9yRWFjaCIsInNQcm9wZXJ0eSIsInJlbW92ZVNlbGVjdE9wdGlvbiIsInBhdGgiLCJkaXN0aW5jdEtleXNPYmplY3QiLCJtYWluRW50aXR5VmFsdWVQYXRoIiwiY3VycmVudFZhbHVlUGF0aCIsIndpbm5lclZhbHVlUGF0aCIsInBhdGhJbkNvbnRleHQiLCJfZmluZERpc3RpbmN0S2V5c0luT2JqZWN0IiwiTG9va1VwT2JqZWN0IiwibG9va1VwT2JqZWN0TWV0YVBhdGgiLCJrZXkiLCJrZXlJbkNvbnRleHQiLCJpbmNsdWRlcyIsInBhdGhQYXJ0cyIsInNwbGl0IiwicHVzaCIsInNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJzZWxlY3RPcHRpb25zT2JqZWN0IiwicHJvcGVydHlOYW1lIiwic2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwiZGlzdGluY3RLZXkiLCJjb25mbGljdGluZ1BhdGhzIiwiaSIsInJlcGxhY2VBbGwiLCJmaWx0ZXIiLCJzVmFsdWUiLCJqb2luIiwidXBkYXRlZFNWIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsInVwZGF0ZWRTZWxlY3Rpb25WYXJpYW50IiwibmF2UHJvcE5hbWVzIiwibWFwIiwibmF2UHJvcCIsIm5hbWUiLCJyZWR1Y2UiLCJzdiIsImZpcnN0TmF2UGFydCIsInNlbGVjdE9wdGlvbnMiLCJ0YWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJCYXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lIiwiZmlsdGVyQmFyU2VsZWN0T3B0aW9uIiwibmF2aWdhdGlvblNlbGVjdE9wdGlvbk5hbWVzIiwiZ2V0RW50aXR5U2V0IiwiZ2V0Q3VycmVudEVudGl0eVNldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSW50ZW50QmFzZWROYXZpZ2F0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RPcHRpb24gfSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xudHlwZSBFeHRlcm5hbE5hdmlnYXRpb25JbmZvID0ge1xuXHR0YXJnZXRJbmZvOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudDtcbn07XG5cbnR5cGUgRmlsdGVySW5mb09mRXh0ZXJuYWxOYXYgPSB7XG5cdHVwZGF0ZWRTZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50O1xuXHRmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufTtcblxuY29uc3QgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgPSB7XG5cdGFkYXB0TmF2aWdhdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChcblx0XHR0aGlzOiBJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHR0YXJnZXRJbmZvOiB7XG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHR9XG5cdCk6IHZvaWQge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKTtcblx0XHRcdGlmICghbW9kZWwpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiTmF2aWdhdGlvbiBjb250ZXh0IGFkYXB0YXRpb24gc2tpcHBlZDogbm8gbW9kZWwgYm91bmQgdG8gdmlld1wiKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyLFxuXHRcdFx0XHRmaWx0ZXJCYXIgPSBjb250cm9sbGVyLl9nZXRGaWx0ZXJCYXJDb250cm9sKCksXG5cdFx0XHRcdG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRcdFx0bGV0IHByZXBhcmVkU1YsIHVwZGF0ZWRWYWx1ZXM7XG5cdFx0XHRjb25zdCBrZWVwTmF2aWdhdGlvblByb3BlcnRpZXMgPSBjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ua2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpO1xuXHRcdFx0Ly8gQWRkaW5nIGZpbHRlciBiYXIgdmFsdWVzIHRvIHRoZSBuYXZpZ2F0aW9uIGRvZXMgbm90IG1ha2Ugc2Vuc2UgaWYgbm8gY29udGV4dCBoYXMgYmVlbiBzZWxlY3RlZC5cblx0XHRcdC8vIEhlbmNlIG9ubHkgY29uc2lkZXIgZmlsdGVyIGJhciB2YWx1ZXMgd2hlbiBTZWxlY3Rpb25WYXJpYW50IGlzIG5vdCBlbXB0eVxuXHRcdFx0aWYgKGZpbHRlckJhciAmJiAhc2VsZWN0aW9uVmFyaWFudC5pc0VtcHR5KCkpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGEgPSB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDogY29udHJvbGxlci5nZXRGaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KCkudG9KU09OT2JqZWN0KClcblx0XHRcdFx0fTtcblx0XHRcdFx0bGV0IG1vZGlmaWVkT0RhdGEgPSB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudDoge31cblx0XHRcdFx0fTtcblx0XHRcdFx0bW9kaWZpZWRPRGF0YSA9IGNvbnRyb2xsZXJcblx0XHRcdFx0XHQuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0XHQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKVxuXHRcdFx0XHRcdC5jaGVja0lzUG90ZW50aWFsbHlTZW5zaXRpdmUob0RhdGEpIGFzIHR5cGVvZiBtb2RpZmllZE9EYXRhO1xuXG5cdFx0XHRcdGxldCBmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50ID0gbmV3IFNlbGVjdGlvblZhcmlhbnQobW9kaWZpZWRPRGF0YT8uc2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0XHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhLFxuXHRcdFx0XHRcdHJvb3RQYXRoID0gdmlld0RhdGEuZnVsbENvbnRleHRQYXRoO1xuXHRcdFx0XHRpZiAoIWtlZXBOYXZpZ2F0aW9uUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGNvbnN0IG5hdlByb3BlcnRpZXMgPSBjb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0TmF2aWdhdGlvblByb3BlcnRpZXNGcm9tRW50aXR5VHlwZShtZXRhTW9kZWwsIHJvb3RQYXRoKTtcblx0XHRcdFx0XHRmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50ID0gSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUucmVtb3ZlTmF2aWdhdGlvblByb3BlcnRpZXNGcm9tU1YoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdFx0bmF2UHJvcGVydGllc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHJlcGFyZWRTViA9IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlLnByZXBhcmVGaWx0ZXJzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQsIHJvb3RQYXRoKTtcblx0XHRcdFx0SW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUuaGFuZGxlTXVsdGlNb2RlQ29udHJvbChjb250cm9sbGVyLCBmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50KTtcblx0XHRcdFx0dXBkYXRlZFZhbHVlcyA9IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlLnVwZGF0ZU5vbkNvbmZsaWN0aW5nRmlsdGVyUHJvcGVydGllcyhcblx0XHRcdFx0XHR0YXJnZXRJbmZvLFxuXHRcdFx0XHRcdGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRwcmVwYXJlZFNWLmZpbHRlclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rcblx0XHRcdFx0KTtcblx0XHRcdFx0dGFyZ2V0SW5mbyA9IHVwZGF0ZWRWYWx1ZXMudGFyZ2V0SW5mbztcblx0XHRcdFx0ZGVsZXRlIHRhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChleGNlcHRpb246IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBleGNlcHRpb24gaW5zdGFuY2VvZiBFcnJvciA/IGV4Y2VwdGlvbi5tZXNzYWdlIDogU3RyaW5nKGV4Y2VwdGlvbik7XG5cdFx0XHRMb2cuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzIG5hdmlnYXRpb24gY29udGV4dCAtICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBIYW5kbGUgbXVsdGkgbW9kZSBjb250cm9sIGluIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFRoaXMgaXMgbGlzdFJlcG9ydENvbnRyb2xsZXIuXG5cdCAqIEBwYXJhbSBmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50IFNlbGVjdGlvbiB2YXJpYW50IGZvcm1hdCBvZiBmaWx0ZXIgY29uZGl0aW9ucy5cblx0ICovXG5cdGhhbmRsZU11bHRpTW9kZUNvbnRyb2w6IGZ1bmN0aW9uIChjb250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGNvbnN0IG11bHRpcGxlTW9kZUNvbnRyb2wgPSBjb250cm9sbGVyLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0aWYgKG11bHRpcGxlTW9kZUNvbnRyb2wpIHtcblx0XHRcdC8vIERvIHdlIG5lZWQgdG8gZXhjbHVkZSBGaWVsZHMgKG11bHRpIHRhYmxlcyBtb2RlIHdpdGggbXVsdGkgZW50aXR5IHNldHMpP1xuXHRcdFx0Y29uc3QgdGFic01vZGVsID0gbXVsdGlwbGVNb2RlQ29udHJvbC5nZXRUYWJzTW9kZWwoKTtcblx0XHRcdGlmICh0YWJzTW9kZWwpIHtcblx0XHRcdFx0Y29uc3QgYUlnbm9yZWRGaWVsZHNGb3JUYWIgPSB0YWJzTW9kZWwuZ2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0YC8ke211bHRpcGxlTW9kZUNvbnRyb2wuY29udGVudD8uZ2V0U2VsZWN0ZWRLZXkoKX0vbm90QXBwbGljYWJsZS9maWVsZHNgXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzRm9yVGFiKSAmJiBhSWdub3JlZEZpZWxkc0ZvclRhYi5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YUlnbm9yZWRGaWVsZHNGb3JUYWIuZm9yRWFjaChmdW5jdGlvbiAoc1Byb3BlcnR5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBQcmVwYXJlIFNWIHRvIGJlIHBhc3NlZCB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb24gdmFyaWFudCBmb3JtYXQgb2YgZmlsdGVyIGNvbmRpdGlvbnMuXG5cdCAqIEBwYXJhbSByb290UGF0aCBSb290IHBhdGggb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcmV0dXJucyBPYmplY3Qgb2YgcHJlcGFyZWQgU1YgZm9yIGV4dGVybmFsIG5hdmlnYXRpb24gYW5kIG5vIGNvbmZsaWN0IGZpbHRlcnMuXG5cdCAqL1xuXHRwcmVwYXJlRmlsdGVyc0ZvckV4dGVybmFsTmF2aWdhdGlvbihmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCByb290UGF0aDogc3RyaW5nKTogRmlsdGVySW5mb09mRXh0ZXJuYWxOYXYge1xuXHRcdGxldCBwYXRoO1xuXHRcdGNvbnN0IGRpc3RpbmN0S2V5c09iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiA9IHt9O1xuXHRcdGNvbnN0IGZpbHRlclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRsZXQgbWFpbkVudGl0eVZhbHVlUGF0aCA9IFwiXCIsXG5cdFx0XHRjdXJyZW50VmFsdWVQYXRoID0gXCJcIixcblx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc3RyaW5nLFxuXHRcdFx0d2lubmVyVmFsdWVQYXRoOiBzdHJpbmcsXG5cdFx0XHRwYXRoSW5Db250ZXh0OiBzdHJpbmc7XG5cdFx0ZnVuY3Rpb24gX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChMb29rVXBPYmplY3Q6IFJlY29yZDxzdHJpbmcsIFNlbGVjdE9wdGlvbltdPik6IHZvaWQge1xuXHRcdFx0bGV0IGxvb2tVcE9iamVjdE1ldGFQYXRoO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gTG9va1VwT2JqZWN0KSB7XG5cdFx0XHRcdGxldCBrZXlJbkNvbnRleHQgPSBrZXk7XG5cdFx0XHRcdGlmIChMb29rVXBPYmplY3Rba2V5SW5Db250ZXh0XSkge1xuXHRcdFx0XHRcdGlmIChrZXlJbkNvbnRleHQuaW5jbHVkZXMoXCIvXCIpKSB7XG5cdFx0XHRcdFx0XHRsb29rVXBPYmplY3RNZXRhUGF0aCA9IGtleUluQ29udGV4dDsgLy8gXCIvU2FsZXNPcmRlcm1hbmFnZS9fSXRlbS9NYXRlcmlhbFwiXG5cdFx0XHRcdFx0XHRjb25zdCBwYXRoUGFydHMgPSBrZXlJbkNvbnRleHQuc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRcdFx0a2V5SW5Db250ZXh0ID0gcGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bG9va1VwT2JqZWN0TWV0YVBhdGggPSByb290UGF0aDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCFkaXN0aW5jdEtleXNPYmplY3Rba2V5SW5Db250ZXh0XSkge1xuXHRcdFx0XHRcdFx0Ly8gaWYga2V5IGlzIGZvdW5kIGZvciB0aGUgZmlyc3QgdGltZSB0aGVuIGNyZWF0ZSBhcnJheVxuXHRcdFx0XHRcdFx0ZGlzdGluY3RLZXlzT2JqZWN0W2tleUluQ29udGV4dF0gPSBbXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gcHVzaCBwYXRoIHRvIGFycmF5XG5cdFx0XHRcdFx0ZGlzdGluY3RLZXlzT2JqZWN0W2tleUluQ29udGV4dF0ucHVzaChsb29rVXBPYmplY3RNZXRhUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBmaWx0ZXJCYXJTZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0Y29uc3Qgc2VsZWN0T3B0aW9uc09iamVjdDogUmVjb3JkPHN0cmluZywgU2VsZWN0T3B0aW9uW10+ID0ge307XG5cdFx0c2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuZm9yRWFjaCgocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbiA9IGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHByb3BlcnR5TmFtZSk7XG5cdFx0XHRpZiAoc2VsZWN0T3B0aW9uKSB7XG5cdFx0XHRcdHNlbGVjdE9wdGlvbnNPYmplY3RbYCR7cHJvcGVydHlOYW1lfWBdID0gc2VsZWN0T3B0aW9uO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qoc2VsZWN0T3B0aW9uc09iamVjdCk7XG5cdFx0Zm9yIChjb25zdCBkaXN0aW5jdEtleSBpbiBkaXN0aW5jdEtleXNPYmplY3QpIHtcblx0XHRcdGNvbnN0IGNvbmZsaWN0aW5nUGF0aHMgPSBkaXN0aW5jdEtleXNPYmplY3RbZGlzdGluY3RLZXldO1xuXHRcdFx0aWYgKGNvbmZsaWN0aW5nUGF0aHMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHQvLyBjb25mbGljdFxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8PSBjb25mbGljdGluZ1BhdGhzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdHBhdGggPSBjb25mbGljdGluZ1BhdGhzW2ldO1xuXHRcdFx0XHRcdGlmIChwYXRoID09PSByb290UGF0aCkge1xuXHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoID0gYCR7cm9vdFBhdGh9LyR7ZGlzdGluY3RLZXl9YDtcblx0XHRcdFx0XHRcdHBhdGhJbkNvbnRleHQgPSBkaXN0aW5jdEtleTtcblx0XHRcdFx0XHRcdG1haW5FbnRpdHlWYWx1ZVBhdGggPSBkaXN0aW5jdEtleTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cGF0aEluQ29udGV4dCA9IHBhdGggYXMgc3RyaW5nO1xuXHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoID0gYCR7cm9vdFBhdGh9LyR7cGF0aH1gLnJlcGxhY2VBbGwoL1xcKi9nLCBcIlwiKTtcblx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZVBhdGggPSBwYXRoIGFzIHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c2VsZWN0T3B0aW9uc09iamVjdFtcblx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIvXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNWYWx1ZSAhPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuam9pbihcIi5cIilcblx0XHRcdFx0XHRdID0gc2VsZWN0T3B0aW9uc09iamVjdFtwYXRoSW5Db250ZXh0XTtcblx0XHRcdFx0XHRkZWxldGUgc2VsZWN0T3B0aW9uc09iamVjdFtwYXRoIGFzIHN0cmluZ107XG5cdFx0XHRcdH1cblx0XHRcdFx0d2lubmVyVmFsdWVQYXRoID0gbWFpbkVudGl0eVZhbHVlUGF0aCB8fCBjdXJyZW50VmFsdWVQYXRoO1xuXHRcdFx0XHRzZWxlY3RPcHRpb25zT2JqZWN0W2Rpc3RpbmN0S2V5XSA9IHNlbGVjdE9wdGlvbnNPYmplY3Rbd2lubmVyVmFsdWVQYXRoXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vIGNvbmZsaWN0LCBhZGQgZGlzdGluY3Qga2V5IHdpdGhvdXQgYWRkaW5nIHBhdGhzXG5cdFx0XHRcdHBhdGggPSBjb25mbGljdGluZ1BhdGhzWzBdO1xuXHRcdFx0XHRmdWxsQ29udGV4dFBhdGggPVxuXHRcdFx0XHRcdHBhdGggPT09IHJvb3RQYXRoID8gYCR7cm9vdFBhdGh9LyR7ZGlzdGluY3RLZXl9YCA6IChgJHtyb290UGF0aH0vJHtwYXRofWAgYXMgdW5rbm93biBhcyBzdHJpbmcpLnJlcGxhY2VBbGwoXCIqXCIsIFwiXCIpO1xuXHRcdFx0XHRmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0W2Rpc3RpbmN0S2V5XSA9IGZ1bGxDb250ZXh0UGF0aFxuXHRcdFx0XHRcdC5zcGxpdChcIi9cIilcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHNWYWx1ZSAhPSBcIlwiO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmpvaW4oXCIuXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvL25vdyB3ZSBsb29wIHRocm91Z2ggb2JqZWN0IGFuZCB1cGRhdGUgZXhpc3RpbmcgU1Ygd2l0aCB1cGRhdGVkIHNlbGVjdGlvbiBvcHRpb25zXG5cdFx0Y29uc3QgdXBkYXRlZFNWID0gbmV3IFNlbGVjdGlvblZhcmlhbnQoKTtcblx0XHRmb3IgKGNvbnN0IHNQcm9wZXJ0eSBpbiBzZWxlY3RPcHRpb25zT2JqZWN0KSB7XG5cdFx0XHR1cGRhdGVkU1YubWFzc0FkZFNlbGVjdE9wdGlvbihzUHJvcGVydHksIHNlbGVjdE9wdGlvbnNPYmplY3Rbc1Byb3BlcnR5XSk7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR1cGRhdGVkU2VsZWN0aW9uVmFyaWFudDogdXBkYXRlZFNWLFxuXHRcdFx0ZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdDogZmlsdGVyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJlbW92ZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgZnJvbSBTVi5cblx0ICogQHBhcmFtIHNlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uIHZhcmlhbnQuXG5cdCAqIEBwYXJhbSBuYXZQcm9wZXJ0aWVzIE5hdmlnYXRpb24gcHJvcGVydGllcy5cblx0ICogQHJldHVybnMgT2JqZWN0IG9mIHByZXBhcmVkIFNWIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBmaWx0ZXJzLlxuXHQgKi9cblx0cmVtb3ZlTmF2aWdhdGlvblByb3BlcnRpZXNGcm9tU1Yoc2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgbmF2UHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBuYXZQcm9wTmFtZXMgPSBuYXZQcm9wZXJ0aWVzID8gbmF2UHJvcGVydGllcy5tYXAoKG5hdlByb3A6IE5hdmlnYXRpb25Qcm9wZXJ0eSkgPT4gbmF2UHJvcC5uYW1lKSA6IFtdO1xuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gc2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdHJldHVybiBzZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5yZWR1Y2UoKHN2OiBTZWxlY3Rpb25WYXJpYW50LCBwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKG5hdlByb3BOYW1lcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IGZpcnN0TmF2UGFydCA9IHByb3BlcnR5TmFtZS5zcGxpdChcIi5cIilbMF07XG5cdFx0XHRcdGlmIChmaXJzdE5hdlBhcnQgJiYgbmF2UHJvcE5hbWVzLmluY2x1ZGVzKGZpcnN0TmF2UGFydCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3Y7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBzZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihwcm9wZXJ0eU5hbWUpO1xuXHRcdFx0aWYgKHNlbGVjdE9wdGlvbnMpIHtcblx0XHRcdFx0c3YubWFzc0FkZFNlbGVjdE9wdGlvbihwcm9wZXJ0eU5hbWUsIHNlbGVjdE9wdGlvbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc3Y7XG5cdFx0fSwgbmV3IFNlbGVjdGlvblZhcmlhbnQoKSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhZGQgbm9uIGNvbmZsaWN0aW5nIGZpbHRlciBjb25kaXRpb25zIHRvIFNWLlxuXHQgKiBAcGFyYW0gdGFyZ2V0SW5mbyBUYXJnZXQgY29udGV4dFxuXHQgKiBAcGFyYW0gdGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IFRhYmxlIHByb3BlcnRpZXMgd2l0aG91dCBjb25mbGljdFxuXHQgKiBAcGFyYW0gZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudCBDb25kaXRpb25zIGZyb20gZmlsdGVyYmFyIGhhcyBiZWVuIGNvbnZlcnRlZCB0byBTViBhbmQgc2VudCBoZXJlXG5cdCAqIEBwYXJhbSBzZWxlY3Rpb25WYXJpYW50IFNWIHdoaWNoIGlzIGZpbmFsbHkgZm9ybWVkIGFmdGVyIGFsbCB0aGUgY2FsY3VsYXRpb25zXG5cdCAqIEBwYXJhbSBmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IEZpbHRlciBiYXIgY29uZGl0aW9ucyB3aXRob3V0IGNvbmZsaWN0XG5cdCAqIEByZXR1cm5zIFRoZSB1cGRhdGVkIHRhcmdldEluZm8gYW5kIHNlbGVjdGlvbiB2YXJpYW50XG5cdCAqL1xuXHR1cGRhdGVOb25Db25mbGljdGluZ0ZpbHRlclByb3BlcnRpZXM6IGZ1bmN0aW9uIChcblx0XHR0YXJnZXRJbmZvOiB7XG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHR9LFxuXHRcdGZpbHRlckJhclNlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCxcblx0XHRmaWx0ZXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuXHQpOiBFeHRlcm5hbE5hdmlnYXRpb25JbmZvIHtcblx0XHRjb25zdCB0YWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSB0YXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0Y29uc3QgZmlsdGVyQmFyUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA9IGZpbHRlclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0ZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpLmZvckVhY2goZnVuY3Rpb24gKHNlbGVjdE9wdGlvblByb3BlcnR5TmFtZSkge1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyU2VsZWN0T3B0aW9uID0gZmlsdGVyQmFyU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lKTtcblx0XHRcdGlmIChmaWx0ZXJCYXJTZWxlY3RPcHRpb24gJiYgZmlsdGVyQmFyU2VsZWN0T3B0aW9uLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uU2VsZWN0T3B0aW9uTmFtZXMgPSBzZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHRcdGlmICghbmF2aWdhdGlvblNlbGVjdE9wdGlvbk5hbWVzLmluY2x1ZGVzKHNlbGVjdE9wdGlvblByb3BlcnR5TmFtZSkpIHtcblx0XHRcdFx0XHQvLyBGaXJzdCBhZGQgYWxsIHRoZSBmaWx0ZXJiYXIgU1YgaWYgdGhleSBkb24ndCBleGlzdCBpbiBuYXZpZ2F0aW9uIFNWXG5cdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudC5tYXNzQWRkU2VsZWN0T3B0aW9uKHNlbGVjdE9wdGlvblByb3BlcnR5TmFtZSwgZmlsdGVyQmFyU2VsZWN0T3B0aW9uKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBOb3cgaWYgbmF2aWdhdGlvbiBwYXRoIGlzIHByZXNlbnQgYWRkIGl0IGhlcmVcblx0XHRcdFx0XHQvLyBTZWxlY3Qgb3B0aW9uIHBhdGhzIGZyb20gdGFibGUgKHdpdGggbmF2aWdhdGlvbiBwYXRoIGFkZGVkIHRvIHRoZSBzdHJpbmcgbmFtZSkgdGhhdCBkb24ndCBjcmVhdGUgY29uZmxpY3RzIHdpdGggZmlsdGVyIGJhciBzZWxlY3Qgb3B0aW9uIG5hbWVzXG5cdFx0XHRcdFx0aWYgKHRhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWUgaW4gdGFibGVQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oXG5cdFx0XHRcdFx0XHRcdHRhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzZWxlY3RPcHRpb25Qcm9wZXJ0eU5hbWVdLFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJCYXJTZWxlY3RPcHRpb25cblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChmaWx0ZXJCYXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ICYmIHNlbGVjdE9wdGlvblByb3BlcnR5TmFtZSBpbiBmaWx0ZXJCYXJQcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0KSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oXG5cdFx0XHRcdFx0XHRcdGZpbHRlckJhclByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc2VsZWN0T3B0aW9uUHJvcGVydHlOYW1lXSxcblx0XHRcdFx0XHRcdFx0ZmlsdGVyQmFyU2VsZWN0T3B0aW9uXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7IHRhcmdldEluZm8sIHNlbGVjdGlvblZhcmlhbnQgfTtcblx0fSxcblx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZW50QmFzZWROYXZpZ2F0aW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCk/LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlciB8IG51bGw7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXI/LmdldEN1cnJlbnRFbnRpdHlTZXQoKSA/PyBcIlwiO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztFQWtCQSxNQUFNQSw2QkFBNkIsR0FBRztJQUNyQ0Msc0JBQXNCLEVBQUUsU0FBQUEsQ0FFdkJDLGdCQUFrQyxFQUNsQ0MsVUFFQyxFQUNNO01BQ1AsSUFBSTtRQUNILE1BQU1DLElBQUksR0FBRyxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLE1BQU1DLEtBQUssR0FBR0YsSUFBSSxDQUFDRyxRQUFRLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUNELEtBQUssRUFBRTtVQUNYRSxHQUFHLENBQUNDLEtBQUssQ0FBQywrREFBK0QsQ0FBQztVQUMxRTtRQUNEO1FBQ0EsTUFBTUMsVUFBVSxHQUFHTixJQUFJLENBQUNPLGFBQWEsQ0FBQyxDQUF5QjtVQUM5REMsU0FBUyxHQUFHRixVQUFVLENBQUNHLG9CQUFvQixDQUFDLENBQUM7VUFDN0NDLFNBQVMsR0FBR1IsS0FBSyxDQUFDUyxZQUFZLENBQUMsQ0FBbUI7UUFDbkQsSUFBSUMsVUFB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
@@ -1,9 +1,11 @@
1
1
  import { type NavigationProperty } from "@sap-ux/vocabularies-types";
2
2
  import Log from "sap/base/Log";
3
3
  import type IntentBasedNavigation from "sap/fe/core/controllerextensions/IntentBasedNavigation";
4
+ import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
4
5
  import type { SelectOption } from "sap/fe/navigation/SelectionVariant";
5
6
  import SelectionVariant from "sap/fe/navigation/SelectionVariant";
6
7
  import type ListReportController from "sap/fe/templates/ListReport/ListReportController.controller";
8
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
7
9
  type ExternalNavigationInfo = {
8
10
  targetInfo: Record<string, unknown>;
9
11
  selectionVariant: SelectionVariant;
@@ -23,10 +25,15 @@ const IntentBasedNavigationOverride = {
23
25
  }
24
26
  ): void {
25
27
  try {
26
- const view = this.base.getView(),
27
- controller = view.getController() as ListReportController,
28
+ const view = this.getView();
29
+ const model = view.getModel();
30
+ if (!model) {
31
+ Log.error("Navigation context adaptation skipped: no model bound to view");
32
+ return;
33
+ }
34
+ const controller = view.getController() as ListReportController,
28
35
  filterBar = controller._getFilterBarControl(),
29
- metaModel = view.getModel().getMetaModel();
36
+ metaModel = model.getMetaModel() as ODataMetaModel;
30
37
  let preparedSV, updatedValues;
31
38
  const keepNavigationProperties = controller._intentBasedNavigation.keepNavigationPropertiesForNavigation();
32
39
  // Adding filter bar values to the navigation does not make sense if no context has been selected.
@@ -38,13 +45,13 @@ const IntentBasedNavigationOverride = {
38
45
  let modifiedOData = {
39
46
  selectionVariant: {}
40
47
  };
41
- modifiedOData = this.base
48
+ modifiedOData = controller
42
49
  .getAppComponent()
43
50
  .getNavigationService()
44
51
  .checkIsPotentiallySensitive(oData) as typeof modifiedOData;
45
52
 
46
53
  let filterBarSelectionVariant = new SelectionVariant(modifiedOData?.selectionVariant);
47
- const viewData = view.getViewData(),
54
+ const viewData = view.getViewData() as ViewData,
48
55
  rootPath = viewData.fullContextPath;
49
56
  if (!keepNavigationProperties) {
50
57
  const navProperties = controller._intentBasedNavigation.getNavigationPropertiesFromEntityType(metaModel, rootPath);
@@ -259,7 +266,8 @@ const IntentBasedNavigationOverride = {
259
266
  return { targetInfo, selectionVariant };
260
267
  },
261
268
  getEntitySet: function (this: IntentBasedNavigation): string {
262
- return (this.base as ListReportController).getCurrentEntitySet();
269
+ const controller = this.getView()?.getController() as ListReportController | null;
270
+ return controller?.getCurrentEntitySet() ?? "";
263
271
  }
264
272
  };
265
273