@sapui5/sap.fe.core 1.124.0 → 1.124.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +15 -4
  4. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +10 -0
  5. package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -1
  6. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1 -0
  7. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -2
  8. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +1 -1
  9. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +54 -40
  10. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +62 -38
  11. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +2 -2
  12. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1 -1
  13. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  14. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -0
  15. package/src/sap/fe/core/fpm/manifest.json +1 -1
  16. package/src/sap/fe/core/helpers/ModelHelper.js +9 -1
  17. package/src/sap/fe/core/helpers/ModelHelper.ts +7 -0
  18. package/src/sap/fe/core/library.js +1 -1
  19. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +10 -6
  20. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +20 -5
  21. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  22. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  23. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -3
  24. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +7 -2
@@ -570,6 +570,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controls/Any", "sap/fe/core/converte
570
570
  return model && model === odataModel;
571
571
  };
572
572
  if (path.includes("@$ui5.fe.virtual.")) {
573
+ var _ghostControl$getBind;
573
574
  const expression = MetaModelConverter.getVirtualBindingExpression(path, MetaModelConverter.convertTypes(this.getMetaModel()));
574
575
  const ghostControl = new Any({
575
576
  any: compileExpression(expression),
@@ -588,6 +589,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controls/Any", "sap/fe/core/converte
588
589
  };
589
590
  }
590
591
  ghostControl.setModel(this);
592
+ const ghostBinding = (_ghostControl$getBind = ghostControl.getBindingInfo("any")) === null || _ghostControl$getBind === void 0 ? void 0 : _ghostControl$getBind.binding;
593
+ const fnCheckUpdate = ghostBinding === null || ghostBinding === void 0 ? void 0 : ghostBinding.checkUpdate;
594
+ if (fnCheckUpdate) {
595
+ ghostControl.getBindingInfo("any").binding.checkUpdate = () => {
596
+ return fnCheckUpdate.bind(ghostBinding)(true);
597
+ };
598
+ }
591
599
  ghostControl.setBindingContext(context);
592
600
  }
593
601
  return propBinding;
@@ -646,4 +654,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/controls/Any", "sap/fe/core/converte
646
654
  };
647
655
  return ModelHelper;
648
656
  }, false);
649
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJjb250YWluc1RhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJEcmFmdE5vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsIm9NZXRhTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJvRW50aXR5Q29udGFpbmVyIiwic0VudGl0eVNldCIsImdldERyYWZ0Um9vdFBhdGgiLCJvQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldFJvb3RQYXRoIiwic1BhdGgiLCJtb2RlbCIsImZpcnN0SXRlcmF0aW9uIiwic0l0ZXJhdGlvblBhdGgiLCJSZWdFeHAiLCJleGVjIiwic0VudGl0eVBhdGgiLCJnZXRNZXRhUGF0aCIsIm1EYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJnZXRUYXJnZXRFbnRpdHlTZXQiLCJzRW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJvZGF0YU1ldGFNb2RlbCIsImVudGl0eVNldFBhdGgiLCJzcGxpdCIsImZpbHRlciIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiam9pbiIsInBhdGhQYXJ0cyIsImxlbmd0aCIsImluaXRpYWxQYXRoT2JqZWN0IiwiZ3Jvd2luZ1BhdGgiLCJwZW5kaW5nTmF2UHJvcEJpbmRpbmciLCJwYXRoT2JqZWN0IiwicmVkdWNlIiwicGF0aFVuZGVyQ29uc3RydWN0aW9uIiwicGF0aFBhcnQiLCJpZHgiLCJkZWxpbWl0ZXIiLCJ0ZW1wUGF0aCIsIm5hdlByb3BCaW5kaW5ncyIsIm5hdlByb3BCaW5kaW5nVG9DaGVjayIsIk9iamVjdCIsImtleXMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlcGxhY2UiLCJnZXRBY3Rpb25QYXJhbWV0ZXJJdGVtc01vZGVsUGF0aCIsIm9QYXJhbWV0ZXIiLCIkTmFtZSIsInNQYXRoUGFydCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsIm9JbnRlcm5hbE1vZGVsIiwiZm5CaW5kQ29udGV4dCIsImJpbmRDb250ZXh0IiwibVBhcmFtZXRlcnMiLCJvRXZlbnRzIiwiY29udGV4dEJpbmRpbmciLCJhcHBseSIsImZuR2V0Qm91bmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib0JvdW5kQ29udGV4dCIsInNldFByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidmFsdWUiLCJwcm9wZXJ0eVBhdGhTcGxpdCIsImkiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJ1aU1vZGVsIiwibGlicmFyeSIsImZuU2V0UHJvcGVydHkiLCJhc3luY1VwZGF0ZSIsIkVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNwbGF5IiwiZW5oYW5jZVZpZXdKU09OTW9kZWwiLCJ2aWV3TW9kZWwiLCJmbkdldE9iamVjdCIsIl9nZXRPYmplY3QiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJhRmlsdGVyRnVuY3Rpb25zIiwiaW5kZXhPZiIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIm9Nb2RlbCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwiY29udGV4dFBhdGgiLCJyb290RW50aXR5U2V0UGF0aCIsImFQYXRocyIsImdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZyIsIm9WaWV3Iiwidkxpc3RCaW5kaW5nIiwic01ldGFQYXRoIiwic3RhcnRzV2l0aCIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic1Jvb3RDb250ZXh0UGF0aCIsIm9CaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJzUm9vdEJpbmRpbmdQYXRoIiwic1JlbGF0aXZlUGF0aCIsImVudGl0eVNldCIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsImlzU3RpY2t5IiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImlzVXBkYXRlSGlkZGVuIiwiZW50aXR5VHlwZSIsImlzRW50aXR5U2V0IiwiVUkiLCJVcGRhdGVIaWRkZW4iLCJnZXREZWxldGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmciLCJsaXN0QmluZGluZyIsIm1ldGFtb2RlbCIsIm1ldGFQYXRoIiwicm9vdEJpbmRpbmciLCJyb290QmluZGluZ1BhdGgiLCJyZWxhdGl2ZVBhdGgiLCJlbmhhbmNlT0RhdGFNb2RlbCIsIm9kYXRhTW9kZWwiLCJ2aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkiLCJBcnJheSIsImZuTWVzc2FnZSIsInNldE1lc3NhZ2VzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJKU09OTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJCaW5kaW5nTW9kZSIsIk9uZVdheSIsImJhc2VTZXRQcm9wZXJ0eSIsImJhc2VHZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblR5cGUiLCJpc1RyYW5zaWVudCIsImNvbnRleHRPYmplY3QiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsImV4dGVybmFsSWRQcm9wZXJ0eSIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsIkV4dGVybmFsSUQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZ1bGxQYXRoIiwiX3JlZnJlc2hMb2NhbE1vZGVsIiwicmVmcmVzaCIsImV4dGVybmFsSWRQcm9wUGF0aCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRleHRQcm9wZXJ0eSIsIlRleHQiLCJ0ZXh0UHJvcFBhdGgiLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsInBhdGhGcm9tUm9vdCIsImNsZWFyQW5ub3RhdGlvblR5cGUiLCJhbm5vdGF0aW9uVHlwZXMiLCJkYXRhU2V0IiwiZW5kc1dpdGgiLCJfbG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsIm1lc3NhZ2VzIiwiY2xlYW5lZERhdGEiLCJnZXREYXRhIiwic2V0RGF0YSIsIm1lc3NhZ2VUYXJnZXQiLCJnZXRUeXBlIiwiZ2V0TWVzc2FnZSIsImZuQmluZFByb3BlcnR5IiwiYmluZFByb3BlcnR5IiwiYmluZCIsInBhcmFtZXRlcnMiLCJpbnRlcm5hbElkQmluZGluZyIsImV4dGVybmFsSWRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwicmVxdWVzdFZhbHVlIiwicHJvcEJpbmRpbmciLCJ1cGRhdGVSZXF1aXJlZCIsImV4cHJlc3Npb24iLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJnaG9zdENvbnRyb2wiLCJBbnkiLCJhbnkiLCJjb21waWxlRXhwcmVzc2lvbiIsImJpbmRCYWNrUHJvcGVydHkiLCJmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmciLCJkZXN0cm95IiwiZm5TZXRDb250ZXh0Iiwic2V0Q29udGV4dCIsIm5ld0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsInNldE1vZGVsIiwiZm5EZXN0cm95IiwidnBCaW5kaW5nIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsImNvbnZlcnRlckNvbnRleHQiLCJ0ZXh0IiwibWV0YU1vZGVsUGF0aCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInRvU3RyaW5nIiwiZSIsImluZm8iLCJnZXRNZXNzYWdlc1BhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiTWVzc2FnZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1vZGVsSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgdG8gcmV0cmlldmUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZWwgKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERyYWZ0Tm9kZSwgRHJhZnRSb290IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvblwiO1xuaW1wb3J0IHR5cGUgeyBEZWxldGVIaWRkZW4sIFVwZGF0ZUhpZGRlbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IEJpbmRpbmdNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ01vZGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0LCBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcIi4vQmluZGluZ1Rvb2xraXRcIjtcblxuY29uc3QgTW9kZWxIZWxwZXIgPSB7XG5cdC8vIGdsb2JhbCBzd2l0Y2ggdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBieSBhIHByaXZhdGUgbWFuaWZlc3QgZmxhZ1xuXHQvLyB0aGlzIGFsbG93cyBjdXN0b21lcnMgdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBpbiBjYXNlIHdlIHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSBmaXJzdCBkZWxpdmVyeVxuXHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdGRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQ6IGZhbHNlLFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCB0byBjaGVjayBmb3Igc3RpY2t5IGVuYWJsZWQgZW50aXR5XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRpdHlDb250YWluZXIgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGVudGl0eVNldE5hbWUgaW4gZW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eUNvbnRhaW5lcltlbnRpdHlTZXROYW1lXS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlTZXROYW1lfUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE9EYXRhTW9kZWxNZXRhTW9kZWwgb2YgdGhlIGNvbnRleHQgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocGF0aCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5jb250YWluc1RhcmdldCAmJlxuXHRcdFx0KChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGJJc0RyYWZ0Um9vdCB8fCBiSXNEcmFmdE5vZGUgfHwgKCFjdXJyZW50RW50aXR5U2V0ICYmIGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU9iamVjdCBNZXRhT2JqZWN0IHRvIGJlIHVzZWQgZm9yIGRldGVybWluYXRpb25cblx0ICogQHBhcmFtIHRlbXBsYXRlSW50ZXJmYWNlIEFQSSBwcm92aWRlZCBieSBVSTUgdGVtcGxhdGluZyBpZiB1c2VkXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZUludGVyZmFjZS5jb250ZXh0IENvbnRleHQgb2YgdGhlIHRlbXBsYXRlXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmljZSBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFPYmplY3Q6IHVua25vd24sIHRlbXBsYXRlSW50ZXJmYWNlPzogeyBjb250ZXh0OiBDb250ZXh0IH0pOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0ZW1wbGF0ZUludGVyZmFjZT8uY29udGV4dD8uZ2V0TW9kZWwoKSB8fCBtZXRhT2JqZWN0KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0XHRmb3IgKGNvbnN0IHNFbnRpdHlTZXQgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0VudGl0eUNvbnRhaW5lcltzRW50aXR5U2V0XS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L1NoYXJlQWN0aW9uYClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBEcmFmdFJvb3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPZGF0YU1vZGVsIGNvbnRleHRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZHJhZnRSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRyYWZ0Um9vdCBpcyBmb3VuZFxuXHQgKi9cblx0Z2V0RHJhZnRSb290UGF0aDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBnZXRSb290UGF0aCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgZmlyc3RJdGVyYXRpb24gPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IHNJdGVyYXRpb25QYXRoID0gZmlyc3RJdGVyYXRpb24gPyBzUGF0aCA6IG5ldyBSZWdFeHAoLy4qKD89XFwvKS8pLmV4ZWMoc1BhdGgpPy5bMF07IC8vICpSZWdleCB0byBnZXQgdGhlIGFuY2VzdG9yXG5cdFx0XHRpZiAoc0l0ZXJhdGlvblBhdGggJiYgc0l0ZXJhdGlvblBhdGggIT09IFwiL1wiKSB7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzSXRlcmF0aW9uUGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1EYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRpZiAoKG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNJdGVyYXRpb25QYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBnZXRSb290UGF0aChzSXRlcmF0aW9uUGF0aCwgbW9kZWwsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgob0NvbnRleHQuZ2V0UGF0aCgpLCBvQ29udGV4dC5nZXRNb2RlbCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgcGF0aCBvZiB0aGUgU3RpY2t5Um9vdCBwYXRoIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IE9kYXRhTW9kZWwgY29udGV4dFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBTdGlja3lSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIFN0aWNreVJvb3QgaXMgZm91bmRcblx0ICovXG5cdGdldFN0aWNreVJvb3RQYXRoOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGdldFJvb3RQYXRoID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBmaXJzdEl0ZXJhdGlvbiA9IHRydWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0Y29uc3Qgc0l0ZXJhdGlvblBhdGggPSBmaXJzdEl0ZXJhdGlvbiA/IHNQYXRoIDogbmV3IFJlZ0V4cCgvLiooPz1cXC8pLykuZXhlYyhzUGF0aCk/LlswXTsgLy8gKlJlZ2V4IHRvIGdldCB0aGUgYW5jZXN0b3Jcblx0XHRcdGlmIChzSXRlcmF0aW9uUGF0aCAmJiBzSXRlcmF0aW9uUGF0aCAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNJdGVyYXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdGlmICgobURhdGFNb2RlbC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc0l0ZXJhdGlvblBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdldFJvb3RQYXRoKHNJdGVyYXRpb25QYXRoLCBtb2RlbCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdHJldHVybiBnZXRSb290UGF0aChvQ29udGV4dC5nZXRQYXRoKCksIG9Db250ZXh0LmdldE1vZGVsKCkpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgdmlhIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aWxsIGJlIGRldGVybWluZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXRcblx0ICovXG5cdGdldFRhcmdldEVudGl0eVNldDogZnVuY3Rpb24gKG9Db250ZXh0OiBCYXNlQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkFjdGlvblwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIwLyRraW5kXCIpID09PSBcIkFjdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzUGF0aCk7XG5cdFx0cmV0dXJuIGAvJHtvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpfWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldCB2aWEgdXNpbmcgbmF2aWdhdGlvbiBwcm9wZXJ0eSBiaW5kaW5nLiBOb3RlOiBUbyBiZSB1c2VkIG9ubHkgYWZ0ZXIgdGhlIG1ldGFtb2RlbCBoYXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBjb21wbGV0ZSBlbnRpdHlTZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGZyb20gZW50aXR5VHlwZSBwYXRoXG5cdCAqIEBwYXJhbSBvZGF0YU1ldGFNb2RlbCBNZXRhbW9kZWwgdG8gYmUgdXNlZC4oT3B0aW9uYWwgaW4gbm9ybWFsIHNjZW5hcmlvcywgYnV0IG5lZWRlZCBmb3IgcGFyYW1ldGVyaXplZCBzZXJ2aWNlIHNjZW5hcmlvcylcblx0ICogQHJldHVybnMgUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRFbnRpdHlTZXRQYXRoOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBvZGF0YU1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgZW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKCFvZGF0YU1ldGFNb2RlbCkge1xuXHRcdFx0Ly8gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIGdldHRpbmcgZW50aXR5U2V0UGF0aCBmcm9tIGVudGl0eVR5cGVQYXRoXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZykuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIil9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsY3VsYXRpbmcgdGhlIGVudGl0eVNldFBhdGggZnJvbSBNZXRhTW9kZWwuXG5cdFx0XHRjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGluaXRpYWxQYXRoT2JqZWN0ID0ge1xuXHRcdFx0XHRcdGdyb3dpbmdQYXRoOiBcIi9cIixcblx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmc6IFwiXCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBwYXRoT2JqZWN0ID0gcGF0aFBhcnRzLnJlZHVjZShcblx0XHRcdFx0XHQocGF0aFVuZGVyQ29uc3RydWN0aW9uOiB7IGdyb3dpbmdQYXRoOiBzdHJpbmc7IHBlbmRpbmdOYXZQcm9wQmluZGluZzogc3RyaW5nIH0sIHBhdGhQYXJ0OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSAoISFpZHggJiYgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHRsZXQgeyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH0gPSBwYXRoVW5kZXJDb25zdHJ1Y3Rpb247XG5cdFx0XHRcdFx0XHRjb25zdCB0ZW1wUGF0aCA9IGdyb3dpbmdQYXRoICsgZGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdzID0gb2RhdGFNZXRhTW9kZWwuZ2V0T2JqZWN0KHRlbXBQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG5hdlByb3BCaW5kaW5nVG9DaGVjayA9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAke3BlbmRpbmdOYXZQcm9wQmluZGluZ30vJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG5hdlByb3BCaW5kaW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhuYXZQcm9wQmluZGluZ3MpLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0bmF2UHJvcEJpbmRpbmdzLmhhc093blByb3BlcnR5KG5hdlByb3BCaW5kaW5nVG9DaGVjaylcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRncm93aW5nUGF0aCA9IHRlbXBQYXRoICsgbmF2UHJvcEJpbmRpbmdUb0NoZWNrLnJlcGxhY2UoXCIvXCIsIFwiJTJGXCIpO1xuXHRcdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cGVuZGluZ05hdlByb3BCaW5kaW5nICs9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAvJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbml0aWFsUGF0aE9iamVjdFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGVudGl0eVNldFBhdGggPSBwYXRoT2JqZWN0Lmdyb3dpbmdQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHtwYXRoUGFydHNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW50aXR5U2V0UGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlciBBY3Rpb24gUGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbXBsZXRlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVyc1xuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBNZXRhTW9kZWxBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBvUGFyYW1ldGVyICYmIG9QYXJhbWV0ZXIuJE5hbWUgPyBge3BhdGg6ICdtdmZ2aWV3Pi8ke29QYXJhbWV0ZXIuJE5hbWV9J31gIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGZpbHRlck91dE5hdlByb3BCaW5kaW5nOiBmdW5jdGlvbiAoc1BhdGhQYXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1BhdGhQYXJ0ICE9PSBcIlwiICYmIHNQYXRoUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc2V0UHJvcGVydHkgdG8gdGhlIGNyZWF0ZWQgYmluZGluZyBjb250ZXh0cyBvZiB0aGUgaW50ZXJuYWwgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbiAob0ludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuQmluZENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCA9IGZ1bmN0aW9uIChcblx0XHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRcdG1QYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0XHRvRXZlbnRzOiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHQpOiBDb250ZXh0QmluZGluZyB7XG5cdFx0XHRjb25zdCBjb250ZXh0QmluZGluZyA9IGZuQmluZENvbnRleHQuYXBwbHkodGhpcywgW3NQYXRoLCBjb250ZXh0LCBtUGFyYW1ldGVycywgb0V2ZW50c10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBjb250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdGNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uICgpOiBCYXNlQ29udGV4dCB8IG51bGwge1xuXHRcdFx0XHRjb25zdCBvQm91bmRDb250ZXh0ID0gZm5HZXRCb3VuZENvbnRleHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdGlmIChvQm91bmRDb250ZXh0KSB7XG5cdFx0XHRcdFx0b0JvdW5kQ29udGV4dC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdC8vIGxldCdzIGVuc3VyZSB0aGF0IHN1YiBvYmplY3RzIGFyZSBpbml0aWFsaXplZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eVBhdGhTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0T2JqZWN0KHByb3BlcnR5UGF0aFNwbGl0W2ldKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eSh0aGlzLmdldFBhdGgocHJvcGVydHlQYXRoU3BsaXRbaV0pLCB7fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgsIHZhbHVlLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvQm91bmRDb250ZXh0O1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBjb250ZXh0QmluZGluZztcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGhhbmRsZXIgb24gcHJvcGVydHlDaGFuZ2UuXG5cdCAqIFRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiIGlzIGNoYW5nZWQgYWNjb3JkaW5nIHRvIHByb3BlcnR5ICcvaXNFZGl0YWJsZScgd2hlbiB0aGlzIGxhc3Qgb25lIGlzIHNldFxuXHQgKiBpbiBvcmRlciB0byBiZSBjb21wbGlhbnQgd2l0aCBmb3JtZXIgdmVyc2lvbnMgd2hlcmUgYnVpbGRpbmcgYmxvY2tzIHVzZSB0aGUgcHJvcGVydHkgXCIvZWRpdE1vZGVcIlxuXHQgKlxuXHQgKiBAcGFyYW0gdWlNb2RlbCBKU09OIE1vZGVsIHdoaWNoIGlzIGVuaGFuY2VkXG5cdCAqIEBwYXJhbSBsaWJyYXJ5IENvcmUgbGlicmFyeSBvZiBTQVAgRmlvcmkgZWxlbWVudHNcblx0ICovXG5cblx0ZW5oYW5jZVVpSlNPTk1vZGVsOiBmdW5jdGlvbiAodWlNb2RlbDogSlNPTk1vZGVsLCBsaWJyYXJ5OiB7IEVkaXRNb2RlOiB7IEVkaXRhYmxlOiBzdHJpbmc7IERpc3BsYXk6IHN0cmluZyB9IH0pOiB2b2lkIHtcblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdWlNb2RlbC5zZXRQcm9wZXJ0eTtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRcdFx0cGF0aDogc3RyaW5nLFxuXHRcdFx0dmFsdWU6IHVua25vd24sXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRcdGFzeW5jVXBkYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAocGF0aCA9PT0gXCIvaXNFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvZWRpdE1vZGVcIiwgdmFsdWUgPyBsaWJyYXJ5LkVkaXRNb2RlLkVkaXRhYmxlIDogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LCBjb250ZXh0LCBhc3luY1VwZGF0ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlXSk7XG5cdFx0fTtcblx0fSxcblxuXHRlbmhhbmNlVmlld0pTT05Nb2RlbDogZnVuY3Rpb24gKHZpZXdNb2RlbDogSlNPTk1vZGVsICYgeyBfZ2V0T2JqZWN0OiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgZm5HZXRPYmplY3QgPSB2aWV3TW9kZWwuX2dldE9iamVjdDtcblx0XHR2aWV3TW9kZWwuX2dldE9iamVjdCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBvQ29udGV4dD86IENvbnRleHQpOiB1bmtub3duIHtcblx0XHRcdGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRcdHNQYXRoID0gXCIvXCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5HZXRPYmplY3QuYXBwbHkodGhpcywgW3NQYXRoLCBvQ29udGV4dF0pO1xuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGluc3RhbmNlIG9mIHRoZSBtZXRhIG1vZGVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG5cdCAqL1xuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHVuZGVmaW5lZCB8IGJvb2xlYW4ge1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgYUZpbHRlckZ1bmN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL0BPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiKTtcblx0XHQvLyBHZXQgZmlsdGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IEVudGl0eUNvbnRhaW5lciBhbmQgY2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiAndG9sb3dlcidcblx0XHRyZXR1cm4gYUZpbHRlckZ1bmN0aW9ucyA/IGFGaWx0ZXJGdW5jdGlvbnMuaW5kZXhPZihcInRvbG93ZXJcIikgPT09IC0xIDogdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtZXRhcGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqL1xuXHRnZXRNZXRhUGF0aEZvckNvbnRleHQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbCAmJiBzUGF0aCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIE1ldGFQYXRoIHRvIGJlIHVzZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcm9vdCBlbnRpdHkgc2V0IHBhdGguXG5cdCAqL1xuXHRnZXRSb290RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCByb290RW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgYVBhdGhzID0gY29udGV4dFBhdGggPyBjb250ZXh0UGF0aC5zcGxpdChcIi9cIikgOiBbXTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJvb3RFbnRpdHlTZXRQYXRoID0gYVBhdGhzWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gcm9vdEVudGl0eVNldFBhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBsaXN0QmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3IFZpZXcgb2YgdGhlIGNvbnRyb2wgdXNpbmcgbGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHZMaXN0QmluZGluZyBPRGF0YUxpc3RCaW5kaW5nIG9iamVjdCBvciB0aGUgYmluZGluZyBwYXRoIGZvciBhIHRlbXBvcmFyeSBsaXN0IGJpbmRpbmdcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBsaXN0YmluZGluZy5cblx0ICovXG5cdGdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZzogZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcsIHZMaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblxuXHRcdGlmICh0eXBlb2Ygdkxpc3RCaW5kaW5nID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodkxpc3RCaW5kaW5nLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdC8vIGFic29sdXRlIHBhdGhcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aCh2TGlzdEJpbmRpbmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBzUm9vdENvbnRleHRQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChgJHtzUm9vdENvbnRleHRQYXRofS8ke3ZMaXN0QmluZGluZ31gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgYWxyZWFkeSBnZXQgYSBsaXN0IGJpbmRpbmcgdXNlIHRoaXMgb25lXG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHZMaXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9CaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRpZiAob0JpbmRpbmcgPT09IG9Sb290QmluZGluZykge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0JpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1Jvb3RCaW5kaW5nUGF0aCA9IG9Sb290QmluZGluZyEuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzUmVsYXRpdmVQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNNZXRhUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgcm9vdFxuXHQgKi9cblx0aXNEcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdFJvb3QoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgbm9kZS5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlXG5cdCAqL1xuXHRpc0RyYWZ0Tm9kZTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldERyYWZ0Tm9kZShlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBzdGlja3kgc2Vzc2lvbiByb290LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHN0aWNreSBzZXNzaW9uIHJvb3Rcblx0ICovXG5cdGlzU3RpY2t5OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBlbnRpdHkgaXMgdXBkYXRhYmxlIG9yIG5vdC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHVwZGF0YWJsZSBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc1VwZGF0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuID8/IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW47XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgQENvbW1vbi5EcmFmdFJvb3QgYW5ub3RhdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gRW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBEcmFmdFJvb3Rcblx0ICovXG5cdGdldERyYWZ0Um9vdDogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IERyYWZ0Um9vdCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnROb2RlIGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdE5vZGU6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBEcmFmdE5vZGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgU2Vzc2lvbiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdCAqL1xuXHRnZXRTdGlja3lTZXNzaW9uOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmtub3duIHwgdW5kZWZpbmVkKTogU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBkZWxldGUgYnV0dG9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgZGVsZXRlIGJ1dHRvbiBpcyBoaWRkZW5cblx0ICovXG5cdGdldERlbGV0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuID8/IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbjtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIG1ldGFwYXRoIGZvciB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgTGlzdEJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIE1ldGFQYXRoXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG1ldGFQYXRoO1xuXHRcdGNvbnN0IHJvb3RCaW5kaW5nID0gbGlzdEJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRpZiAobGlzdEJpbmRpbmcgPT09IHJvb3RCaW5kaW5nKSB7XG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChsaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByb290QmluZGluZ1BhdGggPSByb290QmluZGluZz8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gbGlzdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0bWV0YVBhdGggPSBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoYCR7cm9vdEJpbmRpbmdQYXRofS8ke3JlbGF0aXZlUGF0aH1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1ldGFQYXRoO1xuXHR9LFxuXG5cdGVuaGFuY2VPRGF0YU1vZGVsKG9kYXRhTW9kZWw6IE9EYXRhTW9kZWwpOiB2b2lkIHtcblx0XHRvZGF0YU1vZGVsLnZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeSA9IG5ldyBBcnJheTxPRGF0YVByb3BlcnR5QmluZGluZz4oKTtcblx0XHRjb25zdCBmbk1lc3NhZ2UgPSBvZGF0YU1vZGVsLnNldE1lc3NhZ2VzO1xuXHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVdheSk7XG5cdFx0Y29uc3QgYmFzZVNldFByb3BlcnR5ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHk7XG5cdFx0Y29uc3QgYmFzZUdldFByb3BlcnR5ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0UHJvcGVydHk7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCwgY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB1bmtub3duIHtcblx0XHRcdGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGFubm90YXRpb25UeXBlXSA9IHBhdGguc3BsaXQoXCJAJHVpNS5mZS5cIik7XG5cblx0XHRcdGlmIChjb250ZXh0ICYmIGNvbnRleHQuaXNUcmFuc2llbnQoKSAhPT0gdHJ1ZSAmJiBhbm5vdGF0aW9uVHlwZSA9PT0gXCJAQ29tbW9uL0V4dGVybmFsSURcIikge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0T2JqZWN0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0aWYgKGNvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRjb25zdCBtZXRhUGF0aCA9IG5ldyBNZXRhUGF0aDxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRcdFx0Y29udmVydFR5cGVzKG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSksXG5cdFx0XHRcdFx0XHRvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihwcm9wZXJ0eU5hbWUpLmdldFRhcmdldCgpLmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0XHRcdFx0Py5FeHRlcm5hbElEO1xuXHRcdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihleHRlcm5hbElkUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRPYmplY3QoZXh0ZXJuYWxJZFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRPYmplY3QocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjb250ZXh0ICYmIGFubm90YXRpb25UeXBlID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYmFzZUdldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCBjb250ZXh0XSk7XG5cdFx0fTtcblxuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgsIHZhbHVlLCBjb250ZXh0LCBhc3luY1VwZGF0ZSk6IGJvb2xlYW4ge1xuXHRcdFx0bGV0IGZ1bGxQYXRoID0gcGF0aDtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGZ1bGxQYXRoID0gY29udGV4dC5nZXRQYXRoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgX3JlZnJlc2hMb2NhbE1vZGVsID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBbcHJvcGVydHlOYW1lLCBhbm5vdGF0aW9uVHlwZV0gPSBwYXRoLnNwbGl0KFwiQCR1aTUuZmUuXCIpO1xuXHRcdFx0aWYgKGNvbnRleHQgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiQENvbW1vbi9FeHRlcm5hbElEXCIpIHtcblx0XHRcdFx0Y29udGV4dC5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcblx0XHRcdFx0Ly8gcmVmcmVzaGluZyBFeHRlcm5hbElEIGFuZCB0ZXh0IHByb3BlcnRpZXMgKHBhdGhzIG5lZWQgdG8gYmUgZGV0ZXJtaW5lZCBnZW5lcmljYWxseSlcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdFx0XHRjb252ZXJ0VHlwZXMob2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihwcm9wZXJ0eU5hbWUpLmdldFRhcmdldCgpLmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRDtcblx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4dGVybmFsSWRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcFBhdGggPSBleHRlcm5hbElkUHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gW2V4dGVybmFsSWRQcm9wUGF0aC5zdWJzdHJpbmcoMCwgZXh0ZXJuYWxJZFByb3BQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSldO1xuXHRcdFx0XHRcdGNvbnN0IHRleHRQcm9wZXJ0eSA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZFByb3BQYXRoKS5nZXRUYXJnZXQoKS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRleHRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRleHRQcm9wUGF0aCA9IHRleHRQcm9wZXJ0eS5wYXRoO1xuXHRcdFx0XHRcdFx0aWYgKHRleHRQcm9wUGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllc1RvUmVxdWVzdC5wdXNoKHRleHRQcm9wUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdChjb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhwcm9wZXJ0aWVzVG9SZXF1ZXN0KVxuXHRcdFx0XHRcdFx0LnRoZW4oX3JlZnJlc2hMb2NhbE1vZGVsKVxuXHRcdFx0XHRcdFx0LmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gZnVsbFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRsZXQgcGF0aEZyb21Sb290ID0gXCJcIjtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydHlQYXRoU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdHBhdGhGcm9tUm9vdCArPSBcIi9cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXRoRnJvbVJvb3QgKz0gcHJvcGVydHlQYXRoU3BsaXRbaV07XG5cdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdChwYXRoRnJvbVJvb3QpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShwYXRoRnJvbVJvb3QsIHt9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGJhc2VTZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlXSk7XG5cdFx0fTtcblx0XHRmdW5jdGlvbiBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlczogc3RyaW5nW10sIGRhdGFTZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogb2JqZWN0IHtcblx0XHRcdGZvciAoY29uc3QgY29udGV4dFBhdGggaW4gZGF0YVNldCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFTZXRbY29udGV4dFBhdGhdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0ZGF0YVNldFtjb250ZXh0UGF0aF0gPSBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlcywgZGF0YVNldFtjb250ZXh0UGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhkYXRhU2V0W2NvbnRleHRQYXRoXSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFTZXRbY29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGFubm90YXRpb25UeXBlIG9mIGFubm90YXRpb25UeXBlcykge1xuXHRcdFx0XHRcdGlmIChjb250ZXh0UGF0aC5lbmRzV2l0aChhbm5vdGF0aW9uVHlwZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhU2V0W2NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhU2V0O1xuXHRcdH1cblx0XHRvZGF0YU1vZGVsLl9sb2NhbEFubm90YXRpb25Nb2RlbCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsO1xuXHRcdG9kYXRhTW9kZWwuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBmdW5jdGlvbiAoKTogSlNPTk1vZGVsIHtcblx0XHRcdHJldHVybiB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbDtcblx0XHR9O1xuXHRcdG9kYXRhTW9kZWwuc2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAobWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VbXT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNsZWFuZWREYXRhID0gY2xlYXJBbm5vdGF0aW9uVHlwZShbXCJAJHVpNS5mZS5tZXNzYWdlVHlwZVwiLCBcIkAkdWk1LmZlLm1lc3NhZ2VUZXh0XCJdLCB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5nZXREYXRhKCkpO1xuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGF0YShjbGVhbmVkRGF0YSk7XG5cdFx0XHRmb3IgKGNvbnN0IG1lc3NhZ2VUYXJnZXQgaW4gbWVzc2FnZXMpIHtcblx0XHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7bWVzc2FnZVRhcmdldH1AJHVpNS5mZS5tZXNzYWdlVHlwZWAsIG1lc3NhZ2VzW21lc3NhZ2VUYXJnZXRdWzBdLmdldFR5cGUoKSk7XG5cdFx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGAke21lc3NhZ2VUYXJnZXR9QCR1aTUuZmUubWVzc2FnZVRleHRgLCBtZXNzYWdlc1ttZXNzYWdlVGFyZ2V0XVswXS5nZXRNZXNzYWdlKCkpO1xuXHRcdFx0fVxuXHRcdFx0Zm5NZXNzYWdlLmFwcGx5KHRoaXMsIFttZXNzYWdlc10pO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5CaW5kUHJvcGVydHkgPSBvZGF0YU1vZGVsLmJpbmRQcm9wZXJ0eS5iaW5kKG9kYXRhTW9kZWwpO1xuXHRcdG9kYXRhTW9kZWwuYmluZFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgY29udGV4dDogT0RhdGFWNENvbnRleHQsIHBhcmFtZXRlcnMpOiBPRGF0YVByb3BlcnR5QmluZGluZyB7XG5cdFx0XHRpZiAocGF0aC5lbmRzV2l0aChcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiKSAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsSWRCaW5kaW5nID0gZm5CaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCk7XG5cdFx0XHRcdG9kYXRhTW9kZWwudmlydHVhbFByb3BlcnR5QmluZGluZ1JlZ2lzdHJ5LnB1c2goaW50ZXJuYWxJZEJpbmRpbmcpO1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkQmluZGluZyA9IHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nO1xuXG5cdFx0XHRcdGludGVybmFsSWRCaW5kaW5nLmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxJZEJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxJZEJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFZhbHVlKClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRleHRlcm5hbElkQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZXh0ZXJuYWxJZEJpbmRpbmc7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkAkdWk1LmZlLlwiKSkge1xuXHRcdFx0XHRjb25zdCBwcm9wQmluZGluZyA9IHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyBPRGF0YVByb3BlcnR5QmluZGluZyAmIHtcblx0XHRcdFx0XHRzZXRDb250ZXh0PzogRnVuY3Rpb247XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwYXRoLmVuZHNXaXRoKFwiQCR1aTUuZmUuQENvbW1vbi9FeHRlcm5hbElEXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BCaW5kaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BCaW5kaW5nLnVwZGF0ZVJlcXVpcmVkID0gZnVuY3Rpb24gKG1vZGVsOiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kZWwgJiYgbW9kZWwgPT09IG9kYXRhTW9kZWw7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwYXRoLmluY2x1ZGVzKFwiQCR1aTUuZmUudmlydHVhbC5cIikpIHtcblx0XHRcdFx0XHRjb25zdCBleHByZXNzaW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldFZpcnR1YWxCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKHRoaXMuZ2V0TWV0YU1vZGVsKCkpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCBnaG9zdENvbnRyb2wgPSBuZXcgQW55KHsgYW55OiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKSwgYmluZEJhY2tQcm9wZXJ0eTogcGF0aCB9KTtcblx0XHRcdFx0XHRjb25zdCBmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmcgPSBwcm9wQmluZGluZy5kZXN0cm95LmJpbmQocHJvcEJpbmRpbmcpO1xuXHRcdFx0XHRcdHByb3BCaW5kaW5nLmRlc3Ryb3kgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRnaG9zdENvbnRyb2w/LmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHJldHVybiBmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmcoKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuU2V0Q29udGV4dCA9IHByb3BCaW5kaW5nLnNldENvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKGZuU2V0Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0cHJvcEJpbmRpbmcuc2V0Q29udGV4dCA9IChuZXdDb250ZXh0OiBDb250ZXh0KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q29udHJvbD8uc2V0QmluZGluZ0NvbnRleHQobmV3Q29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmblNldENvbnRleHQuYmluZChwcm9wQmluZGluZykobmV3Q29udGV4dCk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGdob3N0Q29udHJvbC5zZXRNb2RlbCh0aGlzKTtcblx0XHRcdFx0XHRnaG9zdENvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByb3BCaW5kaW5nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuQmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5EZXN0cm95ID0gb2RhdGFNb2RlbC5kZXN0cm95LmJpbmQob2RhdGFNb2RlbCk7XG5cdFx0b2RhdGFNb2RlbC5kZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0Zm9yIChjb25zdCB2cEJpbmRpbmcgb2Ygb2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkpIHtcblx0XHRcdFx0dnBCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiBmbkRlc3Ryb3kuYXBwbHkodGhpcyk7XG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgYSBtZXRhZGF0YSBiaW5kaW5nIHRvIGl0cyB0ZXh0LCBlaXRoZXIgdXNpbmcgdGhlIGNvbnZlcnRlckNvbnRleHQgb3IgdGhlIG1ldGFNb2RlbCBkaXJlY3RseS5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdGV4dCBpZiBwb3NzaWJsZSwgZWxzZSB0aGUgaW5wdXQgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBwYXRoIHdhcyB1bmRlZmluZWRcblx0ICovXG5cdGZldGNoVGV4dEZyb21NZXRhTW9kZWwocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDx1bmtub3duPiwgbWV0YU1vZGVsPzogTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgdGV4dCA9IHBhdGggIT09IHVuZGVmaW5lZCA/IHBhdGggOiBcIlwiO1xuXHRcdGlmIChwYXRoPy5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbFBhdGggPSBwYXRoLnN1YnN0cmluZygxMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obWV0YU1vZGVsUGF0aCkuYW5ub3RhdGlvbj8udG9TdHJpbmcoKSA/PyBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRleHQgPSBtZXRhTW9kZWw/LmdldE9iamVjdChtZXRhTW9kZWxQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIHRleHQgZnJvbSBtZXRhIG1vZGVsIHVzaW5nIHBhdGggJHttZXRhTW9kZWxQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gc3RhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCBmb3IgdGhlIGNvbnRleHQgb24gd2hpY2ggd2Ugd2hhdCB0byByZXRyZWl2ZSB0aGUgbWVzc2FnZSBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGgsIG9yIHVuZGVmaW5lZCBpZiBubyBNZXNzYWdlcyBhbm5vdGF0aW9uIGlzIGRlZmluZWRcblx0ICovXG5cdGdldE1lc3NhZ2VzUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uTWVzc2FnZXM7XG5cdFx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLnBhdGggOiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0ID0geyBnZXRNb2RlbCgpOiBKU09OTW9kZWwgfSAmIEJhc2VDb250ZXh0ICYge1xuXHRcdHNldFByb3BlcnR5KHNQYXRoOiBzdHJpbmcsIHZWYWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cdH07XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGVsSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBNkJBLE1BQU1BLFdBQVcsR0FBRztJQUNuQjtJQUNBO0lBQ0E7SUFDQUMseUJBQXlCLEVBQUUsS0FBSztJQUVoQztBQUNEO0FBQ0E7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
657
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNb2RlbEhlbHBlciIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtZXRhTW9kZWwiLCJlbnRpdHlDb250YWluZXIiLCJnZXRPYmplY3QiLCJlbnRpdHlTZXROYW1lIiwiJGtpbmQiLCJpc0RyYWZ0U3VwcG9ydGVkIiwicGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJvYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiY3VycmVudEVudGl0eVNldCIsInRhcmdldEVudGl0eVNldCIsImJJc0RyYWZ0Um9vdCIsImlzRHJhZnRSb290IiwiYklzRHJhZnROb2RlIiwiaXNEcmFmdE5vZGUiLCJiSXNEcmFmdFBhcmVudEVudGl0eUZvckNvbnRhaW5tZW50IiwiaXNOYXZpZ2F0aW9uUHJvcGVydHkiLCJ0YXJnZXRPYmplY3QiLCJjb250YWluc1RhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJEcmFmdE5vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIm1ldGFPYmplY3QiLCJ0ZW1wbGF0ZUludGVyZmFjZSIsIm9NZXRhTW9kZWwiLCJjb250ZXh0IiwiZ2V0TW9kZWwiLCJvRW50aXR5Q29udGFpbmVyIiwic0VudGl0eVNldCIsImdldERyYWZ0Um9vdFBhdGgiLCJvQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldFJvb3RQYXRoIiwic1BhdGgiLCJtb2RlbCIsImZpcnN0SXRlcmF0aW9uIiwic0l0ZXJhdGlvblBhdGgiLCJSZWdFeHAiLCJleGVjIiwic0VudGl0eVBhdGgiLCJnZXRNZXRhUGF0aCIsIm1EYXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJnZXRUYXJnZXRFbnRpdHlTZXQiLCJzRW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJvZGF0YU1ldGFNb2RlbCIsImVudGl0eVNldFBhdGgiLCJzcGxpdCIsImZpbHRlciIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiam9pbiIsInBhdGhQYXJ0cyIsImxlbmd0aCIsImluaXRpYWxQYXRoT2JqZWN0IiwiZ3Jvd2luZ1BhdGgiLCJwZW5kaW5nTmF2UHJvcEJpbmRpbmciLCJwYXRoT2JqZWN0IiwicmVkdWNlIiwicGF0aFVuZGVyQ29uc3RydWN0aW9uIiwicGF0aFBhcnQiLCJpZHgiLCJkZWxpbWl0ZXIiLCJ0ZW1wUGF0aCIsIm5hdlByb3BCaW5kaW5ncyIsIm5hdlByb3BCaW5kaW5nVG9DaGVjayIsIk9iamVjdCIsImtleXMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlcGxhY2UiLCJnZXRBY3Rpb25QYXJhbWV0ZXJJdGVtc01vZGVsUGF0aCIsIm9QYXJhbWV0ZXIiLCIkTmFtZSIsInNQYXRoUGFydCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsIm9JbnRlcm5hbE1vZGVsIiwiZm5CaW5kQ29udGV4dCIsImJpbmRDb250ZXh0IiwibVBhcmFtZXRlcnMiLCJvRXZlbnRzIiwiY29udGV4dEJpbmRpbmciLCJhcHBseSIsImZuR2V0Qm91bmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib0JvdW5kQ29udGV4dCIsInNldFByb3BlcnR5IiwicHJvcGVydHlQYXRoIiwidmFsdWUiLCJwcm9wZXJ0eVBhdGhTcGxpdCIsImkiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJ1aU1vZGVsIiwibGlicmFyeSIsImZuU2V0UHJvcGVydHkiLCJhc3luY1VwZGF0ZSIsIkVkaXRNb2RlIiwiRWRpdGFibGUiLCJEaXNwbGF5IiwiZW5oYW5jZVZpZXdKU09OTW9kZWwiLCJ2aWV3TW9kZWwiLCJmbkdldE9iamVjdCIsIl9nZXRPYmplY3QiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJhRmlsdGVyRnVuY3Rpb25zIiwiaW5kZXhPZiIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIm9Nb2RlbCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwiY29udGV4dFBhdGgiLCJyb290RW50aXR5U2V0UGF0aCIsImFQYXRocyIsImdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZyIsIm9WaWV3Iiwidkxpc3RCaW5kaW5nIiwic01ldGFQYXRoIiwic3RhcnRzV2l0aCIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic1Jvb3RDb250ZXh0UGF0aCIsIm9CaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJzUm9vdEJpbmRpbmdQYXRoIiwic1JlbGF0aXZlUGF0aCIsImVudGl0eVNldCIsImdldERyYWZ0Um9vdCIsImdldERyYWZ0Tm9kZSIsImlzU3RpY2t5IiwiZ2V0U3RpY2t5U2Vzc2lvbiIsImlzVXBkYXRlSGlkZGVuIiwiZW50aXR5VHlwZSIsImlzRW50aXR5U2V0IiwiVUkiLCJVcGRhdGVIaWRkZW4iLCJnZXREZWxldGVIaWRkZW4iLCJEZWxldGVIaWRkZW4iLCJnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmciLCJsaXN0QmluZGluZyIsIm1ldGFtb2RlbCIsIm1ldGFQYXRoIiwicm9vdEJpbmRpbmciLCJyb290QmluZGluZ1BhdGgiLCJyZWxhdGl2ZVBhdGgiLCJlbmhhbmNlT0RhdGFNb2RlbCIsIm9kYXRhTW9kZWwiLCJ2aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkiLCJBcnJheSIsImZuTWVzc2FnZSIsInNldE1lc3NhZ2VzIiwibG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJKU09OTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJCaW5kaW5nTW9kZSIsIk9uZVdheSIsImJhc2VTZXRQcm9wZXJ0eSIsImJhc2VHZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiYW5ub3RhdGlvblR5cGUiLCJpc1RyYW5zaWVudCIsImNvbnRleHRPYmplY3QiLCJNZXRhUGF0aCIsImNvbnZlcnRUeXBlcyIsImV4dGVybmFsSWRQcm9wZXJ0eSIsImdldE1ldGFQYXRoRm9yUGF0aCIsImdldFRhcmdldCIsIkV4dGVybmFsSUQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsImZ1bGxQYXRoIiwiX3JlZnJlc2hMb2NhbE1vZGVsIiwicmVmcmVzaCIsImV4dGVybmFsSWRQcm9wUGF0aCIsInByb3BlcnRpZXNUb1JlcXVlc3QiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInRleHRQcm9wZXJ0eSIsIlRleHQiLCJ0ZXh0UHJvcFBhdGgiLCJpbmNsdWRlcyIsInB1c2giLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJ0aGVuIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsInBhdGhGcm9tUm9vdCIsImNsZWFyQW5ub3RhdGlvblR5cGUiLCJhbm5vdGF0aW9uVHlwZXMiLCJkYXRhU2V0IiwiZW5kc1dpdGgiLCJfbG9jYWxBbm5vdGF0aW9uTW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsIm1lc3NhZ2VzIiwiY2xlYW5lZERhdGEiLCJnZXREYXRhIiwic2V0RGF0YSIsIm1lc3NhZ2VUYXJnZXQiLCJnZXRUeXBlIiwiZ2V0TWVzc2FnZSIsImZuQmluZFByb3BlcnR5IiwiYmluZFByb3BlcnR5IiwiYmluZCIsInBhcmFtZXRlcnMiLCJpbnRlcm5hbElkQmluZGluZyIsImV4dGVybmFsSWRCaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwicmVxdWVzdFZhbHVlIiwicHJvcEJpbmRpbmciLCJ1cGRhdGVSZXF1aXJlZCIsImV4cHJlc3Npb24iLCJnZXRWaXJ0dWFsQmluZGluZ0V4cHJlc3Npb24iLCJnaG9zdENvbnRyb2wiLCJBbnkiLCJhbnkiLCJjb21waWxlRXhwcmVzc2lvbiIsImJpbmRCYWNrUHJvcGVydHkiLCJmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmciLCJkZXN0cm95IiwiZm5TZXRDb250ZXh0Iiwic2V0Q29udGV4dCIsIm5ld0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsInNldE1vZGVsIiwiZ2hvc3RCaW5kaW5nIiwiZ2V0QmluZGluZ0luZm8iLCJiaW5kaW5nIiwiZm5DaGVja1VwZGF0ZSIsImNoZWNrVXBkYXRlIiwiZm5EZXN0cm95IiwidnBCaW5kaW5nIiwiZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbCIsImNvbnZlcnRlckNvbnRleHQiLCJ0ZXh0IiwibWV0YU1vZGVsUGF0aCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInRvU3RyaW5nIiwiZSIsImluZm8iLCJnZXRNZXNzYWdlc1BhdGgiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiTWVzc2FnZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1vZGVsSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgdG8gcmV0cmlldmUgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kZWwgKi9cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eSwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IERyYWZ0Tm9kZSwgRHJhZnRSb290IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvU2Vzc2lvblwiO1xuaW1wb3J0IHR5cGUgeyBEZWxldGVIaWRkZW4sIFVwZGF0ZUhpZGRlbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBBbnkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0FueVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbEFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQsIGlzTmF2aWdhdGlvblByb3BlcnR5LCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IEJpbmRpbmdNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ01vZGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBDb250ZXh0LCBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uIH0gZnJvbSBcIi4vQmluZGluZ1Rvb2xraXRcIjtcblxuY29uc3QgTW9kZWxIZWxwZXIgPSB7XG5cdC8vIGdsb2JhbCBzd2l0Y2ggdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBieSBhIHByaXZhdGUgbWFuaWZlc3QgZmxhZ1xuXHQvLyB0aGlzIGFsbG93cyBjdXN0b21lcnMgdG8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBpbiBjYXNlIHdlIHJ1biBpbnRvIGlzc3VlcyB3aXRoIHRoZSBmaXJzdCBkZWxpdmVyeVxuXHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdGRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQ6IGZhbHNlLFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwcm9ncmFtbWluZyBtb2RlbCBpcyBzdGlja3kuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgT0RhdGFNb2RlbE1ldGFNb2RlbCB0byBjaGVjayBmb3Igc3RpY2t5IGVuYWJsZWQgZW50aXR5XG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBzdGlja3ksIGVsc2UgZmFsc2Vcblx0ICovXG5cdGlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBib29sZWFuIHtcblx0XHRjb25zdCBlbnRpdHlDb250YWluZXIgPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0XHRmb3IgKGNvbnN0IGVudGl0eVNldE5hbWUgaW4gZW50aXR5Q29udGFpbmVyKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGVudGl0eUNvbnRhaW5lcltlbnRpdHlTZXROYW1lXS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRtZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtlbnRpdHlTZXROYW1lfUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRgKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2dyYW1taW5nIG1vZGVsIGlzIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE9EYXRhTW9kZWxNZXRhTW9kZWwgb2YgdGhlIGNvbnRleHQgZm9yIHdoaWNoIGRyYWZ0IHN1cHBvcnQgc2hhbGwgYmUgY2hlY2tlZFxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBkcmFmdCBzdXBwb3J0IHNoYWxsIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0RyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocGF0aCk7XG5cdFx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChvYmplY3RQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZCBmb3IgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRhTW9kZWxPYmplY3RQYXRoXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBzdXBwb3J0ZWRcblx0ICovXG5cdGlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkOiBmdW5jdGlvbiAoZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRFbnRpdHlTZXQgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQ7XG5cdFx0Y29uc3QgYklzRHJhZnRSb290ID0gTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnROb2RlID0gTW9kZWxIZWxwZXIuaXNEcmFmdE5vZGUoY3VycmVudEVudGl0eVNldCk7XG5cdFx0Y29uc3QgYklzRHJhZnRQYXJlbnRFbnRpdHlGb3JDb250YWlubWVudCA9XG5cdFx0XHRpc05hdmlnYXRpb25Qcm9wZXJ0eShkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCkgJiZcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5jb250YWluc1RhcmdldCAmJlxuXHRcdFx0KChkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zPy5Db21tb24/LkRyYWZ0Um9vdCB8fFxuXHRcdFx0XHQoZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5EcmFmdE5vZGUpXG5cdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHQ6IGZhbHNlO1xuXG5cdFx0cmV0dXJuIGJJc0RyYWZ0Um9vdCB8fCBiSXNEcmFmdE5vZGUgfHwgKCFjdXJyZW50RW50aXR5U2V0ICYmIGJJc0RyYWZ0UGFyZW50RW50aXR5Rm9yQ29udGFpbm1lbnQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzZXJ2aWNlLCBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LlxuXHQgKlxuXHQgKiBAcGFyYW0gbWV0YU9iamVjdCBNZXRhT2JqZWN0IHRvIGJlIHVzZWQgZm9yIGRldGVybWluYXRpb25cblx0ICogQHBhcmFtIHRlbXBsYXRlSW50ZXJmYWNlIEFQSSBwcm92aWRlZCBieSBVSTUgdGVtcGxhdGluZyBpZiB1c2VkXG5cdCAqIEBwYXJhbSB0ZW1wbGF0ZUludGVyZmFjZS5jb250ZXh0IENvbnRleHQgb2YgdGhlIHRlbXBsYXRlXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2VydmljZSBzdXBwb3J0cyBjb2xsYWJvcmF0aW9uIGRyYWZ0LCBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZDogZnVuY3Rpb24gKG1ldGFPYmplY3Q6IHVua25vd24sIHRlbXBsYXRlSW50ZXJmYWNlPzogeyBjb250ZXh0OiBDb250ZXh0IH0pOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMuZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9ICh0ZW1wbGF0ZUludGVyZmFjZT8uY29udGV4dD8uZ2V0TW9kZWwoKSB8fCBtZXRhT2JqZWN0KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0XHRcdGNvbnN0IG9FbnRpdHlDb250YWluZXIgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIi9cIik7XG5cdFx0XHRmb3IgKGNvbnN0IHNFbnRpdHlTZXQgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0VudGl0eUNvbnRhaW5lcltzRW50aXR5U2V0XS4ka2luZCA9PT0gXCJFbnRpdHlTZXRcIiAmJlxuXHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0fUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L1NoYXJlQWN0aW9uYClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBwYXRoIG9mIHRoZSBEcmFmdFJvb3QgcGF0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBPZGF0YU1vZGVsIGNvbnRleHRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCBvZiB0aGUgZHJhZnRSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRyYWZ0Um9vdCBpcyBmb3VuZFxuXHQgKi9cblx0Z2V0RHJhZnRSb290UGF0aDogZnVuY3Rpb24gKG9Db250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBnZXRSb290UGF0aCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCwgZmlyc3RJdGVyYXRpb24gPSB0cnVlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRcdGNvbnN0IHNJdGVyYXRpb25QYXRoID0gZmlyc3RJdGVyYXRpb24gPyBzUGF0aCA6IG5ldyBSZWdFeHAoLy4qKD89XFwvKS8pLmV4ZWMoc1BhdGgpPy5bMF07IC8vICpSZWdleCB0byBnZXQgdGhlIGFuY2VzdG9yXG5cdFx0XHRpZiAoc0l0ZXJhdGlvblBhdGggJiYgc0l0ZXJhdGlvblBhdGggIT09IFwiL1wiKSB7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzSXRlcmF0aW9uUGF0aCk7XG5cdFx0XHRcdGNvbnN0IG1EYXRhTW9kZWwgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9NZXRhTW9kZWwuZ2V0Q29udGV4dChzRW50aXR5UGF0aCkpO1xuXHRcdFx0XHRpZiAoKG1EYXRhTW9kZWwudGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCk/LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNJdGVyYXRpb25QYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBnZXRSb290UGF0aChzSXRlcmF0aW9uUGF0aCwgbW9kZWwsIGZhbHNlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Um9vdFBhdGgob0NvbnRleHQuZ2V0UGF0aCgpLCBvQ29udGV4dC5nZXRNb2RlbCgpKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgcGF0aCBvZiB0aGUgU3RpY2t5Um9vdCBwYXRoIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IE9kYXRhTW9kZWwgY29udGV4dFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSBTdGlja3lSb290IGVudGl0eSwgb3IgdW5kZWZpbmVkIGlmIG5vIFN0aWNreVJvb3QgaXMgZm91bmRcblx0ICovXG5cdGdldFN0aWNreVJvb3RQYXRoOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGdldFJvb3RQYXRoID0gZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsLCBmaXJzdEl0ZXJhdGlvbiA9IHRydWUpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdFx0Y29uc3Qgc0l0ZXJhdGlvblBhdGggPSBmaXJzdEl0ZXJhdGlvbiA/IHNQYXRoIDogbmV3IFJlZ0V4cCgvLiooPz1cXC8pLykuZXhlYyhzUGF0aCk/LlswXTsgLy8gKlJlZ2V4IHRvIGdldCB0aGUgYW5jZXN0b3Jcblx0XHRcdGlmIChzSXRlcmF0aW9uUGF0aCAmJiBzSXRlcmF0aW9uUGF0aCAhPT0gXCIvXCIpIHtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNJdGVyYXRpb25QYXRoKTtcblx0XHRcdFx0Y29uc3QgbURhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob01ldGFNb2RlbC5nZXRDb250ZXh0KHNFbnRpdHlQYXRoKSk7XG5cdFx0XHRcdGlmICgobURhdGFNb2RlbC50YXJnZXRFbnRpdHlTZXQgYXMgRW50aXR5U2V0KT8uYW5ub3RhdGlvbnM/LlNlc3Npb24/LlN0aWNreVNlc3Npb25TdXBwb3J0ZWQpIHtcblx0XHRcdFx0XHRyZXR1cm4gc0l0ZXJhdGlvblBhdGg7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGdldFJvb3RQYXRoKHNJdGVyYXRpb25QYXRoLCBtb2RlbCwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdHJldHVybiBnZXRSb290UGF0aChvQ29udGV4dC5nZXRQYXRoKCksIG9Db250ZXh0LmdldE1vZGVsKCkpO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXQgdmlhIG5hdmlnYXRpb24gcHJvcGVydHkgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSB0YXJnZXQgZW50aXR5IHNldCB3aWxsIGJlIGRldGVybWluZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0IGVudGl0eSBzZXRcblx0ICovXG5cdGdldFRhcmdldEVudGl0eVNldDogZnVuY3Rpb24gKG9Db250ZXh0OiBCYXNlQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0aWYgKFxuXHRcdFx0b0NvbnRleHQuZ2V0T2JqZWN0KFwiJGtpbmRcIikgPT09IFwiRW50aXR5U2V0XCIgfHxcblx0XHRcdG9Db250ZXh0LmdldE9iamVjdChcIiRraW5kXCIpID09PSBcIkFjdGlvblwiIHx8XG5cdFx0XHRvQ29udGV4dC5nZXRPYmplY3QoXCIwLyRraW5kXCIpID09PSBcIkFjdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fVxuXHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gTW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChzUGF0aCk7XG5cdFx0cmV0dXJuIGAvJHtvQ29udGV4dC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpfWA7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgY29tcGxldGUgcGF0aCB0byB0aGUgZW50aXR5IHNldCB2aWEgdXNpbmcgbmF2aWdhdGlvbiBwcm9wZXJ0eSBiaW5kaW5nLiBOb3RlOiBUbyBiZSB1c2VkIG9ubHkgYWZ0ZXIgdGhlIG1ldGFtb2RlbCBoYXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gcGF0aCBQYXRoIGZvciB3aGljaCBjb21wbGV0ZSBlbnRpdHlTZXQgcGF0aCBuZWVkcyB0byBiZSBkZXRlcm1pbmVkIGZyb20gZW50aXR5VHlwZSBwYXRoXG5cdCAqIEBwYXJhbSBvZGF0YU1ldGFNb2RlbCBNZXRhbW9kZWwgdG8gYmUgdXNlZC4oT3B0aW9uYWwgaW4gbm9ybWFsIHNjZW5hcmlvcywgYnV0IG5lZWRlZCBmb3IgcGFyYW1ldGVyaXplZCBzZXJ2aWNlIHNjZW5hcmlvcylcblx0ICogQHJldHVybnMgUmV0dXJucyBjb21wbGV0ZSBwYXRoIHRvIHRoZSBlbnRpdHkgc2V0XG5cdCAqL1xuXHRnZXRFbnRpdHlTZXRQYXRoOiBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBvZGF0YU1ldGFNb2RlbD86IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgZW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0aWYgKCFvZGF0YU1ldGFNb2RlbCkge1xuXHRcdFx0Ly8gUHJldmlvdXMgaW1wbGVtZW50YXRpb24gZm9yIGdldHRpbmcgZW50aXR5U2V0UGF0aCBmcm9tIGVudGl0eVR5cGVQYXRoXG5cdFx0XHRlbnRpdHlTZXRQYXRoID0gYC8ke3BhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZykuam9pbihcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIil9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2FsY3VsYXRpbmcgdGhlIGVudGl0eVNldFBhdGggZnJvbSBNZXRhTW9kZWwuXG5cdFx0XHRjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoTW9kZWxIZWxwZXIuZmlsdGVyT3V0TmF2UHJvcEJpbmRpbmcpO1xuXHRcdFx0aWYgKHBhdGhQYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGNvbnN0IGluaXRpYWxQYXRoT2JqZWN0ID0ge1xuXHRcdFx0XHRcdGdyb3dpbmdQYXRoOiBcIi9cIixcblx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmc6IFwiXCJcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRjb25zdCBwYXRoT2JqZWN0ID0gcGF0aFBhcnRzLnJlZHVjZShcblx0XHRcdFx0XHQocGF0aFVuZGVyQ29uc3RydWN0aW9uOiB7IGdyb3dpbmdQYXRoOiBzdHJpbmc7IHBlbmRpbmdOYXZQcm9wQmluZGluZzogc3RyaW5nIH0sIHBhdGhQYXJ0OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBkZWxpbWl0ZXIgPSAoISFpZHggJiYgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpIHx8IFwiXCI7XG5cdFx0XHRcdFx0XHRsZXQgeyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH0gPSBwYXRoVW5kZXJDb25zdHJ1Y3Rpb247XG5cdFx0XHRcdFx0XHRjb25zdCB0ZW1wUGF0aCA9IGdyb3dpbmdQYXRoICsgZGVsaW1pdGVyO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmF2UHJvcEJpbmRpbmdzID0gb2RhdGFNZXRhTW9kZWwuZ2V0T2JqZWN0KHRlbXBQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IG5hdlByb3BCaW5kaW5nVG9DaGVjayA9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAke3BlbmRpbmdOYXZQcm9wQmluZGluZ30vJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdG5hdlByb3BCaW5kaW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhuYXZQcm9wQmluZGluZ3MpLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0bmF2UHJvcEJpbmRpbmdzLmhhc093blByb3BlcnR5KG5hdlByb3BCaW5kaW5nVG9DaGVjaylcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRncm93aW5nUGF0aCA9IHRlbXBQYXRoICsgbmF2UHJvcEJpbmRpbmdUb0NoZWNrLnJlcGxhY2UoXCIvXCIsIFwiJTJGXCIpO1xuXHRcdFx0XHRcdFx0XHRwZW5kaW5nTmF2UHJvcEJpbmRpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cGVuZGluZ05hdlByb3BCaW5kaW5nICs9IHBlbmRpbmdOYXZQcm9wQmluZGluZyA/IGAvJHtwYXRoUGFydH1gIDogcGF0aFBhcnQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBncm93aW5nUGF0aCwgcGVuZGluZ05hdlByb3BCaW5kaW5nIH07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRpbml0aWFsUGF0aE9iamVjdFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGVudGl0eVNldFBhdGggPSBwYXRoT2JqZWN0Lmdyb3dpbmdQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCA9IGAvJHtwYXRoUGFydHNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZW50aXR5U2V0UGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUgcGF0aCBmb3IgdGhlIGl0ZW1zIHByb3BlcnR5IG9mIE11bHRpVmFsdWVGaWVsZCBwYXJhbWV0ZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1BhcmFtZXRlciBBY3Rpb24gUGFyYW1ldGVyXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbXBsZXRlIG1vZGVsIHBhdGggZm9yIHRoZSBpdGVtcyBwcm9wZXJ0eSBvZiBNdWx0aVZhbHVlRmllbGQgcGFyYW1ldGVyc1xuXHQgKi9cblx0Z2V0QWN0aW9uUGFyYW1ldGVySXRlbXNNb2RlbFBhdGg6IGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBNZXRhTW9kZWxBY3Rpb25QYXJhbWV0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBvUGFyYW1ldGVyICYmIG9QYXJhbWV0ZXIuJE5hbWUgPyBge3BhdGg6ICdtdmZ2aWV3Pi8ke29QYXJhbWV0ZXIuJE5hbWV9J31gIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdGZpbHRlck91dE5hdlByb3BCaW5kaW5nOiBmdW5jdGlvbiAoc1BhdGhQYXJ0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1BhdGhQYXJ0ICE9PSBcIlwiICYmIHNQYXRoUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc2V0UHJvcGVydHkgdG8gdGhlIGNyZWF0ZWQgYmluZGluZyBjb250ZXh0cyBvZiB0aGUgaW50ZXJuYWwgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIEludGVybmFsIEpTT04gTW9kZWwgd2hpY2ggaXMgZW5oYW5jZWRcblx0ICovXG5cblx0ZW5oYW5jZUludGVybmFsSlNPTk1vZGVsOiBmdW5jdGlvbiAob0ludGVybmFsTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGZuQmluZENvbnRleHQgPSBvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCA9IGZ1bmN0aW9uIChcblx0XHRcdHNQYXRoOiBzdHJpbmcsXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRcdG1QYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQsXG5cdFx0XHRvRXZlbnRzOiBvYmplY3QgfCB1bmRlZmluZWRcblx0XHQpOiBDb250ZXh0QmluZGluZyB7XG5cdFx0XHRjb25zdCBjb250ZXh0QmluZGluZyA9IGZuQmluZENvbnRleHQuYXBwbHkodGhpcywgW3NQYXRoLCBjb250ZXh0LCBtUGFyYW1ldGVycywgb0V2ZW50c10pO1xuXHRcdFx0Y29uc3QgZm5HZXRCb3VuZENvbnRleHQgPSBjb250ZXh0QmluZGluZy5nZXRCb3VuZENvbnRleHQ7XG5cblx0XHRcdGNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCA9IGZ1bmN0aW9uICgpOiBCYXNlQ29udGV4dCB8IG51bGwge1xuXHRcdFx0XHRjb25zdCBvQm91bmRDb250ZXh0ID0gZm5HZXRCb3VuZENvbnRleHQuYXBwbHkodGhpcyk7XG5cdFx0XHRcdGlmIChvQm91bmRDb250ZXh0KSB7XG5cdFx0XHRcdFx0b0JvdW5kQ29udGV4dC5zZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldE1vZGVsKCkuc2V0UHJvcGVydHkodGhpcy5nZXRQYXRoKCksIHt9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gcHJvcGVydHlQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0XHRcdC8vIGxldCdzIGVuc3VyZSB0aGF0IHN1YiBvYmplY3RzIGFyZSBpbml0aWFsaXplZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJ0eVBhdGhTcGxpdC5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0T2JqZWN0KHByb3BlcnR5UGF0aFNwbGl0W2ldKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaW5pdGlhbGl6ZVxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eSh0aGlzLmdldFBhdGgocHJvcGVydHlQYXRoU3BsaXRbaV0pLCB7fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgsIHZhbHVlLCB0aGlzKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvQm91bmRDb250ZXh0O1xuXHRcdFx0fTtcblx0XHRcdHJldHVybiBjb250ZXh0QmluZGluZztcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGhhbmRsZXIgb24gcHJvcGVydHlDaGFuZ2UuXG5cdCAqIFRoZSBwcm9wZXJ0eSBcIi9lZGl0TW9kZVwiIGlzIGNoYW5nZWQgYWNjb3JkaW5nIHRvIHByb3BlcnR5ICcvaXNFZGl0YWJsZScgd2hlbiB0aGlzIGxhc3Qgb25lIGlzIHNldFxuXHQgKiBpbiBvcmRlciB0byBiZSBjb21wbGlhbnQgd2l0aCBmb3JtZXIgdmVyc2lvbnMgd2hlcmUgYnVpbGRpbmcgYmxvY2tzIHVzZSB0aGUgcHJvcGVydHkgXCIvZWRpdE1vZGVcIlxuXHQgKlxuXHQgKiBAcGFyYW0gdWlNb2RlbCBKU09OIE1vZGVsIHdoaWNoIGlzIGVuaGFuY2VkXG5cdCAqIEBwYXJhbSBsaWJyYXJ5IENvcmUgbGlicmFyeSBvZiBTQVAgRmlvcmkgZWxlbWVudHNcblx0ICovXG5cblx0ZW5oYW5jZVVpSlNPTk1vZGVsOiBmdW5jdGlvbiAodWlNb2RlbDogSlNPTk1vZGVsLCBsaWJyYXJ5OiB7IEVkaXRNb2RlOiB7IEVkaXRhYmxlOiBzdHJpbmc7IERpc3BsYXk6IHN0cmluZyB9IH0pOiB2b2lkIHtcblx0XHRjb25zdCBmblNldFByb3BlcnR5ID0gdWlNb2RlbC5zZXRQcm9wZXJ0eTtcblx0XHR1aU1vZGVsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRcdFx0cGF0aDogc3RyaW5nLFxuXHRcdFx0dmFsdWU6IHVua25vd24sXG5cdFx0XHRjb250ZXh0OiBCYXNlQ29udGV4dCB8IHVuZGVmaW5lZCxcblx0XHRcdGFzeW5jVXBkYXRlOiBib29sZWFuIHwgdW5kZWZpbmVkXG5cdFx0KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAocGF0aCA9PT0gXCIvaXNFZGl0YWJsZVwiKSB7XG5cdFx0XHRcdHVpTW9kZWwuc2V0UHJvcGVydHkoXCIvZWRpdE1vZGVcIiwgdmFsdWUgPyBsaWJyYXJ5LkVkaXRNb2RlLkVkaXRhYmxlIDogbGlicmFyeS5FZGl0TW9kZS5EaXNwbGF5LCBjb250ZXh0LCBhc3luY1VwZGF0ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5TZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlXSk7XG5cdFx0fTtcblx0fSxcblxuXHRlbmhhbmNlVmlld0pTT05Nb2RlbDogZnVuY3Rpb24gKHZpZXdNb2RlbDogSlNPTk1vZGVsICYgeyBfZ2V0T2JqZWN0OiBGdW5jdGlvbiB9KTogdm9pZCB7XG5cdFx0Y29uc3QgZm5HZXRPYmplY3QgPSB2aWV3TW9kZWwuX2dldE9iamVjdDtcblx0XHR2aWV3TW9kZWwuX2dldE9iamVjdCA9IGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nLCBvQ29udGV4dD86IENvbnRleHQpOiB1bmtub3duIHtcblx0XHRcdGlmIChzUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRcdHNQYXRoID0gXCIvXCI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm5HZXRPYmplY3QuYXBwbHkodGhpcywgW3NQYXRoLCBvQ29udGV4dF0pO1xuXHRcdH07XG5cdH0sXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHdoZXRoZXIgZmlsdGVyaW5nIG9uIHRoZSB0YWJsZSBpcyBjYXNlIHNlbnNpdGl2ZS5cblx0ICpcblx0ICogQHBhcmFtIG9NZXRhTW9kZWwgVGhlIGluc3RhbmNlIG9mIHRoZSBtZXRhIG1vZGVsXG5cdCAqIEByZXR1cm5zIFJldHVybnMgJ2ZhbHNlJyBpZiBGaWx0ZXJGdW5jdGlvbnMgYW5ub3RhdGlvbiBzdXBwb3J0cyAndG9sb3dlcicsIGVsc2UgJ3RydWUnXG5cdCAqL1xuXHRpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6IGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHVuZGVmaW5lZCB8IGJvb2xlYW4ge1xuXHRcdGlmICghb01ldGFNb2RlbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgYUZpbHRlckZ1bmN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL0BPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlckZ1bmN0aW9uc1wiKTtcblx0XHQvLyBHZXQgZmlsdGVyIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IEVudGl0eUNvbnRhaW5lciBhbmQgY2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiAndG9sb3dlcidcblx0XHRyZXR1cm4gYUZpbHRlckZ1bmN0aW9ucyA/IGFGaWx0ZXJGdW5jdGlvbnMuaW5kZXhPZihcInRvbG93ZXJcIikgPT09IC0xIDogdHJ1ZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gYmUgdXNlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtZXRhcGF0aCBmb3IgdGhlIGNvbnRleHQuXG5cdCAqL1xuXHRnZXRNZXRhUGF0aEZvckNvbnRleHQ6IGZ1bmN0aW9uIChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gb01ldGFNb2RlbCAmJiBzUGF0aCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IE1ldGFQYXRoIGZvciB0aGUgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoIE1ldGFQYXRoIHRvIGJlIHVzZWRcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcm9vdCBlbnRpdHkgc2V0IHBhdGguXG5cdCAqL1xuXHRnZXRSb290RW50aXR5U2V0UGF0aDogZnVuY3Rpb24gKGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCByb290RW50aXR5U2V0UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgYVBhdGhzID0gY29udGV4dFBhdGggPyBjb250ZXh0UGF0aC5zcGxpdChcIi9cIikgOiBbXTtcblx0XHRpZiAoYVBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdHJvb3RFbnRpdHlTZXRQYXRoID0gYVBhdGhzWzFdO1xuXHRcdH1cblx0XHRyZXR1cm4gcm9vdEVudGl0eVNldFBhdGg7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXQgTWV0YVBhdGggZm9yIHRoZSBsaXN0QmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3IFZpZXcgb2YgdGhlIGNvbnRyb2wgdXNpbmcgbGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIHZMaXN0QmluZGluZyBPRGF0YUxpc3RCaW5kaW5nIG9iamVjdCBvciB0aGUgYmluZGluZyBwYXRoIGZvciBhIHRlbXBvcmFyeSBsaXN0IGJpbmRpbmdcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbWV0YXBhdGggZm9yIHRoZSBsaXN0YmluZGluZy5cblx0ICovXG5cdGdldEFic29sdXRlTWV0YVBhdGhGb3JMaXN0QmluZGluZzogZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcsIHZMaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyB8IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IHNNZXRhUGF0aDtcblxuXHRcdGlmICh0eXBlb2Ygdkxpc3RCaW5kaW5nID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpZiAodkxpc3RCaW5kaW5nLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRcdC8vIGFic29sdXRlIHBhdGhcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aCh2TGlzdEJpbmRpbmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gcmVsYXRpdmUgcGF0aFxuXHRcdFx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBzUm9vdENvbnRleHRQYXRoID0gb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0XHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChgJHtzUm9vdENvbnRleHRQYXRofS8ke3ZMaXN0QmluZGluZ31gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gd2UgYWxyZWFkeSBnZXQgYSBsaXN0IGJpbmRpbmcgdXNlIHRoaXMgb25lXG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHZMaXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9CaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRpZiAob0JpbmRpbmcgPT09IG9Sb290QmluZGluZykge1xuXHRcdFx0XHQvLyBhYnNvbHV0ZSBwYXRoXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0JpbmRpbmcuZ2V0UGF0aCgpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHJlbGF0aXZlIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1Jvb3RCaW5kaW5nUGF0aCA9IG9Sb290QmluZGluZyEuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzUmVsYXRpdmVQYXRoID0gb0JpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKGAke3NSb290QmluZGluZ1BhdGh9LyR7c1JlbGF0aXZlUGF0aH1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNNZXRhUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIGRyYWZ0IHJvb3QuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlTZXQgRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgcm9vdFxuXHQgKi9cblx0aXNEcmFmdFJvb3Q6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREcmFmdFJvb3QoZW50aXR5U2V0KSAhPT0gdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFyZ3VtZW50IGlzIGEgZHJhZnQgbm9kZS5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBkcmFmdCBub2RlXG5cdCAqL1xuXHRpc0RyYWZ0Tm9kZTogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmdldERyYWZ0Tm9kZShlbnRpdHlTZXQpICE9PSB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgYXJndW1lbnQgaXMgYSBzdGlja3kgc2Vzc2lvbiByb290LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhIHN0aWNreSBzZXNzaW9uIHJvb3Rcblx0ICovXG5cdGlzU3RpY2t5OiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRTdGlja3lTZXNzaW9uKGVudGl0eVNldCkgIT09IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBlbnRpdHkgaXMgdXBkYXRhYmxlIG9yIG5vdC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgRW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHVwZGF0YWJsZSBlbHNlIGZhbHNlXG5cdCAqL1xuXHRpc1VwZGF0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogVXBkYXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuID8/IGVudGl0eVR5cGU/LmFubm90YXRpb25zLlVJPy5VcGRhdGVIaWRkZW47XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgQENvbW1vbi5EcmFmdFJvb3QgYW5ub3RhdGlvbiBpZiB0aGUgYXJndW1lbnQgaXMgYW4gRW50aXR5U2V0LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcmV0dXJucyBEcmFmdFJvb3Rcblx0ICovXG5cdGdldERyYWZ0Um9vdDogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5rbm93biB8IHVuZGVmaW5lZCk6IERyYWZ0Um9vdCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuQ29tbW9uPy5EcmFmdFJvb3QgOiB1bmRlZmluZWQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIEBDb21tb24uRHJhZnROb2RlIGFubm90YXRpb24gaWYgdGhlIGFyZ3VtZW50IGlzIGFuIEVudGl0eVNldC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgRHJhZnRSb290XG5cdCAqL1xuXHRnZXREcmFmdE5vZGU6IGZ1bmN0aW9uIChlbnRpdHlTZXQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVua25vd24gfCB1bmRlZmluZWQpOiBEcmFmdE5vZGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpc0VudGl0eVNldChlbnRpdHlTZXQpID8gZW50aXR5U2V0LmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnROb2RlIDogdW5kZWZpbmVkO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGdldCBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVNldCBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmRlZmluZWRcblx0ICogQHJldHVybnMgU2Vzc2lvbiBTdGlja3lTZXNzaW9uU3VwcG9ydGVkXG5cdCAqL1xuXHRnZXRTdGlja3lTZXNzaW9uOiBmdW5jdGlvbiAoZW50aXR5U2V0OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCB1bmtub3duIHwgdW5kZWZpbmVkKTogU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIGlzRW50aXR5U2V0KGVudGl0eVNldCkgPyBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCA6IHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiBkZWxldGUgYnV0dG9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5U2V0IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IHVuZGVmaW5lZFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBFbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgZGVsZXRlIGJ1dHRvbiBpcyBoaWRkZW5cblx0ICovXG5cdGdldERlbGV0ZUhpZGRlbjogZnVuY3Rpb24gKGVudGl0eVNldDogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkLCBlbnRpdHlUeXBlOiBFbnRpdHlUeXBlKTogRGVsZXRlSGlkZGVuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoaXNFbnRpdHlTZXQoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uRGVsZXRlSGlkZGVuID8/IGVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkRlbGV0ZUhpZGRlbjtcblx0XHR9XG5cdH0sXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIG1ldGFwYXRoIGZvciB0aGUgZ2l2ZW4gbGlzdCBiaW5kaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgTGlzdEJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIE1ldGFQYXRoXG5cdCAqL1xuXHRnZXRBYnNvbHV0ZVBhdGhGcm9tTGlzdEJpbmRpbmcobGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IGxpc3RCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0bGV0IG1ldGFQYXRoO1xuXHRcdGNvbnN0IHJvb3RCaW5kaW5nID0gbGlzdEJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRpZiAobGlzdEJpbmRpbmcgPT09IHJvb3RCaW5kaW5nKSB7XG5cdFx0XHRtZXRhUGF0aCA9IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChsaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCByb290QmluZGluZ1BhdGggPSByb290QmluZGluZz8uZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gbGlzdEJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0bWV0YVBhdGggPSBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoYCR7cm9vdEJpbmRpbmdQYXRofS8ke3JlbGF0aXZlUGF0aH1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1ldGFQYXRoO1xuXHR9LFxuXG5cdGVuaGFuY2VPRGF0YU1vZGVsKG9kYXRhTW9kZWw6IE9EYXRhTW9kZWwpOiB2b2lkIHtcblx0XHRvZGF0YU1vZGVsLnZpcnR1YWxQcm9wZXJ0eUJpbmRpbmdSZWdpc3RyeSA9IG5ldyBBcnJheTxPRGF0YVByb3BlcnR5QmluZGluZz4oKTtcblx0XHRjb25zdCBmbk1lc3NhZ2UgPSBvZGF0YU1vZGVsLnNldE1lc3NhZ2VzO1xuXHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk1vZGVsID0gbmV3IEpTT05Nb2RlbCh7fSk7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKEJpbmRpbmdNb2RlLk9uZVdheSk7XG5cdFx0Y29uc3QgYmFzZVNldFByb3BlcnR5ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHk7XG5cdFx0Y29uc3QgYmFzZUdldFByb3BlcnR5ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0UHJvcGVydHk7XG5cdFx0bG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0UHJvcGVydHkgPSBmdW5jdGlvbiAocGF0aCwgY29udGV4dDogT0RhdGFWNENvbnRleHQpOiB1bmtub3duIHtcblx0XHRcdGNvbnN0IFtwcm9wZXJ0eU5hbWUsIGFubm90YXRpb25UeXBlXSA9IHBhdGguc3BsaXQoXCJAJHVpNS5mZS5cIik7XG5cblx0XHRcdGlmIChjb250ZXh0ICYmIGNvbnRleHQuaXNUcmFuc2llbnQoKSAhPT0gdHJ1ZSAmJiBhbm5vdGF0aW9uVHlwZSA9PT0gXCJAQ29tbW9uL0V4dGVybmFsSURcIikge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0T2JqZWN0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0aWYgKGNvbnRleHRPYmplY3QpIHtcblx0XHRcdFx0XHRjb25zdCBtZXRhUGF0aCA9IG5ldyBNZXRhUGF0aDxFbnRpdHlTZXQ+KFxuXHRcdFx0XHRcdFx0Y29udmVydFR5cGVzKG9kYXRhTW9kZWwuZ2V0TWV0YU1vZGVsKCkpLFxuXHRcdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSksXG5cdFx0XHRcdFx0XHRvZGF0YU1vZGVsLmdldE1ldGFNb2RlbCgpLmdldE1ldGFQYXRoKGNvbnRleHQuZ2V0UGF0aCgpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihwcm9wZXJ0eU5hbWUpLmdldFRhcmdldCgpLmFubm90YXRpb25zLkNvbW1vblxuXHRcdFx0XHRcdFx0Py5FeHRlcm5hbElEO1xuXHRcdFx0XHRcdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihleHRlcm5hbElkUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRPYmplY3QoZXh0ZXJuYWxJZFByb3BlcnR5LnBhdGgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRPYmplY3QocHJvcGVydHlOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChjb250ZXh0ICYmIGFubm90YXRpb25UeXBlID09PSBcImNvbnRleHRQYXRoXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYmFzZUdldFByb3BlcnR5LmFwcGx5KHRoaXMsIFtwYXRoLCBjb250ZXh0XSk7XG5cdFx0fTtcblxuXHRcdGxvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGgsIHZhbHVlLCBjb250ZXh0LCBhc3luY1VwZGF0ZSk6IGJvb2xlYW4ge1xuXHRcdFx0bGV0IGZ1bGxQYXRoID0gcGF0aDtcblx0XHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRcdGZ1bGxQYXRoID0gY29udGV4dC5nZXRQYXRoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgX3JlZnJlc2hMb2NhbE1vZGVsID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHR0aGlzLnJlZnJlc2goKTtcblx0XHRcdH07XG5cdFx0XHRjb25zdCBbcHJvcGVydHlOYW1lLCBhbm5vdGF0aW9uVHlwZV0gPSBwYXRoLnNwbGl0KFwiQCR1aTUuZmUuXCIpO1xuXHRcdFx0aWYgKGNvbnRleHQgJiYgYW5ub3RhdGlvblR5cGUgPT09IFwiQENvbW1vbi9FeHRlcm5hbElEXCIpIHtcblx0XHRcdFx0Y29udGV4dC5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKTtcblx0XHRcdFx0Ly8gcmVmcmVzaGluZyBFeHRlcm5hbElEIGFuZCB0ZXh0IHByb3BlcnRpZXMgKHBhdGhzIG5lZWQgdG8gYmUgZGV0ZXJtaW5lZCBnZW5lcmljYWxseSlcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGggPSBuZXcgTWV0YVBhdGg8RW50aXR5U2V0Pihcblx0XHRcdFx0XHRjb252ZXJ0VHlwZXMob2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSksXG5cdFx0XHRcdFx0b2RhdGFNb2RlbC5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChjb250ZXh0LmdldFBhdGgoKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxJZFByb3BlcnR5ID0gbWV0YVBhdGguZ2V0TWV0YVBhdGhGb3JQYXRoPFByb3BlcnR5Pihwcm9wZXJ0eU5hbWUpLmdldFRhcmdldCgpLmFubm90YXRpb25zLkNvbW1vbj8uRXh0ZXJuYWxJRDtcblx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKGV4dGVybmFsSWRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRjb25zdCBleHRlcm5hbElkUHJvcFBhdGggPSBleHRlcm5hbElkUHJvcGVydHkucGF0aDtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gW2V4dGVybmFsSWRQcm9wUGF0aC5zdWJzdHJpbmcoMCwgZXh0ZXJuYWxJZFByb3BQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSldO1xuXHRcdFx0XHRcdGNvbnN0IHRleHRQcm9wZXJ0eSA9IG1ldGFQYXRoLmdldE1ldGFQYXRoRm9yUGF0aDxQcm9wZXJ0eT4oZXh0ZXJuYWxJZFByb3BQYXRoKS5nZXRUYXJnZXQoKS5hbm5vdGF0aW9ucy5Db21tb24/LlRleHQ7XG5cdFx0XHRcdFx0aWYgKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHRleHRQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRleHRQcm9wUGF0aCA9IHRleHRQcm9wZXJ0eS5wYXRoO1xuXHRcdFx0XHRcdFx0aWYgKHRleHRQcm9wUGF0aC5pbmNsdWRlcyhcIi9cIikpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydGllc1RvUmVxdWVzdC5wdXNoKHRleHRQcm9wUGF0aCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdChjb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KVxuXHRcdFx0XHRcdFx0LnJlcXVlc3RTaWRlRWZmZWN0cyhwcm9wZXJ0aWVzVG9SZXF1ZXN0KVxuXHRcdFx0XHRcdFx0LnRoZW4oX3JlZnJlc2hMb2NhbE1vZGVsKVxuXHRcdFx0XHRcdFx0LmNhdGNoKChlcnIpID0+IHtcblx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aFNwbGl0ID0gZnVsbFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Ly8gbGV0J3MgZW5zdXJlIHRoYXQgc3ViIG9iamVjdHMgYXJlIGluaXRpYWxpemVkXG5cdFx0XHRsZXQgcGF0aEZyb21Sb290ID0gXCJcIjtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVydHlQYXRoU3BsaXQubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRcdHBhdGhGcm9tUm9vdCArPSBcIi9cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXRoRnJvbVJvb3QgKz0gcHJvcGVydHlQYXRoU3BsaXRbaV07XG5cdFx0XHRcdGlmICh0aGlzLmdldE9iamVjdChwYXRoRnJvbVJvb3QpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHQvLyBpbml0aWFsaXplXG5cdFx0XHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShwYXRoRnJvbVJvb3QsIHt9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGJhc2VTZXRQcm9wZXJ0eS5hcHBseSh0aGlzLCBbcGF0aCwgdmFsdWUsIGNvbnRleHQsIGFzeW5jVXBkYXRlXSk7XG5cdFx0fTtcblx0XHRmdW5jdGlvbiBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlczogc3RyaW5nW10sIGRhdGFTZXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogb2JqZWN0IHtcblx0XHRcdGZvciAoY29uc3QgY29udGV4dFBhdGggaW4gZGF0YVNldCkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRhdGFTZXRbY29udGV4dFBhdGhdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0ZGF0YVNldFtjb250ZXh0UGF0aF0gPSBjbGVhckFubm90YXRpb25UeXBlKGFubm90YXRpb25UeXBlcywgZGF0YVNldFtjb250ZXh0UGF0aF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhkYXRhU2V0W2NvbnRleHRQYXRoXSBhcyBvYmplY3QpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIGRhdGFTZXRbY29udGV4dFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGFubm90YXRpb25UeXBlIG9mIGFubm90YXRpb25UeXBlcykge1xuXHRcdFx0XHRcdGlmIChjb250ZXh0UGF0aC5lbmRzV2l0aChhbm5vdGF0aW9uVHlwZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBkYXRhU2V0W2NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBkYXRhU2V0O1xuXHRcdH1cblx0XHRvZGF0YU1vZGVsLl9sb2NhbEFubm90YXRpb25Nb2RlbCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsO1xuXHRcdG9kYXRhTW9kZWwuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwgPSBmdW5jdGlvbiAoKTogSlNPTk1vZGVsIHtcblx0XHRcdHJldHVybiB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbDtcblx0XHR9O1xuXHRcdG9kYXRhTW9kZWwuc2V0TWVzc2FnZXMgPSBmdW5jdGlvbiAobWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VbXT4pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNsZWFuZWREYXRhID0gY2xlYXJBbm5vdGF0aW9uVHlwZShbXCJAJHVpNS5mZS5tZXNzYWdlVHlwZVwiLCBcIkAkdWk1LmZlLm1lc3NhZ2VUZXh0XCJdLCB0aGlzLl9sb2NhbEFubm90YXRpb25Nb2RlbC5nZXREYXRhKCkpO1xuXHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0RGF0YShjbGVhbmVkRGF0YSk7XG5cdFx0XHRmb3IgKGNvbnN0IG1lc3NhZ2VUYXJnZXQgaW4gbWVzc2FnZXMpIHtcblx0XHRcdFx0dGhpcy5fbG9jYWxBbm5vdGF0aW9uTW9kZWwuc2V0UHJvcGVydHkoYCR7bWVzc2FnZVRhcmdldH1AJHVpNS5mZS5tZXNzYWdlVHlwZWAsIG1lc3NhZ2VzW21lc3NhZ2VUYXJnZXRdWzBdLmdldFR5cGUoKSk7XG5cdFx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLnNldFByb3BlcnR5KGAke21lc3NhZ2VUYXJnZXR9QCR1aTUuZmUubWVzc2FnZVRleHRgLCBtZXNzYWdlc1ttZXNzYWdlVGFyZ2V0XVswXS5nZXRNZXNzYWdlKCkpO1xuXHRcdFx0fVxuXHRcdFx0Zm5NZXNzYWdlLmFwcGx5KHRoaXMsIFttZXNzYWdlc10pO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5CaW5kUHJvcGVydHkgPSBvZGF0YU1vZGVsLmJpbmRQcm9wZXJ0eS5iaW5kKG9kYXRhTW9kZWwpO1xuXHRcdG9kYXRhTW9kZWwuYmluZFByb3BlcnR5ID0gZnVuY3Rpb24gKHBhdGg6IHN0cmluZywgY29udGV4dDogT0RhdGFWNENvbnRleHQsIHBhcmFtZXRlcnMpOiBPRGF0YVByb3BlcnR5QmluZGluZyB7XG5cdFx0XHRpZiAocGF0aC5lbmRzV2l0aChcIkAkdWk1LmZlLkBDb21tb24vRXh0ZXJuYWxJRFwiKSAmJiBjb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsSWRCaW5kaW5nID0gZm5CaW5kUHJvcGVydHkocGF0aCwgY29udGV4dCk7XG5cdFx0XHRcdG9kYXRhTW9kZWwudmlydHVhbFByb3BlcnR5QmluZGluZ1JlZ2lzdHJ5LnB1c2goaW50ZXJuYWxJZEJpbmRpbmcpO1xuXHRcdFx0XHRjb25zdCBleHRlcm5hbElkQmluZGluZyA9IHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIE9EYXRhUHJvcGVydHlCaW5kaW5nO1xuXG5cdFx0XHRcdGludGVybmFsSWRCaW5kaW5nLmF0dGFjaENoYW5nZSgoKSA9PiB7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxJZEJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0aW50ZXJuYWxJZEJpbmRpbmdcblx0XHRcdFx0XHQucmVxdWVzdFZhbHVlKClcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRleHRlcm5hbElkQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gZXh0ZXJuYWxJZEJpbmRpbmc7XG5cdFx0XHR9XG5cdFx0XHRpZiAocGF0aC5pbmNsdWRlcyhcIkAkdWk1LmZlLlwiKSkge1xuXHRcdFx0XHRjb25zdCBwcm9wQmluZGluZyA9IHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmJpbmRQcm9wZXJ0eShwYXRoLCBjb250ZXh0KSBhcyBPRGF0YVByb3BlcnR5QmluZGluZyAmIHtcblx0XHRcdFx0XHRzZXRDb250ZXh0PzogRnVuY3Rpb247XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwYXRoLmVuZHNXaXRoKFwiQCR1aTUuZmUuQENvbW1vbi9FeHRlcm5hbElEXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb3BCaW5kaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BCaW5kaW5nLnVwZGF0ZVJlcXVpcmVkID0gZnVuY3Rpb24gKG1vZGVsOiBvYmplY3QpOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kZWwgJiYgbW9kZWwgPT09IG9kYXRhTW9kZWw7XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChwYXRoLmluY2x1ZGVzKFwiQCR1aTUuZmUudmlydHVhbC5cIikpIHtcblx0XHRcdFx0XHRjb25zdCBleHByZXNzaW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldFZpcnR1YWxCaW5kaW5nRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKHRoaXMuZ2V0TWV0YU1vZGVsKCkpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCBnaG9zdENvbnRyb2wgPSBuZXcgQW55KHsgYW55OiBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKSwgYmluZEJhY2tQcm9wZXJ0eTogcGF0aCB9KTtcblx0XHRcdFx0XHRjb25zdCBmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmcgPSBwcm9wQmluZGluZy5kZXN0cm95LmJpbmQocHJvcEJpbmRpbmcpO1xuXHRcdFx0XHRcdHByb3BCaW5kaW5nLmRlc3Ryb3kgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRnaG9zdENvbnRyb2w/LmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHJldHVybiBmbkRlc3Ryb3lQcm9wZXJ0eUJpbmRpbmcoKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGZuU2V0Q29udGV4dCA9IHByb3BCaW5kaW5nLnNldENvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKGZuU2V0Q29udGV4dCkge1xuXHRcdFx0XHRcdFx0cHJvcEJpbmRpbmcuc2V0Q29udGV4dCA9IChuZXdDb250ZXh0OiBDb250ZXh0KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdGdob3N0Q29udHJvbD8uc2V0QmluZGluZ0NvbnRleHQobmV3Q29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmblNldENvbnRleHQuYmluZChwcm9wQmluZGluZykobmV3Q29udGV4dCk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGdob3N0Q29udHJvbC5zZXRNb2RlbCh0aGlzKTtcblx0XHRcdFx0XHRjb25zdCBnaG9zdEJpbmRpbmcgPSBnaG9zdENvbnRyb2wuZ2V0QmluZGluZ0luZm8oXCJhbnlcIik/LmJpbmRpbmc7XG5cdFx0XHRcdFx0Y29uc3QgZm5DaGVja1VwZGF0ZSA9IGdob3N0QmluZGluZz8uY2hlY2tVcGRhdGU7XG5cdFx0XHRcdFx0aWYgKGZuQ2hlY2tVcGRhdGUpIHtcblx0XHRcdFx0XHRcdGdob3N0Q29udHJvbC5nZXRCaW5kaW5nSW5mbyhcImFueVwiKS5iaW5kaW5nLmNoZWNrVXBkYXRlID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZm5DaGVja1VwZGF0ZS5iaW5kKGdob3N0QmluZGluZykodHJ1ZSk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRnaG9zdENvbnRyb2wuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByb3BCaW5kaW5nO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuQmluZFByb3BlcnR5KHBhdGgsIGNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdH07XG5cdFx0Y29uc3QgZm5EZXN0cm95ID0gb2RhdGFNb2RlbC5kZXN0cm95LmJpbmQob2RhdGFNb2RlbCk7XG5cdFx0b2RhdGFNb2RlbC5kZXN0cm95ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0Zm9yIChjb25zdCB2cEJpbmRpbmcgb2Ygb2RhdGFNb2RlbC52aXJ0dWFsUHJvcGVydHlCaW5kaW5nUmVnaXN0cnkpIHtcblx0XHRcdFx0dnBCaW5kaW5nLmRlc3Ryb3koKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX2xvY2FsQW5ub3RhdGlvbk1vZGVsLmRlc3Ryb3koKTtcblx0XHRcdHJldHVybiBmbkRlc3Ryb3kuYXBwbHkodGhpcyk7XG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUmVzb2x2ZXMgYSBtZXRhZGF0YSBiaW5kaW5nIHRvIGl0cyB0ZXh0LCBlaXRoZXIgdXNpbmcgdGhlIGNvbnZlcnRlckNvbnRleHQgb3IgdGhlIG1ldGFNb2RlbCBkaXJlY3RseS5cblx0ICpcblx0ICogQHBhcmFtIHBhdGhcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgdGV4dCBpZiBwb3NzaWJsZSwgZWxzZSB0aGUgaW5wdXQgdmFsdWUgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSBwYXRoIHdhcyB1bmRlZmluZWRcblx0ICovXG5cdGZldGNoVGV4dEZyb21NZXRhTW9kZWwocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDx1bmtub3duPiwgbWV0YU1vZGVsPzogTWV0YU1vZGVsKTogc3RyaW5nIHtcblx0XHRsZXQgdGV4dCA9IHBhdGggIT09IHVuZGVmaW5lZCA/IHBhdGggOiBcIlwiO1xuXHRcdGlmIChwYXRoPy5zdGFydHNXaXRoKFwie21ldGFNb2RlbD5cIikpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbFBhdGggPSBwYXRoLnN1YnN0cmluZygxMSwgcGF0aC5sZW5ndGggLSAxKTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obWV0YU1vZGVsUGF0aCkuYW5ub3RhdGlvbj8udG9TdHJpbmcoKSA/PyBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRleHQgPSBtZXRhTW9kZWw/LmdldE9iamVjdChtZXRhTW9kZWxQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRMb2cuaW5mbyhgVW5hYmxlIHRvIHJldHJpZXZlIHRleHQgZnJvbSBtZXRhIG1vZGVsIHVzaW5nIHBhdGggJHttZXRhTW9kZWxQYXRofWApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGV4dDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBwYXRoIGNvcnJlc3BvbmRpbmcgdG8gc3RhdGUgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgVGhlIG1ldGFtb2RlbFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCBmb3IgdGhlIGNvbnRleHQgb24gd2hpY2ggd2Ugd2hhdCB0byByZXRyZWl2ZSB0aGUgbWVzc2FnZSBwYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGgsIG9yIHVuZGVmaW5lZCBpZiBubyBNZXNzYWdlcyBhbm5vdGF0aW9uIGlzIGRlZmluZWRcblx0ICovXG5cdGdldE1lc3NhZ2VzUGF0aDogZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFDb250ZXh0ID0gbWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBvYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFDb250ZXh0KTtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzID0gb2JqZWN0UGF0aC50YXJnZXRFbnRpdHlUeXBlLmFubm90YXRpb25zLkNvbW1vbj8uTWVzc2FnZXM7XG5cdFx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG1lc3NhZ2VzKSA/IG1lc3NhZ2VzLnBhdGggOiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIEludGVybmFsTW9kZWxDb250ZXh0ID0geyBnZXRNb2RlbCgpOiBKU09OTW9kZWwgfSAmIEJhc2VDb250ZXh0ICYge1xuXHRcdHNldFByb3BlcnR5KHNQYXRoOiBzdHJpbmcsIHZWYWx1ZTogdW5rbm93bik6IHZvaWQ7XG5cdH07XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGVsSGVscGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O0VBNkJBLE1BQU1BLFdBQVcsR0FBRztJQUNuQjtJQUNBO0lBQ0E7SUFDQUMseUJBQXlCLEVBQUUsS0FBSztJQUVoQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFDQ0Msd0JBQXdCLEVBQUUsVUFBVUMsU0FBeUIsRUFBVztNQUN2RSxNQUFNQyxlQUFlLEdBQUdELFNBQVMsQ0FBQ0UsU0FBUyxDQUFDLEdBQUcsQ0FBQztNQUNoRCxLQUFLLE1BQU1DLGFBQWEsSUFBSUYsZUFBZSxFQUFFO1FBQzVDLElBQ0NBLGVBQWUsQ0FBQ0UsYUFBYSxDQUFDLENBQUNDLEtBQUssS0FBSyxXQUFXLElBQ3BESixTQUFTLENBQUNFLFNBQVMsQ0FBRSxJQUFHQyxhQUFjLHlEQUF3RCxDQUFDLEVBQzlGO1VBQ0QsT0FBTyxJQUFJO1FBQ1o7TUFDRDtNQUNBLE9BQU8sS0FBSztJQUNiLENBQUM7SUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDRSxnQkFBZ0IsRUFBRSxVQUFVTCxTQUF5QixFQUFFTSxJQUFZLEVBQVc7TUFDN0UsTUFBTUMsV0FBVyxHQUFHUCxTQUFTLENBQUNRLGNBQWMsQ0FBQ0YsSUFBSSxDQUFDO01BQ2xELE1BQU1HLFVBQVUsR0FBR0MsMkJBQTJCLENBQXdCSCxXQUFX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
@@ -665,6 +665,13 @@ const ModelHelper = {
665
665
  }
666
666
 
667
667
  ghostControl.setModel(this);
668
+ const ghostBinding = ghostControl.getBindingInfo("any")?.binding;
669
+ const fnCheckUpdate = ghostBinding?.checkUpdate;
670
+ if (fnCheckUpdate) {
671
+ ghostControl.getBindingInfo("any").binding.checkUpdate = (): void => {
672
+ return fnCheckUpdate.bind(ghostBinding)(true);
673
+ };
674
+ }
668
675
  ghostControl.setBindingContext(context);
669
676
  }
670
677
  return propBinding;
@@ -48,7 +48,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/CriticalityFormatter", "s
48
48
  controls: [],
49
49
  elements: [],
50
50
  // eslint-disable-next-line no-template-curly-in-string
51
- version: "1.124.0",
51
+ version: "1.124.1",
52
52
  noLibraryCSS: true,
53
53
  extensions: {
54
54
  //Configuration used for rule loading of Support Assistant
@@ -52,14 +52,14 @@ sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/u
52
52
  // Deregister global instance
53
53
  this.oFactory.removeGlobalInstance(this.oMetaModel);
54
54
  };
55
- _proto.validateCacheKey = async function validateCacheKey(sCacheIdentifier, oComponent) {
55
+ _proto.validateCacheKey = async function validateCacheKey(sCacheIdentifier, oComponent, environmentService) {
56
56
  // Keep track if the cache will anyway need to be updated
57
57
  let bCacheNeedUpdate = true;
58
58
  let sCacheKey;
59
59
  try {
60
60
  const mCacheOutput = await CacheManager.get(sCacheIdentifier);
61
61
  // We provide a default key so that an xml view cache is written
62
- const mMetaModelETags = this.getETags(oComponent);
62
+ const mMetaModelETags = this.getETags(oComponent, environmentService);
63
63
  sCacheKey = JSON.stringify(mMetaModelETags);
64
64
  // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
65
65
  if (mCacheOutput) {
@@ -112,9 +112,9 @@ sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/u
112
112
  this.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
113
113
  return sCacheKey;
114
114
  };
115
- _proto.invalidateIfNeeded = async function invalidateIfNeeded(sCacheKeys, sCacheIdentifier, oComponent) {
115
+ _proto.invalidateIfNeeded = async function invalidateIfNeeded(sCacheKeys, sCacheIdentifier, oComponent, environmentService) {
116
116
  // Check FE cache after XML view is processed completely
117
- const sDataSourceETags = JSON.stringify(this.getETags(oComponent));
117
+ const sDataSourceETags = JSON.stringify(this.getETags(oComponent, environmentService));
118
118
  if (this.mCacheNeedsInvalidate[sCacheIdentifier] || sCacheKeys && sCacheKeys !== sDataSourceETags) {
119
119
  // Something in the sources and/or its ETags changed -> update the FE cache
120
120
  const mCacheKeys = {};
@@ -127,7 +127,7 @@ sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/u
127
127
  return Promise.resolve();
128
128
  }
129
129
  };
130
- _proto.getETags = function getETags(oComponent) {
130
+ _proto.getETags = function getETags(oComponent, environmentService) {
131
131
  const mMetaModelETags = this.oMetaModel.getETags();
132
132
  // ETags from UI5 are either a Date or a string, let's rationalize that
133
133
  Object.keys(mMetaModelETags).forEach(function (sMetaModelKey) {
@@ -145,6 +145,10 @@ sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/u
145
145
  viewData: oComponent.getViewData()
146
146
  }));
147
147
  mMetaModelETags["manifest"] = sManifestHash;
148
+ const capabilities = environmentService.getCapabilities();
149
+ if (capabilities) {
150
+ mMetaModelETags["toggles"] = hash(JSON.stringify(capabilities));
151
+ }
148
152
  return mMetaModelETags;
149
153
  };
150
154
  _proto.getInterface = function getInterface() {
@@ -193,4 +197,4 @@ sap.ui.define(["sap/base/strings/hash", "sap/ui/core/cache/CacheManager", "sap/u
193
197
  }(ServiceFactory);
194
198
  return CacheHandlerServiceFactory;
195
199
  }, false);
196
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXRhZGF0YUVUYWciLCJzVXJsIiwic0VUYWciLCJtVXBkYXRlZE1ldGFNb2RlbEVUYWdzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJqUXVlcnkiLCJhamF4IiwibWV0aG9kIiwiZG9uZSIsIm9SZXNwb25zZSIsInNUZXh0U3RhdHVzIiwianFYSFIiLCJnZXRSZXNwb25zZUhlYWRlciIsImZhaWwiLCJDYWNoZUhhbmRsZXJTZXJ2aWNlIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9GYWN0b3J5IiwiZmFjdG9yeSIsIm1TZXR0aW5ncyIsInNldHRpbmdzIiwibWV0YU1vZGVsIiwiRXJyb3IiLCJvTWV0YU1vZGVsIiwib0FwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsIm9Db21wb25lbnQiLCJjb21wb25lbnQiLCJpbml0UHJvbWlzZSIsImZldGNoRW50aXR5Q29udGFpbmVyIiwidGhlbiIsIm1DYWNoZU5lZWRzSW52YWxpZGF0ZSIsImV4aXQiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsInZhbGlkYXRlQ2FjaGVLZXkiLCJzQ2FjaGVJZGVudGlmaWVyIiwiYkNhY2hlTmVlZFVwZGF0ZSIsInNDYWNoZUtleSIsIm1DYWNoZU91dHB1dCIsIkNhY2hlTWFuYWdlciIsImdldCIsIm1NZXRhTW9kZWxFVGFncyIsImdldEVUYWdzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhVmFsaWRFVGFncyIsImFsbCIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJpbmNsdWRlcyIsInNvbWUiLCJ2aWV3Q2FjaGVLZXkiLCJlIiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJtZXRhTW9kZWxFVGFnIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwic01hbmlmZXN0SGFzaCIsImhhc2giLCJzYXBBcHAiLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5IiwiX29JbnN0YW5jZVJlZ2lzdHJ5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJzTWV0YU1vZGVsSWQiLCJnZXRJZCIsImNhY2hlSGFuZGxlckluc3RhbmNlIiwiYXNzaWduIiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJjYXRjaCIsImdldEluc3RhbmNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoYXNoIGZyb20gXCJzYXAvYmFzZS9zdHJpbmdzL2hhc2hcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFFVGFnKHNVcmw6IHN0cmluZywgc0VUYWc6IHN0cmluZywgbVVwZGF0ZWRNZXRhTW9kZWxFVGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGZ1bmN0aW9uIChyZXNvbHZlKTogdm9pZCB7XG5cdFx0Ly8gVGhlcmUgaXMgYW4gVXJsIGluIHRoZSBGRSBjYWNoZSwgdGhhdCdzIG5vdCBpbiB0aGUgTWV0YU1vZGVsIHlldCAtPiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBFVGFnXG5cdFx0alF1ZXJ5XG5cdFx0XHQuYWpheChzVXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KVxuXHRcdFx0LmRvbmUoZnVuY3Rpb24gKG9SZXNwb25zZTogdW5rbm93biwgc1RleHRTdGF0dXM6IHN0cmluZywganFYSFI6IGpRdWVyeS5YSFIpIHtcblx0XHRcdFx0Ly8gRVRhZyBpcyBub3QgdGhlIHNhbWUgLT4gaW52YWxpZFxuXHRcdFx0XHQvLyBFVGFnIGlzIHRoZSBzYW1lIC0+IHZhbGlkXG5cdFx0XHRcdC8vIElmIEVUYWcgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSBMYXN0LU1vZGlmaWVkXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcihcIkVUYWdcIikgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpO1xuXHRcdFx0XHRyZXNvbHZlKHNFVGFnID09PSBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIENhc2UgMnogLSBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBtYXAgc28gdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZVxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0gXCJcIjtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9KTtcblx0fSk7XG59XG50eXBlIENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncyA9IHtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3M+IHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPHRoaXM+O1xuXG5cdG9GYWN0b3J5ITogQ2FjaGVIYW5kbGVyU2VydmljZUZhY3Rvcnk7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0b0NvbXBvbmVudCE6IFVJQ29tcG9uZW50O1xuXG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZSE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UodGhpcy5vTWV0YU1vZGVsKTtcblx0fVxuXG5cdGFzeW5jIHZhbGlkYXRlQ2FjaGVLZXkoc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nLCBvQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRsZXQgc0NhY2hlS2V5OiBzdHJpbmcgfCBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1DYWNoZU91dHB1dCA9IGF3YWl0IENhY2hlTWFuYWdlci5nZXQoc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHQvLyBXZSBwcm92aWRlIGEgZGVmYXVsdCBrZXkgc28gdGhhdCBhbiB4bWwgdmlldyBjYWNoZSBpcyB3cml0dGVuXG5cdFx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSB0aGlzLmdldEVUYWdzKG9Db21wb25lbnQpO1xuXHRcdFx0c0NhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkobU1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdC8vIENhc2UgIzFhIC0gTm8gY2FjaGUsIHNvIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBjYWNoZUtleSA9IGN1cnJlbnQgbWV0YW1vZGVsIEVUYWdzXG5cdFx0XHRpZiAobUNhY2hlT3V0cHV0KSB7XG5cdFx0XHRcdC8vIENhc2UgIzIgLSBDYWNoZSBlbnRyeSBmb3VuZCwgY2hlY2sgaWYgaXQncyBzdGlsbCB2YWxpZFxuXHRcdFx0XHRjb25zdCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPiA9IHt9O1xuXHRcdFx0XHRjb25zdCBtQ2FjaGVkRVRhZ3MgPSBKU09OLnBhcnNlKG1DYWNoZU91dHB1dC5jYWNoZWRFVGFncyk7XG5cdFx0XHRcdGNvbnN0IGFWYWxpZEVUYWdzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobUNhY2hlZEVUYWdzKS5tYXAoYXN5bmMgZnVuY3Rpb24gKHNVcmw6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgdmFsaWRpdHkgb2YgZXZlcnkgc2luZ2xlIFVybCB0aGF0J3MgaW4gdGhlIEZFIENhY2hlIG9iamVjdFxuXHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAobU1ldGFNb2RlbEVUYWdzW3NVcmxdKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBpbiB0aGUgY2FjaGUgYW5kIGluIHRoZSBtZXRhZGF0YVxuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0TWV0YWRhdGFFVGFnKHNVcmwsIG1DYWNoZWRFVGFnc1tzVXJsXSwgbVVwZGF0ZWRNZXRhTW9kZWxFVGFncyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJ6IC0gTGFzdCBUZW1wbGF0aW5nIGFkZGVkIGFuIFVSTCB3aXRob3V0IEVUYWdcblx0XHRcdFx0XHRcdFx0bVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSA9IG1NZXRhTW9kZWxFVGFnc1tzVXJsXTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IGFWYWxpZEVUYWdzLmluY2x1ZGVzKGZhbHNlKTtcblx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBhbmQgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdC8vIENhc2UgIzJiIC0gRGlmZmVyZW50IG51bWJlciBvZiBFVGFncyBhbmQgc3RpbGwgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdC8vIENhc2UgIzJjIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgYnV0IGRpZmZlcmVudCB2YWx1ZXMsIG1haW4gc2VydmljZSBFdGFnIGhhcyBjaGFuZ2VkLCB1c2UgdGhhdCBhcyBjYWNoZSBrZXlcblx0XHRcdFx0Ly8gQ2FzZSAjMmQgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGJ1dCBkaWZmZXJlbnQgdmFsdWUsIG1haW4gc2VydmljZSBFdGFnIG9yIGxpbmtlZCBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIG5ldyBFVGFncyBzaG91bGQgYmUgdXNlZCBhcyBjYWNoZUtleVxuXHRcdFx0XHQvLyBDYXNlICMyeiAtIENhY2hlIGhhcyBhbiBpbnZhbGlkIEV0YWcgLSBpZiB0aGVyZSBpcyBhbiBFdGFnIHByb3ZpZGVkIGZyb20gTWV0YU1vZGVsIHVzZSBpdCBhcyBjYWNoZUtleVxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0T2JqZWN0LmtleXMobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbiAoc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gIW1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gQXQgbGVhc3Qgb25lIG9mIHRoZSBNZXRhTW9kZWwgVVJMcyBkb2Vzbid0IHByb3ZpZGUgYW4gRVRhZywgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRcdHNDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0NhY2hlS2V5ID0gYkNhY2hlTmVlZFVwZGF0ZSA/IEpTT04uc3RyaW5naWZ5KG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MpIDogbUNhY2hlT3V0cHV0LnZpZXdDYWNoZUtleTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0T2JqZWN0LmtleXMobU1ldGFNb2RlbEVUYWdzKS5zb21lKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRyZXR1cm4gIW1NZXRhTW9kZWxFVGFnc1tzVXJsXTtcblx0XHRcdFx0fSlcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBjYWNoZSBjYW4gYmUgdXNlZCAoYWxsIHRoZSBtZXRhZGF0YSBhbmQgYW5ub3RhdGlvbnMgaGF2ZSB0byBwcm92aWRlIGF0IGxlYXN0IGEgRVRhZyBvciBhIExhc3QtTW9kaWZpZWQgaGVhZGVyKVxuXHRcdFx0XHQvLyBDYXNlICMxLWIgLSBObyBDYWNoZSwgbUNhY2hlT3VwdXQgaXMgZW1wdHksIGJ1dCBtZXRhbW9kZWwgZXRhZ3MgY2Fubm90IGJlIHVzZWQsIHNvIG5vIGNhY2hpbmdcblx0XHRcdFx0c0NhY2hlS2V5ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBEb24ndCB1c2UgdmlldyBjYWNoZSBpbiBjYXNlIG9mIGlzc3VlcyB3aXRoIHRoZSBMUlUgY2FjaGVcblx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0c0NhY2hlS2V5ID0gbnVsbDtcblx0XHR9XG5cblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZVtzQ2FjaGVJZGVudGlmaWVyXSA9IGJDYWNoZU5lZWRVcGRhdGU7XG5cdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0fVxuXG5cdGFzeW5jIGludmFsaWRhdGVJZk5lZWRlZChzQ2FjaGVLZXlzOiBzdHJpbmcsIHNDYWNoZUlkZW50aWZpZXI6IHN0cmluZywgb0NvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBDaGVjayBGRSBjYWNoZSBhZnRlciBYTUwgdmlldyBpcyBwcm9jZXNzZWQgY29tcGxldGVseVxuXHRcdGNvbnN0IHNEYXRhU291cmNlRVRhZ3MgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldEVUYWdzKG9Db21wb25lbnQpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0Ly8gTmV3IEVUYWdzIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZCwgbWF5IGRpZmZlciBmcm9tIHRoZSBvbmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdmlld1xuXHRcdFx0bUNhY2hlS2V5cy5jYWNoZWRFVGFncyA9IHNEYXRhU291cmNlRVRhZ3M7XG5cdFx0XHQvLyBPbGQgRVRhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgdGhlIHhtbCB2aWV3IGNhY2hlIGFzIGtleVxuXHRcdFx0bUNhY2hlS2V5cy52aWV3Q2FjaGVLZXkgPSBzQ2FjaGVLZXlzO1xuXHRcdFx0cmV0dXJuIENhY2hlTWFuYWdlci5zZXQoc0NhY2hlSWRlbnRpZmllciwgbUNhY2hlS2V5cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRFVGFncyhvQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+IHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSB0aGlzLm9NZXRhTW9kZWwuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFNb2RlbEtleTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBtZXRhTW9kZWxFVGFnOiBzdHJpbmcgfCBudWxsIHwgT2JqZWN0ID0gbU1ldGFNb2RlbEVUYWdzW3NNZXRhTW9kZWxLZXldO1xuXHRcdFx0aWYgKG1ldGFNb2RlbEVUYWcgIT09IG51bGwgJiYgbWV0YU1vZGVsRVRhZyBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0Ly8gTWV0YU1vZGVsIGNvbnRhaW5zIGEgTGFzdC1Nb2RpZmllZCB0aW1lc3RhbXAgZm9yIHRoZSBVUkxcblx0XHRcdFx0bU1ldGFNb2RlbEVUYWdzW3NNZXRhTW9kZWxLZXldID0gKG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSBhcyB1bmtub3duIGFzIERhdGUpLnRvSVNPU3RyaW5nKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBhZGQgYWxzbyB0aGUgbWFuaWZlc3QgaGFzaCBhcyBVSTUgb25seSBjb25zaWRlcnMgdGhlIHJvb3QgY29tcG9uZW50IGhhc2hcblx0XHRjb25zdCBvTWFuaWZlc3RDb250ZW50ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3Qgc01hbmlmZXN0SGFzaCA9IGhhc2goXG5cdFx0XHRKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdHNhcEFwcDogb01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0sXG5cdFx0XHRcdHZpZXdEYXRhOiBvQ29tcG9uZW50LmdldFZpZXdEYXRhKClcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRtTWV0YU1vZGVsRVRhZ3NbXCJtYW5pZmVzdFwiXSA9IHNNYW5pZmVzdEhhc2g7XG5cdFx0cmV0dXJuIG1NZXRhTW9kZWxFVGFncztcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIENhY2hlSGFuZGxlclNlcnZpY2UgfCBudWxsPiA9IHt9O1xuXG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPik6IFByb21pc2U8Q2FjaGVIYW5kbGVyU2VydmljZT4ge1xuXHRcdGNvbnN0IHNNZXRhTW9kZWxJZCA9IG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5tZXRhTW9kZWwuZ2V0SWQoKTtcblx0XHRsZXQgY2FjaGVIYW5kbGVySW5zdGFuY2UgPSB0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdO1xuXHRcdGlmICghY2FjaGVIYW5kbGVySW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBjYWNoZUhhbmRsZXJJbnN0YW5jZSA9IG5ldyBDYWNoZUhhbmRsZXJTZXJ2aWNlKFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGZhY3Rvcnk6IHRoaXMsXG5cdFx0XHRcdFx0XHRzY29wZU9iamVjdDogbnVsbCxcblx0XHRcdFx0XHRcdHNjb3BlVHlwZTogXCJzZXJ2aWNlXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9TZXJ2aWNlQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZUhhbmRsZXJJbnN0YW5jZS5pbml0UHJvbWlzZVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXSBhcyBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIGVycm9yIGRlbGV0ZSB0aGUgZ2xvYmFsIGluc3RhbmNlO1xuXHRcdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gbnVsbDtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0Z2V0SW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBDYWNoZUhhbmRsZXJTZXJ2aWNlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV07XG5cdH1cblxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IHZvaWQge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O0VBV0EsZUFBZUEsZUFBZSxDQUFDQyxJQUFZLEVBQUVDLEtBQWEsRUFBRUMsc0JBQXFELEVBQW9CO0lBQ3BJLE9BQU8sSUFBSUMsT0FBTyxDQUFVLFVBQVVDLE9BQU8sRUFBUTtNQUNwRDtNQUNBQyxNQUFNLENBQ0pDLElBQUksQ0FBQ04sSUFBSSxFQUFFO1FBQUVPLE1BQU0sRUFBRTtNQUFNLENBQUMsQ0FBQyxDQUM3QkMsSUFBSSxDQUFDLFVBQVVDLFNBQWtCLEVBQUVDLFdBQW1CLEVBQUVDLEtBQWlCLEVBQUU7UUFDM0U7UUFDQTtRQUNBO1FBQ0FULHNCQUFzQixDQUFDRixJQUFJLENBQUMsR0FBR1csS0FBSyxDQUFDQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSUQsS0FBSyxDQUFDQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFDMUdSLE9BQU8sQ0FBQ0gsS0FBSyxLQUFLQyxzQkFBc0IsQ0FBQ0YsSUFBSSxDQUFDLENBQUM7TUFDaEQsQ0FBQyxDQUFDLENBQ0RhLElBQUksQ0FBQyxZQUFZO1FBQ2pCO1FBQ0FYLHNCQUFzQixDQUFDRixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ2pDSSxPQUFPLENBQUMsS0FBSyxDQUFDO01BQ2YsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0g7RUFBQyxJQUtZVSxtQkFBbUI7SUFBQTtJQUFBO01BQUE7SUFBQTtJQUFBO0lBQUE7SUFBQSxPQWEvQkMsSUFBSSxHQUFKLGdCQUFhO01BQ1osTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxFQUFFO01BQ2xDLElBQUksQ0FBQ0MsUUFBUSxHQUFHRixRQUFRLENBQUNHLE9BQU87TUFDaEMsTUFBTUMsU0FBUyxHQUFHSixRQUFRLENBQUNLLFFBQVE7TUFDbkMsSUFBSSxDQUFDRCxTQUFTLENBQUNFLFNBQVMsRUFBRTtRQUN6QixNQUFNLElBQUlDLEtBQUssQ0FBQywrRUFBK0UsQ0FBQztNQUNqRztNQUNBLElBQUksQ0FBQ0MsVUFBVSxHQUFHSixTQUFTLENBQUNFLFNBQVM7TUFDckMsSUFBSSxDQUFDRyxhQUFhLEdBQUdMLFNBQVMsQ0FBQ00sWUFBWTtNQUMzQyxJQUFJLENBQUNDLFVBQVUsR0FBR1AsU0FBUyxDQUFDUSxTQUFTO01BQ3JDLElBQUksQ0FBQ0MsV0FBVyxHQUFHLElBQUksQ0FBQ0wsVUFBVSxDQUFDTSxvQkFBb0IsRUFBRSxDQUFDQyxJQUFJLENBQUMsTUFBTTtRQUNwRSxPQUFPLElBQUk7TUFDWixDQUFDLENBQUM7TUFDRixJQUFJLENBQUNDLHFCQUFxQixHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQUEsT0FFREMsSUFBSSxHQUFKLGdCQUFhO01BQ1o7TUFDQSxJQUFJLENBQUNmLFFBQVEsQ0FBQ2dCLG9CQUFvQixDQUFDLElBQUksQ0FBQ1YsVUFBVSxDQUFDO0lBQ3BELENBQUM7SUFBQSxPQUVLVyxnQkFBZ0IsR0FBdEIsZ0NBQXVCQyxnQkFBd0IsRUFBRVQsVUFBNkIsRUFBMEI7TUFDdkc7TUFDQSxJQUFJVSxnQkFBZ0IsR0FBRyxJQUFJO01BQzNCLElBQUlDLFNBQXdCO01BRTVCLElBQUk7UUFDSCxNQUFNQyxZQUFZLEdBQUcsTUFBTUMsWUFBWSxDQUFDQyxHQUFHLENBQUNMLGdCQUFnQixDQUFDO1FBQzdEO1FBQ0EsTUFBTU0sZUFBZSxHQUFHLElBQUksQ0FBQ0MsUUFBUSxDQUFDaEIsVUFBVSxDQUFDO1FBQ2pEVyxTQUFTLEdBQUdNLElBQUksQ0FBQ0MsU0FBUyxDQUFDSCxlQUFlLENBQUM7UUFDM0M7UUFDQSxJQUFJSCxZQUFZLEVBQUU7VUFDakI7VUFDQSxNQUFNckMsc0JBQXFELEdBQUcsQ0FBQyxDQUFDO1VBQ2hFLE1BQU00QyxZQUFZLEdBQUdGLElBQUksQ0FBQ0csS0FBSyxDQUFDUixZQUFZLENBQUNTLFdBQVcsQ0FBQztVQUN6RCxNQUFNQyxXQUFXLEdBQUcsTUFBTTlDLE9BQU8sQ0FBQytDLEdBQUcsQ0FDcENDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDTixZQUFZLENBQUMsQ0FBQ08sR0FBRyxDQUFDLGdCQUFnQnJELElBQVksRUFBRTtZQUMzRDtZQUNBLElBQUk4QyxZQUFZLENBQUM5QyxJQUFJLENBQUMsRUFBRTtjQUN2QixJQUFJMEMsZUFBZSxDQUFDMUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFCO2dCQUNBRSxzQkFBc0IsQ0FBQ0YsSUFBSSxDQUFDLEdBQUcwQyxlQUFlLENBQUMxQyxJQUFJLENBQUM7Z0JBQ3BELE9BQU84QyxZQUFZLENBQUM5QyxJQUFJLENBQUMsS0FBSzBDLGVBQWUsQ0FBQzFDLElBQUksQ0FBQztjQUNwRCxDQUFDLE1BQU07Z0JBQ047Z0JBQ0EsT0FBT0QsZUFBZSxDQUFDQyxJQUFJLEVBQUU4QyxZQUFZLENBQUM5QyxJQUFJLENBQUMsRUFBRUUsc0JBQXNCLENBQUM7Y0FDekU7WUFDRCxDQUFDLE1BQU07Y0FDTjtjQUNBQSxzQkFBc0IsQ0FBQ0YsSUFBSSxDQUFDLEdBQUcwQyxlQUFlLENBQUMxQyxJQUFJLENBQUM7Y0FDcEQsT0FBTzhDLFlBQVksQ0FBQzlDLElBQUksQ0FBQyxLQUFLMEMsZUFBZSxDQUFDMUMsSUFBSSxDQUFDO1lBQ3BEO1VBQ0QsQ0FBQyxDQUFDLENBQ0Y7VUFFRHFDLGdCQUFnQixHQUFHWSxXQUFXLENBQUNLLFFBQVEsQ0FBQyxLQUFLLENBQUM7VUFDOUM7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBLElBQ0NILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDbEQsc0JBQXNCLENBQUMsQ0FBQ3FELElBQUksQ0FBQyxVQUFVdkQsSUFBWSxFQUFFO1lBQ2hFLE9BQU8sQ0FBQ0Usc0JBQXNCLENBQUNGLElBQUksQ0FBQztVQUNyQyxDQUFDLENBQUMsRUFDRDtZQUNEO1lBQ0FzQyxTQUFTLEdBQUcsSUFBSTtVQUNqQixDQUFDLE1BQU07WUFDTkEsU0FBUyxHQUFHRCxnQkFBZ0IsR0FBR08sSUFBSSxDQUFDQyxTQUFTLENBQUMzQyxzQkFBc0IsQ0FBQyxHQUFHcUMsWUFBWSxDQUFDaUIsWUFBWTtVQUNsRztRQUNELENBQUMsTUFBTSxJQUNOTCxNQUFNLENBQUNDLElBQUksQ0FBQ1YsZUFBZSxDQUFDLENBQUNhLElBQUksQ0FBQyxVQUFVdkQsSUFBWSxFQUFFO1VBQ3pELE9BQU8sQ0FBQzBDLGVBQWUsQ0FBQzFDLElBQUksQ0FBQztRQUM5QixDQUFDLENBQUMsRUFDRDtVQUNEO1VBQ0E7VUFDQXNDLFNBQVMsR0FBRyxJQUFJO1FBQ2pCO01BQ0QsQ0FBQyxDQUFDLE9BQU9tQixDQUFDLEVBQUU7UUFDWDtRQUNBcEIsZ0JBQWdCLEdBQUcsSUFBSTtRQUN2QkMsU0FBUyxHQUFHLElBQUk7TUFDakI7TUFFQSxJQUFJLENBQUNOLHFCQUFxQixDQUFDSSxnQkFBZ0IsQ0FBQyxHQUFHQyxnQkFBZ0I7TUFDL0QsT0FBT0MsU0FBUztJQUNqQixDQUFDO0lBQUEsT0FFS29CLGtCQUFrQixHQUF4QixrQ0FBeUJDLFVBQWtCLEVBQUV2QixnQkFBd0IsRUFBRVQsVUFBNkIsRUFBaUI7TUFDcEg7TUFDQSxNQUFNaUMsZ0JBQWdCLEdBQUdoQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxJQUFJLENBQUNGLFFBQVEsQ0FBQ2hCLFVBQVUsQ0FBQyxDQUFDO01BQ2xFLElBQUksSUFBSSxDQUFDSyxxQkFBcUIsQ0FBQ0ksZ0JBQWdCLENBQUMsSUFBS3VCLFVBQVUsSUFBSUEsVUFBVSxLQUFLQyxnQkFBaUIsRUFBRTtRQUNwRztRQUNBLE1BQU1DLFVBQWtDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDO1FBQ0FBLFVBQVUsQ0FBQ2IsV0FBVyxHQUFHWSxnQkFBZ0I7UUFDekM7UUFDQUMsVUFBVSxDQUFDTCxZQUFZLEdBQUdHLFVBQVU7UUFDcEMsT0FBT25CLFlBQVksQ0FBQ3NCLEdBQUcsQ0FBQzFCLGdCQUFnQixFQUFFeUIsVUFBVSxDQUFDO01BQ3RELENBQUMsTUFBTTtRQUNOLE9BQU8xRCxPQUFPLENBQUNDLE9BQU8sRUFBRTtNQUN6QjtJQUNELENBQUM7SUFBQSxPQUVEdUMsUUFBUSxHQUFSLGtCQUFTaEIsVUFBNkIsRUFBaUM7TUFDdEUsTUFBTWUsZUFBZSxHQUFHLElBQUksQ0FBQ2xCLFVBQVUsQ0FBQ21CLFFBQVEsRUFBRTtNQUNsRDtNQUNBUSxNQUFNLENBQUNDLElBQUksQ0FBQ1YsZUFBZSxDQUFDLENBQUNxQixPQUFPLENBQUMsVUFBVUMsYUFBcUIsRUFBRTtRQUNyRSxNQUFNQyxhQUFxQyxHQUFHdkIsZUFBZSxDQUFDc0IsYUFBYSxDQUFDO1FBQzVFLElBQUlDLGFBQWEsS0FBSyxJQUFJLElBQUlBLGFBQWEsWUFBWUMsSUFBSSxFQUFFO1VBQzVEO1VBQ0F4QixlQUFlLENBQUNzQixhQUFhLENBQUMsR0FBSXRCLGVBQWUsQ0FBQ3NCLGFBQWEsQ0FBQyxDQUFxQkcsV0FBVyxFQUFFO1FBQ25HO01BQ0QsQ0FBQyxDQUFDOztNQUVGO01BQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDM0MsYUFBYSxDQUFDNEMsV0FBVyxFQUFFO01BQ3pELE1BQU1DLGFBQWEsR0FBR0MsSUFBSSxDQUN6QjNCLElBQUksQ0FBQ0MsU0FBUyxDQUFDO1FBQ2QyQixNQUFNLEVBQUVKLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUNuQ0ssUUFBUSxFQUFFOUMsVUFBVSxDQUFDK0MsV0FBVztNQUNqQyxDQUFDLENBQUMsQ0FDRjtNQUNEaEMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxHQUFHNEIsYUFBYTtNQUMzQyxPQUFPNUIsZUFBZTtJQUN2QixDQUFDO0lBQUEsT0FFRGlDLFlBQVksR0FBWix3QkFBcUI7TUFDcEIsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUFBO0VBQUEsRUFqSnVDQyxPQUFPO0VBQUE7RUFBQSxJQW9KMUNDLDBCQUEwQjtJQUFBO0lBQUE7TUFBQTtNQUFBO1FBQUE7TUFBQTtNQUFBO01BQUEsTUFDL0JDLGtCQUFrQixHQUErQyxDQUFDLENBQUM7TUFBQTtJQUFBO0lBQUE7SUFBQSxRQUU3REMsY0FBYyxHQUFwQiw4QkFBcUJDLGVBQTRELEVBQWdDO01BQ2hILE1BQU1DLFlBQVksR0FBR0QsZUFBZSxDQUFDM0QsUUFBUSxDQUFDQyxTQUFTLENBQUM0RCxLQUFLLEVBQUU7TUFDL0QsSUFBSUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQ0csWUFBWSxDQUFDO01BQ2hFLElBQUksQ0FBQ0Usb0JBQW9CLEVBQUU7UUFDMUIsSUFBSSxDQUFDTCxrQkFBa0IsQ0FBQ0csWUFBWSxDQUFDLEdBQUdFLG9CQUFvQixHQUFHLElBQUlyRSxtQkFBbUIsQ0FDckZxQyxNQUFNLENBQUNpQyxNQUFNLENBQ1o7VUFDQ2pFLE9BQU8sRUFBRSxJQUFJO1VBQ2JrRSxXQUFXLEVBQUUsSUFBSTtVQUNqQkMsU0FBUyxFQUFFO1FBQ1osQ0FBQyxFQUNETixlQUFlLENBQ2YsQ0FDRDtNQUNGO01BRUEsT0FBT0csb0JBQW9CLENBQUN0RCxXQUFXLENBQ3JDRSxJQUFJLENBQUMsTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFDK0Msa0JBQWtCLENBQUNHLFlBQVksQ0FBQztNQUM3QyxDQUFDLENBQUMsQ0FDRE0sS0FBSyxDQUFFOUIsQ0FBVSxJQUFLO1FBQ3RCO1FBQ0EsSUFBSSxDQUFDcUIsa0JBQWtCLENBQUNHLFlBQVksQ0FBQyxHQUFHLElBQUk7UUFDNUMsTUFBTXhCLENBQUM7TUFDUixDQUFDLENBQUM7SUFDSixDQUFDO0lBQUEsUUFFRCtCLFdBQVcsR0FBWCxxQkFBWWhFLFVBQTBCLEVBQThCO01BQ25FLE9BQU8sSUFBSSxDQUFDc0Qsa0JBQWtCLENBQUN0RCxVQUFVLENBQUMwRCxLQUFLLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBQUEsUUFFRGhELG9CQUFvQixHQUFwQiw4QkFBcUJWLFVBQTBCLEVBQVE7TUFDdEQsSUFBSSxDQUFDc0Qsa0JBQWtCLENBQUN0RCxVQUFVLENBQUMwRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7SUFDbkQsQ0FBQztJQUFBO0VBQUEsRUFwQ3VDTyxjQUFjO0VBQUEsT0F1Q3hDWiwwQkFBMEI7QUFBQSJ9
200
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZXRhZGF0YUVUYWciLCJzVXJsIiwic0VUYWciLCJtVXBkYXRlZE1ldGFNb2RlbEVUYWdzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJqUXVlcnkiLCJhamF4IiwibWV0aG9kIiwiZG9uZSIsIm9SZXNwb25zZSIsInNUZXh0U3RhdHVzIiwianFYSFIiLCJnZXRSZXNwb25zZUhlYWRlciIsImZhaWwiLCJDYWNoZUhhbmRsZXJTZXJ2aWNlIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsIm9GYWN0b3J5IiwiZmFjdG9yeSIsIm1TZXR0aW5ncyIsInNldHRpbmdzIiwibWV0YU1vZGVsIiwiRXJyb3IiLCJvTWV0YU1vZGVsIiwib0FwcENvbXBvbmVudCIsImFwcENvbXBvbmVudCIsIm9Db21wb25lbnQiLCJjb21wb25lbnQiLCJpbml0UHJvbWlzZSIsImZldGNoRW50aXR5Q29udGFpbmVyIiwidGhlbiIsIm1DYWNoZU5lZWRzSW52YWxpZGF0ZSIsImV4aXQiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsInZhbGlkYXRlQ2FjaGVLZXkiLCJzQ2FjaGVJZGVudGlmaWVyIiwiZW52aXJvbm1lbnRTZXJ2aWNlIiwiYkNhY2hlTmVlZFVwZGF0ZSIsInNDYWNoZUtleSIsIm1DYWNoZU91dHB1dCIsIkNhY2hlTWFuYWdlciIsImdldCIsIm1NZXRhTW9kZWxFVGFncyIsImdldEVUYWdzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhVmFsaWRFVGFncyIsImFsbCIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJpbmNsdWRlcyIsInNvbWUiLCJ2aWV3Q2FjaGVLZXkiLCJlIiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJtZXRhTW9kZWxFVGFnIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwic01hbmlmZXN0SGFzaCIsImhhc2giLCJzYXBBcHAiLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiY2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5IiwiX29JbnN0YW5jZVJlZ2lzdHJ5IiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJzTWV0YU1vZGVsSWQiLCJnZXRJZCIsImNhY2hlSGFuZGxlckluc3RhbmNlIiwiYXNzaWduIiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJjYXRjaCIsImdldEluc3RhbmNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBoYXNoIGZyb20gXCJzYXAvYmFzZS9zdHJpbmdzL2hhc2hcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBqUXVlcnkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L2pxdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0TWV0YWRhdGFFVGFnKHNVcmw6IHN0cmluZywgc0VUYWc6IHN0cmluZywgbVVwZGF0ZWRNZXRhTW9kZWxFVGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGZ1bmN0aW9uIChyZXNvbHZlKTogdm9pZCB7XG5cdFx0Ly8gVGhlcmUgaXMgYW4gVXJsIGluIHRoZSBGRSBjYWNoZSwgdGhhdCdzIG5vdCBpbiB0aGUgTWV0YU1vZGVsIHlldCAtPiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBFVGFnXG5cdFx0alF1ZXJ5XG5cdFx0XHQuYWpheChzVXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KVxuXHRcdFx0LmRvbmUoZnVuY3Rpb24gKG9SZXNwb25zZTogdW5rbm93biwgc1RleHRTdGF0dXM6IHN0cmluZywganFYSFI6IGpRdWVyeS5YSFIpIHtcblx0XHRcdFx0Ly8gRVRhZyBpcyBub3QgdGhlIHNhbWUgLT4gaW52YWxpZFxuXHRcdFx0XHQvLyBFVGFnIGlzIHRoZSBzYW1lIC0+IHZhbGlkXG5cdFx0XHRcdC8vIElmIEVUYWcgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSBMYXN0LU1vZGlmaWVkXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcihcIkVUYWdcIikgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpO1xuXHRcdFx0XHRyZXNvbHZlKHNFVGFnID09PSBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIENhc2UgMnogLSBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBtYXAgc28gdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZVxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0gXCJcIjtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9KTtcblx0fSk7XG59XG50eXBlIENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncyA9IHtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3M+IHtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPHRoaXM+O1xuXG5cdG9GYWN0b3J5ITogQ2FjaGVIYW5kbGVyU2VydmljZUZhY3Rvcnk7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0b0NvbXBvbmVudCE6IFVJQ29tcG9uZW50O1xuXG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZSE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UodGhpcy5vTWV0YU1vZGVsKTtcblx0fVxuXG5cdGFzeW5jIHZhbGlkYXRlQ2FjaGVLZXkoXG5cdFx0c0NhY2hlSWRlbnRpZmllcjogc3RyaW5nLFxuXHRcdG9Db21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50LFxuXHRcdGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlXG5cdCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRsZXQgc0NhY2hlS2V5OiBzdHJpbmcgfCBudWxsO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1DYWNoZU91dHB1dCA9IGF3YWl0IENhY2hlTWFuYWdlci5nZXQoc0NhY2hlSWRlbnRpZmllcik7XG5cdFx0XHQvLyBXZSBwcm92aWRlIGEgZGVmYXVsdCBrZXkgc28gdGhhdCBhbiB4bWwgdmlldyBjYWNoZSBpcyB3cml0dGVuXG5cdFx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSB0aGlzLmdldEVUYWdzKG9Db21wb25lbnQsIGVudmlyb25tZW50U2VydmljZSk7XG5cdFx0XHRzQ2FjaGVLZXkgPSBKU09OLnN0cmluZ2lmeShtTWV0YU1vZGVsRVRhZ3MpO1xuXHRcdFx0Ly8gQ2FzZSAjMWEgLSBObyBjYWNoZSwgc28gbUNhY2hlT3VwdXQgaXMgZW1wdHksIGNhY2hlS2V5ID0gY3VycmVudCBtZXRhbW9kZWwgRVRhZ3Ncblx0XHRcdGlmIChtQ2FjaGVPdXRwdXQpIHtcblx0XHRcdFx0Ly8gQ2FzZSAjMiAtIENhY2hlIGVudHJ5IGZvdW5kLCBjaGVjayBpZiBpdCdzIHN0aWxsIHZhbGlkXG5cdFx0XHRcdGNvbnN0IG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+ID0ge307XG5cdFx0XHRcdGNvbnN0IG1DYWNoZWRFVGFncyA9IEpTT04ucGFyc2UobUNhY2hlT3V0cHV0LmNhY2hlZEVUYWdzKTtcblx0XHRcdFx0Y29uc3QgYVZhbGlkRVRhZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhtQ2FjaGVkRVRhZ3MpLm1hcChhc3luYyBmdW5jdGlvbiAoc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayB2YWxpZGl0eSBvZiBldmVyeSBzaW5nbGUgVXJsIHRoYXQncyBpbiB0aGUgRkUgQ2FjaGUgb2JqZWN0XG5cdFx0XHRcdFx0XHRpZiAobUNhY2hlZEVUYWdzW3NVcmxdKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBDYXNlICMyYSAtIFNhbWUgbnVtYmVyIG9mIEVUYWdzIGluIHRoZSBjYWNoZSBhbmQgaW4gdGhlIG1ldGFkYXRhXG5cdFx0XHRcdFx0XHRcdFx0bVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSA9IG1NZXRhTW9kZWxFVGFnc1tzVXJsXTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmIgLSBObyBFVGFnIGluIHRoZSBjYWNoZSBmb3IgdGhhdCBVUkwsIGNhY2hlZEVUYWdzIHdhcyBlbmhhbmNlZFxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRiQ2FjaGVOZWVkVXBkYXRlID0gYVZhbGlkRVRhZ3MuaW5jbHVkZXMoZmFsc2UpO1xuXHRcdFx0XHQvLyBDYXNlICMyYSAtIFNhbWUgbnVtYmVyIG9mIEVUYWdzIGFuZCBhbGwgdmFsaWQgLT4gd2UgcmV0dXJuIHRoZSB2aWV3Q2FjaGVLZXlcblx0XHRcdFx0Ly8gQ2FzZSAjMmIgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGFuZCBzdGlsbCBhbGwgdmFsaWQgLT4gd2UgcmV0dXJuIHRoZSB2aWV3Q2FjaGVLZXlcblx0XHRcdFx0Ly8gQ2FzZSAjMmMgLSBTYW1lIG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlcywgbWFpbiBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIHVzZSB0aGF0IGFzIGNhY2hlIGtleVxuXHRcdFx0XHQvLyBDYXNlICMyZCAtIERpZmZlcmVudCBudW1iZXIgb2YgRVRhZ3MgYnV0IGRpZmZlcmVudCB2YWx1ZSwgbWFpbiBzZXJ2aWNlIEV0YWcgb3IgbGlua2VkIHNlcnZpY2UgRXRhZyBoYXMgY2hhbmdlZCwgbmV3IEVUYWdzIHNob3VsZCBiZSB1c2VkIGFzIGNhY2hlS2V5XG5cdFx0XHRcdC8vIENhc2UgIzJ6IC0gQ2FjaGUgaGFzIGFuIGludmFsaWQgRXRhZyAtIGlmIHRoZXJlIGlzIGFuIEV0YWcgcHJvdmlkZWQgZnJvbSBNZXRhTW9kZWwgdXNlIGl0IGFzIGNhY2hlS2V5XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKS5zb21lKGZ1bmN0aW9uIChzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBBdCBsZWFzdCBvbmUgb2YgdGhlIE1ldGFNb2RlbCBVUkxzIGRvZXNuJ3QgcHJvdmlkZSBhbiBFVGFnLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0c0NhY2hlS2V5ID0gbnVsbDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzQ2FjaGVLZXkgPSBiQ2FjaGVOZWVkVXBkYXRlID8gSlNPTi5zdHJpbmdpZnkobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykgOiBtQ2FjaGVPdXRwdXQudmlld0NhY2hlS2V5O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRPYmplY3Qua2V5cyhtTWV0YU1vZGVsRVRhZ3MpLnNvbWUoZnVuY3Rpb24gKHNVcmw6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdC8vIENhc2UgIzEtYiAtIE5vIENhY2hlLCBtQ2FjaGVPdXB1dCBpcyBlbXB0eSwgYnV0IG1ldGFtb2RlbCBldGFncyBjYW5ub3QgYmUgdXNlZCwgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRzQ2FjaGVLZXkgPSBudWxsO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIERvbid0IHVzZSB2aWV3IGNhY2hlIGluIGNhc2Ugb2YgaXNzdWVzIHdpdGggdGhlIExSVSBjYWNoZVxuXHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRzQ2FjaGVLZXkgPSBudWxsO1xuXHRcdH1cblxuXHRcdHRoaXMubUNhY2hlTmVlZHNJbnZhbGlkYXRlW3NDYWNoZUlkZW50aWZpZXJdID0gYkNhY2hlTmVlZFVwZGF0ZTtcblx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHR9XG5cblx0YXN5bmMgaW52YWxpZGF0ZUlmTmVlZGVkKFxuXHRcdHNDYWNoZUtleXM6IHN0cmluZyxcblx0XHRzQ2FjaGVJZGVudGlmaWVyOiBzdHJpbmcsXG5cdFx0b0NvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQsXG5cdFx0ZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Vcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncyhvQ29tcG9uZW50LCBlbnZpcm9ubWVudFNlcnZpY2UpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXHRcdFx0Ly8gTmV3IEVUYWdzIHRoYXQgbmVlZCB0byBiZSB2ZXJpZmllZCwgbWF5IGRpZmZlciBmcm9tIHRoZSBvbmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdmlld1xuXHRcdFx0bUNhY2hlS2V5cy5jYWNoZWRFVGFncyA9IHNEYXRhU291cmNlRVRhZ3M7XG5cdFx0XHQvLyBPbGQgRVRhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgdGhlIHhtbCB2aWV3IGNhY2hlIGFzIGtleVxuXHRcdFx0bUNhY2hlS2V5cy52aWV3Q2FjaGVLZXkgPSBzQ2FjaGVLZXlzO1xuXHRcdFx0cmV0dXJuIENhY2hlTWFuYWdlci5zZXQoc0NhY2hlSWRlbnRpZmllciwgbUNhY2hlS2V5cyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRnZXRFVGFncyhvQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCwgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsPiB7XG5cdFx0Y29uc3QgbU1ldGFNb2RlbEVUYWdzID0gdGhpcy5vTWV0YU1vZGVsLmdldEVUYWdzKCk7XG5cdFx0Ly8gRVRhZ3MgZnJvbSBVSTUgYXJlIGVpdGhlciBhIERhdGUgb3IgYSBzdHJpbmcsIGxldCdzIHJhdGlvbmFsaXplIHRoYXRcblx0XHRPYmplY3Qua2V5cyhtTWV0YU1vZGVsRVRhZ3MpLmZvckVhY2goZnVuY3Rpb24gKHNNZXRhTW9kZWxLZXk6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsRVRhZzogc3RyaW5nIHwgbnVsbCB8IE9iamVjdCA9IG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XTtcblx0XHRcdGlmIChtZXRhTW9kZWxFVGFnICE9PSBudWxsICYmIG1ldGFNb2RlbEVUYWcgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdC8vIE1ldGFNb2RlbCBjb250YWlucyBhIExhc3QtTW9kaWZpZWQgdGltZXN0YW1wIGZvciB0aGUgVVJMXG5cdFx0XHRcdG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSA9IChtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gYXMgdW5rbm93biBhcyBEYXRlKS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGFsc28gdGhlIG1hbmlmZXN0IGhhc2ggYXMgVUk1IG9ubHkgY29uc2lkZXJzIHRoZSByb290IGNvbXBvbmVudCBoYXNoXG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IHNNYW5pZmVzdEhhc2ggPSBoYXNoKFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRzYXBBcHA6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLFxuXHRcdFx0XHR2aWV3RGF0YTogb0NvbXBvbmVudC5nZXRWaWV3RGF0YSgpXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0bU1ldGFNb2RlbEVUYWdzW1wibWFuaWZlc3RcIl0gPSBzTWFuaWZlc3RIYXNoO1xuXHRcdGNvbnN0IGNhcGFiaWxpdGllcyA9IGVudmlyb25tZW50U2VydmljZS5nZXRDYXBhYmlsaXRpZXMoKTtcblx0XHRpZiAoY2FwYWJpbGl0aWVzKSB7XG5cdFx0XHRtTWV0YU1vZGVsRVRhZ3NbXCJ0b2dnbGVzXCJdID0gaGFzaChKU09OLnN0cmluZ2lmeShjYXBhYmlsaXRpZXMpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbU1ldGFNb2RlbEVUYWdzO1xuXHR9XG5cblx0Z2V0SW50ZXJmYWNlKCk6IHRoaXMge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPiB7XG5cdF9vSW5zdGFuY2VSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgQ2FjaGVIYW5kbGVyU2VydmljZSB8IG51bGw+ID0ge307XG5cblx0YXN5bmMgY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3M+KTogUHJvbWlzZTxDYWNoZUhhbmRsZXJTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgc01ldGFNb2RlbElkID0gb1NlcnZpY2VDb250ZXh0LnNldHRpbmdzLm1ldGFNb2RlbC5nZXRJZCgpO1xuXHRcdGxldCBjYWNoZUhhbmRsZXJJbnN0YW5jZSA9IHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF07XG5cdFx0aWYgKCFjYWNoZUhhbmRsZXJJbnN0YW5jZSkge1xuXHRcdFx0dGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXSA9IGNhY2hlSGFuZGxlckluc3RhbmNlID0gbmV3IENhY2hlSGFuZGxlclNlcnZpY2UoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0ZmFjdG9yeTogdGhpcyxcblx0XHRcdFx0XHRcdHNjb3BlT2JqZWN0OiBudWxsLFxuXHRcdFx0XHRcdFx0c2NvcGVUeXBlOiBcInNlcnZpY2VcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b1NlcnZpY2VDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNhY2hlSGFuZGxlckluc3RhbmNlLmluaXRQcm9taXNlXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdIGFzIENhY2hlSGFuZGxlclNlcnZpY2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlOiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgZXJyb3IgZGVsZXRlIHRoZSBnbG9iYWwgaW5zdGFuY2U7XG5cdFx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBudWxsO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRnZXRJbnN0YW5jZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IENhY2hlSGFuZGxlclNlcnZpY2UgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbb01ldGFNb2RlbC5nZXRJZCgpXTtcblx0fVxuXG5cdHJlbW92ZUdsb2JhbEluc3RhbmNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogdm9pZCB7XG5cdFx0dGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbb01ldGFNb2RlbC5nZXRJZCgpXSA9IG51bGw7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FjaGVIYW5kbGVyU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUFZQSxlQUFlQSxlQUFlLENBQUNDLElBQVksRUFBRUMsS0FBYSxFQUFFQyxzQkFBcUQsRUFBb0I7SUFDcEksT0FBTyxJQUFJQyxPQUFPLENBQVUsVUFBVUMsT0FBTyxFQUFRO01BQ3BEO01BQ0FDLE1BQU0sQ0FDSkMsSUFBSSxDQUFDTixJQUFJLEVBQUU7UUFBRU8sTUFBTSxFQUFFO01BQU0sQ0FBQyxDQUFDLENBQzdCQyxJQUFJLENB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