@sapui5/sap.fe.core 1.136.11 → 1.136.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppStateHandler.js +8 -2
  4. package/src/sap/fe/core/AppStateHandler.ts +9 -1
  5. package/src/sap/fe/core/TemplateComponent.js +1 -1
  6. package/src/sap/fe/core/TemplateComponent.ts +1 -3
  7. package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
  8. package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
  9. package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
  10. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
  11. package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  12. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
  13. package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
  14. package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
  15. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
  16. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
  17. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
  18. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
  19. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
  20. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
  21. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
  22. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
  23. package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
  24. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
  25. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
  26. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
  27. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
  28. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
  29. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  30. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  31. package/src/sap/fe/core/fpm/manifest.json +1 -1
  32. package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
  33. package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
  34. package/src/sap/fe/core/library.js +1 -1
  35. package/src/sap/fe/core/messagebundle_da.properties +1 -1
  36. package/src/sap/fe/core/messagebundle_ko.properties +3 -3
  37. package/src/sap/fe/core/messagebundle_uk.properties +2 -2
  38. package/src/sap/fe/core/messagebundle_vi.properties +4 -4
  39. package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
  40. package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
  41. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
  42. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
  43. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
  44. package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
@@ -416,8 +416,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
416
416
  } else if (isConstant(resolvedBinding) && typeof resolvedBinding.value === "string") {
417
417
  // Then it's a module-method reference "sap.xxx.yyy.doSomething"
418
418
  const methodPath = resolvedBinding.value;
419
+ const internalModelPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
419
420
  // FIXME: The custom "isEnabled" check does not trigger (because none of the bound values changes)
420
- result = formatResult([pathInModel("/", "$view"), methodPath, pathInModel("selectedContexts", "internal")], fpmFormatter.customBooleanPropertyCheck, !forContextMenu ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType() : undefined);
421
+ result = formatResult([pathInModel("/", "$view"), methodPath, pathInModel(internalModelPath, "internal")], fpmFormatter.customBooleanPropertyCheck, !forContextMenu ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType() : undefined);
421
422
  } else {
422
423
  // then it's a binding
423
424
  result = resolvedBinding;
@@ -607,4 +608,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/conver
607
608
  _exports.getCreateNextButtonVisibility = getCreateNextButtonVisibility;
608
609
  return _exports;
609
610
  }, false);
610
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiX2V4cG9ydHMiLCJhaUljb24iLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9ucyIsIm1lbnVBY3Rpb25Ob3RWaXNpYmxlIiwibWVudUFjdGlvblZpc2libGVQYXRocyIsImF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlIiwibWVudUl0ZW1zVmlzaWJsZVBhdGhzIiwiZm9yRWFjaCIsIm1lbnVBY3Rpb24iLCJ2aXNpYmxlIiwidmFsdWVPZiIsInB1c2giLCJtZW51IiwibGVuZ3RoIiwibWVudUl0ZW0iLCJtZW51SXRlbVZpc2libGUiLCJ0b1N0cmluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ2aXNpYmxlRXhwcmVzc2lvbnMiLCJtYXAiLCJtZW51SXRlbVZpc2libGVQYXRoIiwiYW5kIiwib3IiLCJhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uIiwiYWN0aW9uIiwidHlwZSIsIm5vdCIsImVxdWFsIiwiVUkiLCJoYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiIsIm1hcEFjdGlvbkJ5S2V5IiwibWFuaWZlc3RBY3Rpb25zIiwiYW5ub3RhdGlvbkFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhbm5vdGF0aW9uQWN0aW9uIiwiZmluZCIsImtleSIsIm1hbmlmZXN0QWN0aW9uIiwicmVzdWx0QWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImFjdGlvbkFubm90YXRpb24iLCJBY3Rpb25UeXBlIiwiTWVudSIsImVuYWJsZWQiLCJwcm9wIiwicHJvcEtleSIsImNhbkJlTWVudUl0ZW0iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJtYXBNZW51RGVmYXVsdEFjdGlvbiIsImNvbW1hbmRBY3Rpb25zIiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJtYXBNZW51SXRlbXMiLCJtYXBwZWRNZW51SXRlbXMiLCJtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24iLCJtZW51SXRlbUtleSIsIm1hcHBlZE1lbnVBY3Rpb24iLCJ0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMiLCJhbGxBY3Rpb25zIiwiYWN0aW9uS2V5c1RvRGVsZXRlIiwidW5kZWZpbmVkIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsInJlc3VsdCIsImdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlciIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsImlmRWxzZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJwYXRoSW5Nb2RlbCIsImdyZWF0ZXJPckVxdWFsIiwiX2dldE1hbmlmZXN0VmlzaWJsZSIsIm92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInByZXNzIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiaGlkZGVuQWN0aW9ucyIsImZhY2V0TmFtZSIsImxhc3REb3RJbmRleCIsImxhc3RJbmRleE9mIiwiaWQiLCJzdGFydHNXaXRoIiwiZ2V0Q3VzdG9tQWN0aW9uSUQiLCJEZWZhdWx0IiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwiaGFuZGxlck1vZHVsZSIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJoYW5kbGVyTWV0aG9kIiwidGV4dCIsIm5vV3JhcCIsIl9fbm9XcmFwIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsImlzQUlPcGVyYXRpb24iLCJwcm9wZXJ0eVZhbHVlIiwicmVzb2x2ZWRCaW5kaW5nIiwiaXNDb25zdGFudCIsInZhbHVlIiwiY29uc3RhbnQiLCJtZXRob2RQYXRoIiwiZm9ybWF0UmVzdWx0IiwiZnBtRm9ybWF0dGVyIiwiY3VzdG9tQm9vbGVhblByb3BlcnR5Q2hlY2siLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJyZW1vdmVEdXBsaWNhdGVBY3Rpb25zIiwib01lbnVJdGVtS2V5cyIsImFjdGlvbk1lbnUiLCJyZWR1Y2UiLCJpdGVtIiwiX3JlZiIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbiIsImFjdGlvblRhcmdldCIsInBhdGhGcm9tQ29udGV4dExvY2F0aW9uIiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW5hYmxlZEV4cCIsImdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIiwiZ2V0Q29udmVydGVkVHlwZXMiLCJjb2xsYWJvcmF0aW9uT25Sb290IiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZEZyb21Db252ZXJ0ZXJDb250ZXh0IiwiZ2V0RHJhZnRSb290IiwiZ2V0RW50aXR5U2V0IiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24iLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJtYXBwaW5ncyIsIm1hcHBpbmciLCJMb2NhbFByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCIsImRldGFpbE9yRGlzcGxheSIsImRldGFpbCIsImRpc3BsYXkiLCJyb3V0ZSIsImFmdGVyRXhlY3V0aW9uIiwibmF2aWdhdGVUb0luc3RhbmNlIiwiZGF0YUZpZWxkSXNDb3B5QWN0aW9uIiwiZGF0YUZpZWxkIiwiSXNDb3B5QWN0aW9uIiwiJFR5cGUiLCJnZXRDb3B5QWN0aW9uIiwiY29weURhdGFGaWVsZHMiLCJMb2ciLCJlcnJvciIsImdldEFubm90YXRpb25NZW51QWN0aW9uSXRlbXMiLCJtZW51QWN0aW9uSXRlbXMiLCJnZXRNYXRjaGluZ01hbmlmZXN0QWN0aW9uIiwiYW5ub3RhdGlvbk1lbnVJdGVtcyIsIm1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zIiwicHJlcGFyZU1lbnVBY3Rpb25zIiwidW5wcmVwYXJlZEFjdGlvbnMiLCJvdmVycmlkZU1lbnVBY3Rpb25zIiwiZm91bmRBY3Rpb24iLCJtZW51SXRlbUluZGV4Iiwib3ZlcnJpZGVNZW51QWN0aW9uIiwic3BsaWNlIiwiaXNNZW51QUlPcGVyYXRpb24iLCJldmVyeSIsImlzQWN0aW9uQUlPcGVyYXRpb24iLCJBY3Rpb25UYXJnZXQiLCJJc0FJT3BlcmF0aW9uIiwiZ2V0Q3JlYXRlTmV4dEJ1dHRvblZpc2liaWxpdHkiLCJoaWRkZW5EcmFmdEVuYWJsZWQiLCJmY2xFbmFibGVkIiwiRHJhZnQiLCJJc05ld09iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25Hcm91cFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z3JlYXRlck9yRXF1YWwsXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0bm90LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUge1xuXHRDdXN0b21EZWZpbmVkVGFibGVDb2x1bW5Gb3JPdmVycmlkZSxcblx0TWFuaWZlc3RBY3Rpb24sXG5cdE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50LCBPdmVycmlkZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGdldEN1c3RvbUFjdGlvbklEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IGZwbUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9GUE1Gb3JtYXR0ZXJcIjtcbmltcG9ydCB7IERyYWZ0LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgcmVwbGFjZVNwZWNpYWxDaGFycyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25FbmFibGVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbmV4cG9ydCBlbnVtIEJ1dHRvblR5cGUge1xuXHRBY2NlcHQgPSBcIkFjY2VwdFwiLFxuXHRBdHRlbnRpb24gPSBcIkF0dGVudGlvblwiLFxuXHRCYWNrID0gXCJCYWNrXCIsXG5cdENyaXRpY2FsID0gXCJDcml0aWNhbFwiLFxuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdEVtcGhhc2l6ZWQgPSBcIkVtcGhhc2l6ZWRcIixcblx0R2hvc3QgPSBcIkdob3N0XCIsXG5cdE5lZ2F0aXZlID0gXCJOZWdhdGl2ZVwiLFxuXHROZXV0cmFsID0gXCJOZXV0cmFsXCIsXG5cdFJlamVjdCA9IFwiUmVqZWN0XCIsXG5cdFN1Y2Nlc3MgPSBcIlN1Y2Nlc3NcIixcblx0VHJhbnNwYXJlbnQgPSBcIlRyYW5zcGFyZW50XCIsXG5cdFVuc3R5bGVkID0gXCJVbnN0eWxlZFwiLFxuXHRVcCA9IFwiVXBcIlxufVxuXG5leHBvcnQgY29uc3QgYWlJY29uID0gXCJzYXAtaWNvbjovL2FpXCI7XG5cbmV4cG9ydCB0eXBlIEJhc2VBY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0eXBlPzogQWN0aW9uVHlwZTtcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlZEZvckNvbnRleHRNZW51PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHZpc2libGU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZUZvckNvbnRleHRNZW51PzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdG1lbnU/OiBCYXNlQWN0aW9uW107XG5cdGZhY2V0TmFtZT86IHN0cmluZztcblx0Y29tbWFuZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0aXNBSU9wZXJhdGlvbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uQWN0aW9uID0gQmFzZUFjdGlvbiAmIHtcblx0dHlwZTogQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbiB8IEFjdGlvblR5cGUuTWVudSB8IEFjdGlvblR5cGUuQ29weTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0Y3VzdG9tRGF0YT86IHN0cmluZztcblx0cmVxdWlyZXNEaWFsb2c/OiBzdHJpbmc7XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdGJ1dHRvblR5cGU/OiBCdXR0b25UeXBlLkdob3N0IHwgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCB8IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb25BY3Rpb25Hcm91cCA9IEJhc2VBY3Rpb24gJiB7XG5cdC8vIGltcGxlbWVudHMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0dHlwZTogQWN0aW9uVHlwZS5NZW51O1xuXHRtZW51OiBBbm5vdGF0aW9uQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21BY3Rpb24gPSBDdXN0b21FbGVtZW50PFxuXHRCYXNlQWN0aW9uICYge1xuXHRcdGhhbmRsZXJNZXRob2Q/OiBzdHJpbmc7XG5cdFx0aGFuZGxlck1vZHVsZT86IHN0cmluZztcblx0XHRub1dyYXA/OiBib29sZWFuOyAvLyBJbmRpY2F0ZXMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHRoZSB3cmFwcGluZyBmcm9tIHRoZSBGUE1IZWxwZXJcblx0XHRyZXF1aXJlc1NlbGVjdGlvbj86IGJvb2xlYW47XG5cdFx0ZGVmYXVsdEFjdGlvbj86IHN0cmluZyB8IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb247IC8vIEluZGljYXRlcyB3aGV0aGVyIGEgZGVmYXVsdCBhY3Rpb24gZXhpc3RzIGluIHRoaXMgY29udGV4dFxuXHR9XG4+O1xuXG5leHBvcnQgdHlwZSBBbm5vdGF0aW9uQWN0aW9uR3JvdXAgPSBCYXNlQWN0aW9uICYge1xuXHQvLyBpbXBsZW1lbnRzIERhdGFGaWVsZEZvckFjdGlvbkdyb3VwXG5cdHR5cGU6IEFjdGlvblR5cGUuTWVudTtcblx0bWVudTogQW5ub3RhdGlvbkFjdGlvbltdO1xufTtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRBY3Rpb24gPSB7XG5cdGFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj47XG59O1xuXG5leHBvcnQgdHlwZSBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdGVuYWJsZUF1dG9TY3JvbGw/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRpc05hdmlnYWJsZT86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGVuYWJsZU9uU2VsZWN0PzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0bWVudT86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cblx0Ly8gQ2FuIGJlIG92ZXJ3cml0dGVuIGJ5IG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gYW5kIHNob3VsZCBiZSBhbGlnbmVkIGZvciBhbGwgYWN0aW9uc1xuXHRlbmFibGVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHR2aXNpYmxlRm9yQ29udGV4dE1lbnU/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRjb21tYW5kOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRwb3NpdGlvbjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFGaWVsZEZvckFjdGlvbk9yQWN0aW9uR3JvdXAgPSBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXM7XG5cbnR5cGUgTWVudUFjdGlvbiA9XG5cdHwgQmFzZUFjdGlvblxuXHR8IHtcblx0XHRcdHZpc2libGU/OiBzdHJpbmdbXTtcblx0XHRcdGVuYWJsZWQ/OiBzdHJpbmdbXTtcblx0XHRcdG1lbnU/OiBCYXNlQWN0aW9uW107XG5cdCAgfTtcbi8qKlxuICogTWV0aG9kIHByb3ZpZGVzIGFjdGlvbnMgY29sbGVjdGlvbiBhZnRlciBjYWxjdWxhdGluZyB0aGUgdmlzaWJsZSBzZXR0aW5nIGZvciBhbGwgYWN0aW9ucyBvZiB0eXBlIG1lbnUgZGVwZW5kaW5nIG9uIGl0cyB2aXNpYmxlIHNldHRpbmcgYW5kIGl0cyBtZW51IGl0ZW1zIHZpc2libGUgc2V0dGluZ3MuXG4gKiBAcGFyYW0gYWN0aW9ucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgYWN0aW9ucyB3aXRoIHZpc2libGUgc2V0dGluZyBzZXQgZm9yIGFjdGlvbnMgb2YgdHlwZSBtZW51XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zID0gKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogQ3VzdG9tQWN0aW9uW10gPT4ge1xuXHRsZXQgbWVudUFjdGlvbk5vdFZpc2libGU6IHN0cmluZyB8IGJvb2xlYW4sXG5cdFx0bWVudUFjdGlvblZpc2libGVQYXRoczogc3RyaW5nW10sXG5cdFx0YXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGU6IGJvb2xlYW4sXG5cdFx0bWVudUl0ZW1zVmlzaWJsZVBhdGhzOiBzdHJpbmdbXTtcblx0YWN0aW9ucy5mb3JFYWNoKChtZW51QWN0aW9uOiBNZW51QWN0aW9uKSA9PiB7XG5cdFx0bWVudUFjdGlvbk5vdFZpc2libGUgPSBtZW51QWN0aW9uLnZpc2libGU/LnZhbHVlT2YoKSA9PT0gXCJmYWxzZVwiO1xuXHRcdGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlID0gZmFsc2U7XG5cdFx0bWVudUl0ZW1zVmlzaWJsZVBhdGhzID0gW107XG5cdFx0bWVudUFjdGlvblZpc2libGVQYXRocyA9IFtdO1xuXHRcdGlmIChtZW51QWN0aW9uLnZpc2libGUgJiYgIShtZW51QWN0aW9uLnZpc2libGUudmFsdWVPZigpID09PSBcInRydWVcIiB8fCBtZW51QWN0aW9uLnZpc2libGUudmFsdWVPZigpID09PSBcImZhbHNlXCIpKSB7XG5cdFx0XHRtZW51QWN0aW9uVmlzaWJsZVBhdGhzLnB1c2gobWVudUFjdGlvbi52aXNpYmxlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHRcdGlmIChtZW51QWN0aW9uPy5tZW51Py5sZW5ndGgpIHtcblx0XHRcdG1lbnVBY3Rpb24/Lm1lbnU/LmZvckVhY2goKG1lbnVJdGVtOiBCYXNlQWN0aW9uKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IG1lbnVJdGVtVmlzaWJsZSA9IG1lbnVJdGVtLnZpc2libGU7XG5cdFx0XHRcdGlmIChtZW51SXRlbVZpc2libGUgJiYgKHR5cGVvZiBtZW51SXRlbVZpc2libGUgPT09IFwiYm9vbGVhblwiIHx8IG1lbnVJdGVtVmlzaWJsZS52YWx1ZU9mKCkgPT09IFwidHJ1ZVwiKSkge1xuXHRcdFx0XHRcdGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlID0gdHJ1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChtZW51SXRlbVZpc2libGUgJiYgbWVudUl0ZW1WaXNpYmxlLnZhbHVlT2YoKSAhPT0gXCJmYWxzZVwiKSB7XG5cdFx0XHRcdFx0bWVudUl0ZW1zVmlzaWJsZVBhdGhzLnB1c2gobWVudUl0ZW1WaXNpYmxlLnZhbHVlT2YoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0aWYgKG1lbnVBY3Rpb25Ob3RWaXNpYmxlKSB7XG5cdFx0XHRcdC8vIGlmIG1lbnUgaXMgc3RhdGljYWxseSB2aXNpYmxlIGZhbHNlXG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9IGZhbHNlLnRvU3RyaW5nKCk7XG5cdFx0XHR9IGVsc2UgaWYgKCFhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZSAmJiAhbWVudUl0ZW1zVmlzaWJsZVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBpZiBhbGwgbWVudSBpdGVtcyBhcmUgc3RhdGljYWxseSB2aXNpYmxlIGZhbHNlXG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9IGZhbHNlLnRvU3RyaW5nKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlICYmICFtZW51QWN0aW9uVmlzaWJsZVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBpZiBhdCBsZWFzdCBvbmUgbWVudSBpdGVtIGlzIHN0YXRpY2FsbHkgdmlzaWJsZSB0cnVlIGFuZCBubyB2aXNpYmxlIHNldHRpbmcgZm9yIG1lbnVcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gdHJ1ZS50b1N0cmluZygpO1xuXHRcdFx0fSBlbHNlIGlmIChhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZSkge1xuXHRcdFx0XHQvLyBpZiBhdCBsZWFzdCBvbmUgbWVudSBpdGVtLCB0aGVuIGp1c3QgY29uc2lkZXIgdmlzaWJsZSBzZXR0aW5nIG9mIHRoZSBtZW51XG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKHJlc29sdmVCaW5kaW5nU3RyaW5nKG1lbnVBY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcpKTtcblx0XHRcdH0gZWxzZSBpZiAobWVudUFjdGlvblZpc2libGVQYXRocy5sZW5ndGggfHwgbWVudUl0ZW1zVmlzaWJsZVBhdGhzLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgbWVudSBpcyBzZXQgdG8gaW52aXNpYmxlLCBpdCBzaG91bGQgYmUgaW52aXNpYmxlLCBvdGhlcndpc2UgdGhlIHZpc2liaWxpdHkgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgaXRlbXNcblx0XHRcdFx0Y29uc3QgdmlzaWJsZUV4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSA9IG1lbnVJdGVtc1Zpc2libGVQYXRocy5tYXAoKG1lbnVJdGVtVmlzaWJsZVBhdGgpID0+XG5cdFx0XHRcdFx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudUl0ZW1WaXNpYmxlUGF0aCwgXCJib29sZWFuXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG1lbnVBY3Rpb24udmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZygobWVudUFjdGlvbi52aXNpYmxlIGFzIHN0cmluZykgfHwgdHJ1ZSwgXCJib29sZWFuXCIpLCBvciguLi52aXNpYmxlRXhwcmVzc2lvbnMpKVxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gKCFtZW51QWN0aW9uTm90VmlzaWJsZSkudG9TdHJpbmcoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWN0aW9ucztcbn07XG5cbi8qKlxuICogQWRkcyB0aGUgY29sbGFib3JhdGlvbiBjb25kaXRpb24gdG8gYWxsIGFjdGlvbnMgd2l0aCB0eXBlIEZvckFjdGlvbi5cbiAqIFRoaXMgZGlzYWJsZXMgdGhlIGFjdGlvbnMgaWYgdGhlIGNvbGxhYm9yYXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSB0aGUgYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBiYWNrIGVuZC5cbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGRlZmluaXRpb25zIG9mIHRoZSB0YWJsZSBhY3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29sbGFib3JhdGlvbkNvbmRpdGlvbihhY3Rpb25zOiBDdXN0b21BY3Rpb25bXSk6IHZvaWQge1xuXHRhY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udmlzaWJsZT8udmFsdWVPZigpID09PSBcImZhbHNlXCIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKGFjdGlvbi50eXBlID09PSBcIkZvckFjdGlvblwiKSB7XG5cdFx0XHRhY3Rpb24udmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLnZpc2libGUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIiksIG5vdChlcXVhbChVSS5oYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiwgZmFsc2UpKSlcblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBNYXBzIGFuIGFjdGlvbiBieSBpdHMga2V5LCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYW5ub3RhdGlvbiBhY3Rpb25zIGFuZCBtYW5pZmVzdCBjb25maWd1cmF0aW9uLiBUaGUgcmVzdWx0IGFscmVhZHkgcmVwcmVzZW50cyB0aGVcbiAqIG1lcmdlZCBhY3Rpb24gZnJvbSBib3RoIGNvbmZpZ3VyYXRpb24gc291cmNlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGFsc28gcmV0dXJucyBhbiBpbmRpY2F0aW9uIHdoZXRoZXIgdGhlIGFjdGlvbiBjYW4gYmUgYSBtZW51IGl0ZW0sIHNheWluZyB3aGV0aGVyIGl0IGlzIHZpc2libGUgb3Igb2YgYSBzcGVjaWZpYyB0eXBlXG4gKiB0aGF0IGFsbG93cyB0aGlzLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBhY3Rpb25LZXkgQWN0aW9uIEtleSB0byBsb29rIHVwXG4gKiBAcmV0dXJucyBNZXJnZWQgYWN0aW9uIGFuZCBpbmRpY2F0b3Igd2hldGhlciBpdCBjYW4gYmUgYSBtZW51IGl0ZW1cbiAqL1xuZnVuY3Rpb24gbWFwQWN0aW9uQnlLZXkoXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPixcblx0YW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0YWN0aW9uS2V5OiBzdHJpbmdcbik6IHsgYWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uOyBjYW5CZU1lbnVJdGVtOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSB7XG5cdGNvbnN0IGFubm90YXRpb25BY3Rpb24gPSBhbm5vdGF0aW9uQWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi5rZXkgPT09IGFjdGlvbktleSk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdGxldCByZXN1bHRBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24gPSB7IC4uLihhbm5vdGF0aW9uQWN0aW9uID8/IG1hbmlmZXN0QWN0aW9uKSB9O1xuXG5cdC8vIGFjdGlvbnMgaW5zaWRlIG1lbnVzIGNhbid0IGJlIGZvdW5kIG9uIHRvcCBsZXZlbCwgc28gYXNzaWduIGFjdGlvbnMgZnJvbSBtZW51IHRvIGl0XG5cdGlmIChPYmplY3Qua2V5cyhyZXN1bHRBY3Rpb24pLmxlbmd0aCA9PT0gMCkge1xuXHRcdGFubm90YXRpb25BY3Rpb25zXG5cdFx0XHQuZmlsdGVyKChhY3Rpb25Bbm5vdGF0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhY3Rpb25Bbm5vdGF0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgobWVudUFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRtZW51QWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0aWYgKG1lbnVJdGVtLmtleSA9PT0gYWN0aW9uS2V5KSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRBY3Rpb24gPSBtZW51SXRlbTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvLyBBbm5vdGF0aW9uIGFjdGlvbiBhbmQgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhbHJlYWR5IGhhcyB0byBiZSBtZXJnZWQgaGVyZSBhcyBpbnNlcnRDdXN0b21FbGVtZW50cyBvbmx5IGNvbnNpZGVycyB0b3AtbGV2ZWwgYWN0aW9uc1xuXHRpZiAoYW5ub3RhdGlvbkFjdGlvbikge1xuXHRcdC8vIElmIGVuYWJsZWQgb3IgdmlzaWJsZSBpcyBub3Qgc2V0IGluIHRoZSBtYW5pZmVzdCwgdXNlIHRoZSBhbm5vdGF0aW9uIHZhbHVlIGFuZCBoZW5jZSBkbyBub3Qgb3ZlcndyaXRlXG5cdFx0cmVzdWx0QWN0aW9uLmVuYWJsZWQgPSBtYW5pZmVzdEFjdGlvbj8uZW5hYmxlZCA/PyBhbm5vdGF0aW9uQWN0aW9uLmVuYWJsZWQ7XG5cdFx0cmVzdWx0QWN0aW9uLnZpc2libGUgPSBtYW5pZmVzdEFjdGlvbj8udmlzaWJsZSA/PyBhbm5vdGF0aW9uQWN0aW9uLnZpc2libGU7XG5cblx0XHRmb3IgKGNvbnN0IHByb3AgaW4gbWFuaWZlc3RBY3Rpb24gfHwge30pIHtcblx0XHRcdGNvbnN0IHByb3BLZXkgPSBwcm9wIGFzIGtleW9mIEJhc2VBY3Rpb247XG5cdFx0XHRpZiAoIWFubm90YXRpb25BY3Rpb25bcHJvcEtleV0gJiYgcHJvcEtleSAhPT0gXCJtZW51XCIpIHtcblx0XHRcdFx0cmVzdWx0QWN0aW9uW3Byb3BLZXldID0gbWFuaWZlc3RBY3Rpb25bcHJvcEtleV0gYXMgbmV2ZXI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgY2FuQmVNZW51SXRlbSA9XG5cdFx0cmVzdWx0QWN0aW9uPy52aXNpYmxlIHx8XG5cdFx0cmVzdWx0QWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdHJlc3VsdEFjdGlvbj8udHlwZSA9PT0gQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb246IHJlc3VsdEFjdGlvbiBhcyBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRcdGNhbkJlTWVudUl0ZW1cblx0fTtcbn1cblxuLyoqXG4gKiBNYXAgdGhlIGRlZmF1bHQgYWN0aW9uIGtleSBvZiBhIG1lbnUgdG8gaXRzIGFjdHVhbCBhY3Rpb24gY29uZmlndXJhdGlvbiBhbmQgaWRlbnRpZnkgd2hldGhlciB0aGlzIGRlZmF1bHQgYWN0aW9uIGlzIGEgY29tbWFuZC5cbiAqIEBwYXJhbSBtZW51QWN0aW9uIE1lbnUgYWN0aW9uIHRvIG1hcCB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGNvbW1hbmRBY3Rpb25zIEFycmF5IG9mIGNvbW1hbmQgYWN0aW9ucyB0byBwdXNoIHRoZSBkZWZhdWx0IGFjdGlvbiB0byBpZiBhcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIG1hcE1lbnVEZWZhdWx0QWN0aW9uKFxuXHRtZW51QWN0aW9uOiBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24sXG5cdG1hbmlmZXN0QWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPixcblx0YW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24+XG4pOiB2b2lkIHtcblx0Y29uc3QgeyBhY3Rpb24sIGNhbkJlTWVudUl0ZW0gfSA9IG1hcEFjdGlvbkJ5S2V5KG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIG1lbnVBY3Rpb24uZGVmYXVsdEFjdGlvbiBhcyBzdHJpbmcpO1xuXG5cdGlmIChjYW5CZU1lbnVJdGVtKSB7XG5cdFx0bWVudUFjdGlvbi5kZWZhdWx0QWN0aW9uID0gYWN0aW9uO1xuXHR9XG5cblx0aWYgKGFjdGlvbi5jb21tYW5kKSB7XG5cdFx0Y29tbWFuZEFjdGlvbnNbYWN0aW9uLmtleV0gPSBhY3Rpb247XG5cdH1cbn1cblxuLyoqXG4gKiBNYXAgdGhlIG1lbnUgaXRlbSBrZXlzIG9mIGEgbWVudSB0byB0aGVpciBhY3R1YWwgYWN0aW9uIGNvbmZpZ3VyYXRpb25zIGFuZCBpZGVudGlmeSB3aGV0aGVyIHRoZXkgYXJlIGNvbW1hbmRzLlxuICogQHBhcmFtIG1lbnVBY3Rpb24gTWVudSBhY3Rpb24gdG8gbWFwIHRoZSBtZW51IGl0ZW1zIGZvclxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqIEBwYXJhbSBjb21tYW5kQWN0aW9ucyBBcnJheSBvZiBjb21tYW5kIGFjdGlvbnMgdG8gcHVzaCB0aGUgbWVudSBpdGVtIGFjdGlvbnMgdG8gaWYgYXBwbGljYWJsZVxuICovXG5mdW5jdGlvbiBtYXBNZW51SXRlbXMoXG5cdG1lbnVBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbj5cbik6IHZvaWQge1xuXHRjb25zdCBtYXBwZWRNZW51SXRlbXM6IChDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uKVtdID0gW107XG5cdGNvbnN0IG1hdGNoaW5nQW5ub3RhdGlvbkFjdGlvbiA9IGFubm90YXRpb25BY3Rpb25zLmZpbmQoKGFubm90YXRpb25BY3Rpb24pID0+IGFubm90YXRpb25BY3Rpb24ua2V5ID09PSBtZW51QWN0aW9uLmtleSk7XG5cblx0aWYgKG1lbnVBY3Rpb24ubWVudT8ubGVuZ3RoICE9PSAwKSB7XG5cdFx0Zm9yIChjb25zdCBtZW51SXRlbUtleSBvZiBtZW51QWN0aW9uLm1lbnUgPz8gW10pIHtcblx0XHRcdGNvbnN0IHsgYWN0aW9uLCBjYW5CZU1lbnVJdGVtIH0gPSBtYXBBY3Rpb25CeUtleShtYW5pZmVzdEFjdGlvbnMsIGFubm90YXRpb25BY3Rpb25zLCBtZW51SXRlbUtleSk7XG5cblx0XHRcdGlmIChjYW5CZU1lbnVJdGVtKSB7XG5cdFx0XHRcdG1hcHBlZE1lbnVJdGVtcy5wdXNoKGFjdGlvbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0XHRjb21tYW5kQWN0aW9uc1ttZW51SXRlbUtleV0gPSBhY3Rpb247XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgbm8gbWVudSBpdGVtcyBhcmUgYXNzaWduZWQgdG8gdGhlIG1hbmlmZXN0LW92ZXJyaWRlLW1lbnUsIGl0IGluaGVyaXRzIHRoZSBpdGVtcyBmcm9tIHRoZSBwcmV2aW91cyBtZW51XG5cdGVsc2UgaWYgKG1hdGNoaW5nQW5ub3RhdGlvbkFjdGlvbikge1xuXHRcdG1hdGNoaW5nQW5ub3RhdGlvbkFjdGlvbi5tZW51Py5mb3JFYWNoKChtZW51SXRlbSkgPT4gbWFwcGVkTWVudUl0ZW1zLnB1c2gobWVudUl0ZW0pKTtcblx0fVxuXG5cdGNvbnN0IG1hcHBlZE1lbnVBY3Rpb24gPSBtZW51QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0bWFwcGVkTWVudUFjdGlvbi5tZW51ID0gbWFwcGVkTWVudUl0ZW1zO1xuXG5cdC8vIElmIHRoZSBtZW51IGlzIHNldCB0byBpbnZpc2libGUsIGl0IHNob3VsZCBiZSBpbnZpc2libGUsIG90aGVyd2lzZSB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBpdGVtc1xuXHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gbWFwcGVkTWVudUl0ZW1zLm1hcCgobWVudUl0ZW0pID0+XG5cdFx0cmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudUl0ZW0udmlzaWJsZSBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKVxuXHQpO1xuXHRtYXBwZWRNZW51QWN0aW9uLnZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudUFjdGlvbi52aXNpYmxlIGFzIHN0cmluZywgXCJib29sZWFuXCIpLCBvciguLi52aXNpYmxlRXhwcmVzc2lvbnMpKVxuXHQpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybXMgdGhlIGZsYXQgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGludG8gYSBuZXN0ZWQgc3RydWN0dXJlcyBvZiBtZW51cy4gVGhlIHJlc3VsdCBpcyBhIHJlY29yZCBvZiBhY3Rpb25zIHRoYXQgYXJlIGVpdGhlciBtZW51cyBvclxuICogb25lcyB0aGF0IGRvIG5vdCBhcHBlYXIgaW4gbWVudXMgYXMgbWVudSBpdGVtcy4gSXQgYWxzbyByZXR1cm5zIGEgbGlzdCBvZiBhY3Rpb25zIHRoYXQgaGF2ZSBhbiBhc3NpZ25lZCBjb21tYW5kLlxuICpcbiAqIE5vdGUgdGhhdCBtZW51IGl0ZW1zIGFyZSBhbHJlYWR5IHRoZSBtZXJnZWQgcmVzdWx0IG9mIGFubm90YXRpb24gYWN0aW9ucyBhbmQgdGhlaXIgbWFuaWZlc3QgY29uZmlndXJhdGlvbiwgYXMge0BsaW5rIGluc2VydEN1c3RvbUVsZW1lbnRzfVxuICogb25seSBjb25zaWRlcnMgcm9vdC1sZXZlbCBhY3Rpb25zLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqIEByZXR1cm5zIFRoZSB0cmFuc2Zvcm1lZCBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0IGFuZCBhIGxpc3Qgb2YgY29tbWFuZCBhY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybU1lbnVBY3Rpb25zQW5kSWRlbnRpZnlDb21tYW5kcyhcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+PiB7XG5cdGNvbnN0IGFsbEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0Y29uc3QgYWN0aW9uS2V5c1RvRGVsZXRlOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXG5cdGZvciAoY29uc3QgYWN0aW9uS2V5IGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uOiBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblxuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5kZWZhdWx0QWN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdG1hcE1lbnVEZWZhdWx0QWN0aW9uKG1hbmlmZXN0QWN0aW9uLCBtYW5pZmVzdEFjdGlvbnMsIGFubm90YXRpb25BY3Rpb25zLCBjb21tYW5kQWN0aW9ucyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkge1xuXHRcdFx0bWFwTWVudUl0ZW1zKG1hbmlmZXN0QWN0aW9uLCBtYW5pZmVzdEFjdGlvbnMsIGFubm90YXRpb25BY3Rpb25zLCBjb21tYW5kQWN0aW9ucyk7XG5cblx0XHRcdC8vIE1lbnUgaGFzIG5vIHZpc2libGUgaXRlbXMsIHNvIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCFtYW5pZmVzdEFjdGlvbi5tZW51Py5sZW5ndGgpIHtcblx0XHRcdFx0YWN0aW9uS2V5c1RvRGVsZXRlLnB1c2gobWFuaWZlc3RBY3Rpb24ua2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uY29tbWFuZCkge1xuXHRcdFx0Y29tbWFuZEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0XHR9XG5cblx0XHRhbGxBY3Rpb25zW2FjdGlvbktleV0gPSBtYW5pZmVzdEFjdGlvbiBhcyBDdXN0b21BY3Rpb247XG5cdH1cblxuXHRhY3Rpb25LZXlzVG9EZWxldGUuZm9yRWFjaCgoYWN0aW9uS2V5OiBzdHJpbmcpID0+IGRlbGV0ZSBhbGxBY3Rpb25zW2FjdGlvbktleV0pO1xuXG5cdHJldHVybiB7XG5cdFx0YWN0aW9uczogYWxsQWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogY29tbWFuZEFjdGlvbnNcblx0fTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBlbmFibGVtZW50IG9mIGEgbWFuaWZlc3QgYWN0aW9uLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9uIFRoZSBhY3Rpb24gY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBpc0Fubm90YXRpb25BY3Rpb24gV2hldGhlciB0aGUgYWN0aW9uLCBkZWZpbmVkIGluIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBlbmFibGVtZW50XG4gKi9cbmNvbnN0IF9nZXRNYW5pZmVzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbixcblx0aXNBbm5vdGF0aW9uQWN0aW9uOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzQW5ub3RhdGlvbkFjdGlvbiAmJiBtYW5pZmVzdEFjdGlvbi5lbmFibGVkID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGFjdGlvbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgYWN0aW9uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Y29uc3QgcmVzdWx0ID0gZ2V0TWFuaWZlc3RBY3Rpb25Cb29sZWFuUHJvcGVydHlXaXRoRm9ybWF0dGVyKG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQsIGNvbnZlcnRlckNvbnRleHQsIGZvckNvbnRleHRNZW51KTtcblxuXHQvLyBDb25zaWRlciByZXF1aXJlc1NlbGVjdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlIHNlbGVjdGVkQ29udGV4dHMgaW4gdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRjb25zdCBpbnRlcm5hbE1vZGVsUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiIDogXCJjb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIjtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGlmRWxzZShcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB0cnVlLFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbi5lbmFibGVPblNlbGVjdCA9PT0gXCJzaW5nbGVcIixcblx0XHRcdFx0YW5kKGVxdWFsKHBhdGhJbk1vZGVsKGludGVybmFsTW9kZWxQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdCksXG5cdFx0XHRcdGFuZChncmVhdGVyT3JFcXVhbChwYXRoSW5Nb2RlbChpbnRlcm5hbE1vZGVsUHJvcGVydHksIFwiaW50ZXJuYWxcIiksIDEpLCByZXN1bHQpXG5cdFx0XHQpLFxuXHRcdFx0cmVzdWx0XG5cdFx0KVxuXHQpO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSB2aXNpYmlsaXR5IG9mIGEgbWFuaWZlc3QgYWN0aW9uLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9uIFRoZSBhY3Rpb24gY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBpc0Fubm90YXRpb25BY3Rpb24gV2hldGhlciB0aGUgYWN0aW9uLCBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCwgY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgYW5ub3RhdGlvbiBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKiBAcmV0dXJucyBEZXRlcm1pbmVkIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgdmlzaWJpbGl0eVxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RWaXNpYmxlID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24sXG5cdGlzQW5ub3RhdGlvbkFjdGlvbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc0Fubm90YXRpb25BY3Rpb24gJiYgbWFuaWZlc3RBY3Rpb24udmlzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gSWYgYW5ub3RhdGlvbiBhY3Rpb24gaGFzIG5vIHByb3BlcnR5IGRlZmluZWQgaW4gbWFuaWZlc3QsXG5cdFx0Ly8gZG8gbm90IG92ZXJ3cml0ZSBpdCB3aXRoIG1hbmlmZXN0IGFjdGlvbidzIGRlZmF1bHQgdmFsdWUuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSBnZXRNYW5pZmVzdEFjdGlvbkJvb2xlYW5Qcm9wZXJ0eVdpdGhGb3JtYXR0ZXIobWFuaWZlc3RBY3Rpb24udmlzaWJsZSwgY29udmVydGVyQ29udGV4dCwgZm9yQ29udGV4dE1lbnUpO1xuXHQvLyBGb3IgdGhlIGNvbnRleHQgbWVudSwgdGhlIHZpc2liaWxpdHkgc2hvdWxkIGFsc28gY29uc2lkZXIgdGhlICdpbmFjdGl2ZUNvbnRleHQnIHByb3BlcnR5OlxuXHQvLyBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIHNlbGVjdGVkIGNvbnRleHQgaXMgYWN0aXZlIChpLmUuIFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIgaXMgZmFsc2UpLCB0aGUgYWN0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGluIHRoZSBjb250ZXh0IG1lbnVcblx0Ly8gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIHRhYmxlIG1hbmlmZXN0IHNldHRpbmcgXCJjcmVhdGlvbk1vZGVcIiBpcyBcIklubGluZUNyZWF0aW9uUm93c1wiXG5cdHJlc3VsdCA9IGZvckNvbnRleHRNZW51ID8gYW5kKHJlc3VsdCwgZXF1YWwocGF0aEluTW9kZWwoXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiwgXCJpbnRlcm5hbFwiKSwgZmFsc2UpKSA6IHJlc3VsdDtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHJlc3VsdCk7XG59O1xuXG50eXBlIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbiA9IE9taXQ8Q3VzdG9tQWN0aW9uLCBcIm1lbnVcIj4gJiB7IG1lbnU6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogQXMgc29tZSBwcm9wZXJ0aWVzIHNob3VsZCBub3QgYmUgb3ZlcnJpZGFibGUgYnkgdGhlIG1hbmlmZXN0LCBtYWtlIHN1cmUgdGhhdCB0aGUgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBnZXRzIHRoZSBhbm5vdGF0aW9uIHZhbHVlcyBmb3IgdGhlc2UuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb24gQWN0aW9uIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbiBBY3Rpb24gZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKi9cbmZ1bmN0aW9uIG92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24obWFuaWZlc3RBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbiwgYW5ub3RhdGlvbkFjdGlvbj86IEJhc2VBY3Rpb24pOiB2b2lkIHtcblx0aWYgKCFhbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gRG8gbm90IG92ZXJyaWRlIHRoZSAndHlwZScgZ2l2ZW4gaW4gYW4gYW5ub3RhdGlvbiBhY3Rpb25cblx0bWFuaWZlc3RBY3Rpb24udHlwZSA9IGFubm90YXRpb25BY3Rpb24udHlwZTtcblx0bWFuaWZlc3RBY3Rpb24uYW5ub3RhdGlvblBhdGggPSBhbm5vdGF0aW9uQWN0aW9uLmFubm90YXRpb25QYXRoO1xuXHRtYW5pZmVzdEFjdGlvbi5wcmVzcyA9IGFubm90YXRpb25BY3Rpb24ucHJlc3M7XG5cblx0Ly8gT25seSB1c2UgdGhlIGFubm90YXRpb24gdmFsdWVzIGZvciBlbmFibGVtZW50IGFuZCB2aXNpYmlsaXR5IGlmIG5vdCBzZXQgaW4gdGhlIG1hbmlmZXN0XG5cdG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPSBtYW5pZmVzdEFjdGlvbi5lbmFibGVkID8/IGFubm90YXRpb25BY3Rpb24uZW5hYmxlZDtcblx0bWFuaWZlc3RBY3Rpb24udmlzaWJsZSA9IG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPz8gYW5ub3RhdGlvbkFjdGlvbi52aXNpYmxlO1xuXHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnUgPSBtYW5pZmVzdEFjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnUgPz8gYW5ub3RhdGlvbkFjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnU7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYWN0aW9uIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmdzLlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBUaGUgbWFuaWZlc3QgYWN0aW9uc1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYW5ub3RhdGlvbkFjdGlvbnMgVGhlIGFubm90YXRpb24gYWN0aW9ucyBkZWZpbml0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzXG4gKiBAcGFyYW0gY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3MgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGhpZGRlbkFjdGlvbnMgQWN0aW9ucyB0aGF0IGFyZSBjb25maWd1cmVkIGFzIGhpZGRlbiAoYWRkaXRpb25hbCB0byB0aGUgdmlzaWJsZSBwcm9wZXJ0eSlcbiAqIEBwYXJhbSBmYWNldE5hbWUgVGhlIGZhY2V0IHdoZXJlIGFuIGFjdGlvbiBpcyBkaXNwbGF5ZWQgaWYgaXQgaXMgaW5saW5lXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YW5ub3RhdGlvbkFjdGlvbnM/OiBCYXNlQWN0aW9uW10sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhbixcblx0aGlkZGVuQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXROYW1lPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+PiB7XG5cdGNvbnN0IGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4gPSB7fTtcblx0Zm9yIChjb25zdCBhY3Rpb25LZXkgaW4gbWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uID0gbWFuaWZlc3RBY3Rpb25zW2FjdGlvbktleV07XG5cdFx0Y29uc3QgbGFzdERvdEluZGV4ID0gbWFuaWZlc3RBY3Rpb24ucHJlc3M/Lmxhc3RJbmRleE9mKFwiLlwiKSB8fCAtMTtcblx0XHRsZXQgYW5ub3RhdGlvbkFjdGlvbjogQmFzZUFjdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChhbm5vdGF0aW9uQWN0aW9ucykge1xuXHRcdFx0Zm9yIChjb25zdCBhY3Rpb24gb2YgYW5ub3RhdGlvbkFjdGlvbnMpIHtcblx0XHRcdFx0Ly8gU3ViU2VjdGlvbi50cyNjcmVhdGVGb3JtQWN0aW9uUmVkdWNlciB1c2VzIGluc2VydEN1c3RvbUVsZW1lbnRzIHdoaWNoIHJlc3VsdHMgaW4gYW5ub3RhdGlvbiBhY3Rpb25zIG1peGluZyB1cCB3aXRoIG1hbmlmZXN0IGFjdGlvblxuXHRcdFx0XHQvLyB0aGlzIGlzIHdoeSB3ZSBtYXkgZmluZCBhbiBhY3Rpb24gdGhhdCBoYXMgYSBDdXN0b21BY3Rpb24gcHJlZml4XG5cdFx0XHRcdGlmIChhY3Rpb24uaWQ/LnN0YXJ0c1dpdGgoXCJDdXN0b21BY3Rpb246OlwiKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChhY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uQWN0aW9uID0gYWN0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbi50eXBlID09PSBcIk1lbnVcIikge1xuXHRcdFx0XHRcdC8vIElmIG5vdCBmb3VuZCwgY2hlY2sgaW5zaWRlIG1lbnVzXG5cdFx0XHRcdFx0YW5ub3RhdGlvbkFjdGlvbiA9IGFjdGlvbi5tZW51Py5maW5kKChtZW51SXRlbTogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1lbnVJdGVtLmtleSA9PT0gYWN0aW9uS2V5O1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGlmIChhbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBhY3Rpb24gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25BY3Rpb24gPSAhIWFubm90YXRpb25BY3Rpb247XG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLmZhY2V0TmFtZSkge1xuXHRcdFx0ZmFjZXROYW1lID0gbWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lO1xuXHRcdH1cblxuXHRcdGFjdGlvbnNbYWN0aW9uS2V5XSA9IHtcblx0XHRcdGlkOiBhbm5vdGF0aW9uQWN0aW9uID8gYWN0aW9uS2V5IDogZ2V0Q3VzdG9tQWN0aW9uSUQoYWN0aW9uS2V5KSxcblx0XHRcdHR5cGU6IG1hbmlmZXN0QWN0aW9uLm1lbnUgPyBBY3Rpb25UeXBlLk1lbnUgOiBBY3Rpb25UeXBlLkRlZmF1bHQsXG5cdFx0XHR2aXNpYmxlOiBfZ2V0TWFuaWZlc3RWaXNpYmxlKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0dmlzaWJsZUZvckNvbnRleHRNZW51OiBfZ2V0TWFuaWZlc3RWaXNpYmxlKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQsIHRydWUpLFxuXHRcdFx0ZW5hYmxlZDogX2dldE1hbmlmZXN0RW5hYmxlZChtYW5pZmVzdEFjdGlvbiwgaXNBbm5vdGF0aW9uQWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdGVuYWJsZWRGb3JDb250ZXh0TWVudTogX2dldE1hbmlmZXN0RW5hYmxlZChtYW5pZmVzdEFjdGlvbiwgaXNBbm5vdGF0aW9uQWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKSxcblx0XHRcdGhhbmRsZXJNb2R1bGU6IG1hbmlmZXN0QWN0aW9uLnByZXNzICYmIG1hbmlmZXN0QWN0aW9uLnByZXNzLnN1YnN0cmluZygwLCBsYXN0RG90SW5kZXgpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpLFxuXHRcdFx0aGFuZGxlck1ldGhvZDogbWFuaWZlc3RBY3Rpb24ucHJlc3MgJiYgbWFuaWZlc3RBY3Rpb24ucHJlc3Muc3Vic3RyaW5nKGxhc3REb3RJbmRleCArIDEpLFxuXHRcdFx0cHJlc3M6IG1hbmlmZXN0QWN0aW9uLnByZXNzLFxuXHRcdFx0dGV4dDogbWFuaWZlc3RBY3Rpb24udGV4dCxcblx0XHRcdG5vV3JhcDogbWFuaWZlc3RBY3Rpb24uX19ub1dyYXAsXG5cdFx0XHRrZXk6IHJlcGxhY2VTcGVjaWFsQ2hhcnMoYWN0aW9uS2V5KSxcblx0XHRcdGVuYWJsZU9uU2VsZWN0OiBtYW5pZmVzdEFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjogbWFuaWZlc3RBY3Rpb24uZGVmYXVsdFZhbHVlc0Z1bmN0aW9uLFxuXHRcdFx0cG9zaXRpb246IHtcblx0XHRcdFx0YW5jaG9yOiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbj8uYW5jaG9yLFxuXHRcdFx0XHRwbGFjZW1lbnQ6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBQbGFjZW1lbnQuQWZ0ZXIgOiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbi5wbGFjZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRpc05hdmlnYWJsZTogaXNBY3Rpb25OYXZpZ2FibGUobWFuaWZlc3RBY3Rpb24sIG5hdmlnYXRpb25TZXR0aW5ncywgY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MpLFxuXHRcdFx0Y29tbWFuZDogbWFuaWZlc3RBY3Rpb24uY29tbWFuZCxcblx0XHRcdHJlcXVpcmVzU2VsZWN0aW9uOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbixcblx0XHRcdGVuYWJsZUF1dG9TY3JvbGw6IGVuYWJsZUF1dG9TY3JvbGwobWFuaWZlc3RBY3Rpb24pLFxuXHRcdFx0bWVudTogbWFuaWZlc3RBY3Rpb24ubWVudSA/PyAoYW5ub3RhdGlvbkFjdGlvbj8udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51ID8gW10gOiB1bmRlZmluZWQpLFxuXHRcdFx0ZmFjZXROYW1lOiBtYW5pZmVzdEFjdGlvbi5pbmxpbmUgPyBmYWNldE5hbWUgOiB1bmRlZmluZWQsXG5cdFx0XHRkZWZhdWx0QWN0aW9uOiBtYW5pZmVzdEFjdGlvbi5kZWZhdWx0QWN0aW9uLFxuXHRcdFx0aXNBSU9wZXJhdGlvbjogbWFuaWZlc3RBY3Rpb24/LmlzQUlPcGVyYXRpb24gPz8gdW5kZWZpbmVkXG5cdFx0fTtcblxuXHRcdG92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24oYWN0aW9uc1thY3Rpb25LZXldLCBhbm5vdGF0aW9uQWN0aW9uKTtcblx0fVxuXG5cdHJldHVybiB0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMoYWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMgPz8gW10pO1xufVxuXG4vKipcbiAqIEdldHMgYSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgQm9vbGVhbiBtYW5pZmVzdCBwcm9wZXJ0eSB0aGF0IGNhbiBlaXRoZXIgYmUgcmVwcmVzZW50ZWQgYnkgYSBzdGF0aWMgdmFsdWUsIGEgYmluZGluZyBzdHJpbmcsXG4gKiBvciBhIHJ1bnRpbWUgZm9ybWF0dGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb3BlcnR5VmFsdWUgU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJlZCBwcm9wZXJ0eSB2YWx1ZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEEgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgcHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gZ2V0TWFuaWZlc3RBY3Rpb25Cb29sZWFuUHJvcGVydHlXaXRoRm9ybWF0dGVyKFxuXHRwcm9wZXJ0eVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRjb25zdCByZXNvbHZlZEJpbmRpbmcgPSByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuIHwgc3RyaW5nPihwcm9wZXJ0eVZhbHVlIGFzIHN0cmluZywgXCJib29sZWFuXCIpO1xuXHRsZXQgcmVzdWx0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBObyBwcm9wZXJ0eSB2YWx1ZSBjb25maWd1cmVkIGluIG1hbmlmZXN0IGZvciB0aGUgY3VzdG9tIGFjdGlvbiAtLT4gZGVmYXVsdCB2YWx1ZSBpcyB0cnVlXG5cdFx0cmVzdWx0ID0gY29uc3RhbnQodHJ1ZSk7XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHR5cGVvZiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHQvLyBUaGVuIGl0J3MgYSBtb2R1bGUtbWV0aG9kIHJlZmVyZW5jZSBcInNhcC54eHgueXl5LmRvU29tZXRoaW5nXCJcblx0XHRjb25zdCBtZXRob2RQYXRoID0gcmVzb2x2ZWRCaW5kaW5nLnZhbHVlO1xuXHRcdC8vIEZJWE1FOiBUaGUgY3VzdG9tIFwiaXNFbmFibGVkXCIgY2hlY2sgZG9lcyBub3QgdHJpZ2dlciAoYmVjYXVzZSBub25lIG9mIHRoZSBib3VuZCB2YWx1ZXMgY2hhbmdlcylcblx0XHRyZXN1bHQgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbcGF0aEluTW9kZWw8Vmlldz4oXCIvXCIsIFwiJHZpZXdcIiksIG1ldGhvZFBhdGgsIHBhdGhJbk1vZGVsPENvbnRleHRbXT4oXCJzZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIildLFxuXHRcdFx0ZnBtRm9ybWF0dGVyLmN1c3RvbUJvb2xlYW5Qcm9wZXJ0eUNoZWNrLFxuXHRcdFx0IWZvckNvbnRleHRNZW51XG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyB0aGVuIGl0J3MgYSBiaW5kaW5nXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogQ3VzdG9tQWN0aW9uW10gPT4ge1xuXHRsZXQgb01lbnVJdGVtS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0YWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uPy5tZW51Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1lbnUgPSBhY3Rpb24ubWVudTtcblx0XHRcdG9NZW51SXRlbUtleXMgPSBhY3Rpb25NZW51LnJlZHVjZSgoaXRlbTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHsga2V5IH0pID0+IHtcblx0XHRcdFx0aWYgKGtleSAmJiAhaXRlbVtrZXldKSB7XG5cdFx0XHRcdFx0aXRlbVtrZXldID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0sIG9NZW51SXRlbUtleXMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiAhb01lbnVJdGVtS2V5c1thY3Rpb24ua2V5XSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0bGV0IGlzRW5hYmxlZEV4cCA9IGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRcdFx0YWN0aW9uVGFyZ2V0LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT25Sb290ID1cblx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0aXNFbmFibGVkRXhwID0gYW5kKGlzRW5hYmxlZEV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzRW5hYmxlZEV4cDtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiBJcyB0aGUgYmluZGluZyBwYXRoIGNhbGN1bGF0ZWQgIGZyb20gdGhlIGNvbnZlcnRlciBjb250ZXh0IGxvY2F0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25UYXJnZXQsIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcobWFwcGluZ3M/OiBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlW10pOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRyZXR1cm4gbWFwcGluZ3Ncblx0XHQ/IG1hcHBpbmdzLm1hcCgobWFwcGluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG1hcHBpbmcuTG9jYWxQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogbWFwcGluZy5TZW1hbnRpY09iamVjdFByb3BlcnR5LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHQgIH0pXG5cdFx0OiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRhY3Rpb246IE1hbmlmZXN0QWN0aW9uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5Jc0NvcHlBY3Rpb24/LnZhbHVlT2YoKSA9PT0gdHJ1ZSAmJiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlBY3Rpb24oY29weURhdGFGaWVsZHM6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10pOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb3B5RGF0YUZpZWxkcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gY29weURhdGFGaWVsZHNbMF07XG5cdH1cblx0aWYgKGNvcHlEYXRhRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRMb2cuZXJyb3IoXCJNdWx0aXBsZSBhY3Rpb25zIGFyZSBhbm5vdGF0ZWQgd2l0aCBpc0NvcHlBY3Rpb24uIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdGFuZGFyZCBjb3B5IGFjdGlvbi5cIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZXh0cmFjdCBtZW51IGl0ZW1zIGZyb20gYWN0aW9ucyBvZiB0eXBlIG1lbnVzLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgYW5ub3RhdGlvbiBiYXNlZCBhY3Rpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXMgaW4gb25lIG9mIHRoZSBhbm5vdGF0aW9uIGJhc2VkIG1lbnVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtZW51QWN0aW9uSXRlbXM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXG5cdGFubm90YXRpb25BY3Rpb25zLmZvckVhY2goKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIgJiYgIWFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpICYmIGFjdGlvbi5tZW51KSB7XG5cdFx0XHRtZW51QWN0aW9uSXRlbXMucHVzaCguLi5hY3Rpb24ubWVudSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbWVudUFjdGlvbkl0ZW1zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBmaW5kIHRoZSBtYXRjaGluZyBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIHRoZSBhbm5vdGF0aW9uIG1lbnUgaXRlbXMuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbk1lbnVJdGVtcyBDb2xsZWN0aW9uIG9mIGFubm90YXRpb24gYmFzZWQgbWVudSBpdGVtc1xuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBDb2xsZWN0aW9uIG9mIG1hbmlmZXN0IGJhc2VkIGFjdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgYWN0aW9ucyB3aGljaCBhcmUgbWVudSBpdGVtcyBpbiBvbmUgb2YgdGhlIGFubm90YXRpb24gYmFzZWQgbWVudXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24oXG5cdGFubm90YXRpb25NZW51SXRlbXM6IEJhc2VBY3Rpb25bXSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IG1hbmlmZXN0QWN0aW9uIGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGlmIChcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnN0YXJ0c1dpdGgoXCJEYXRhRmllbGRGb3JBY3Rpb246OlwiKSAmJlxuXHRcdFx0YW5ub3RhdGlvbk1lbnVJdGVtcy5maW5kKChtZW51QWN0aW9uSXRlbXMpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lbnVBY3Rpb25JdGVtcy5rZXkgPT09IG1hbmlmZXN0QWN0aW9uO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zW21hbmlmZXN0QWN0aW9uXSA9IG1hbmlmZXN0QWN0aW9uc1ttYW5pZmVzdEFjdGlvbl07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIG1lbnVzIGJ5IHJlcGxhY2luZyB0aGUgbWVudSBpdGVtcyB3aXRoIHRoZWlyIG92ZXJyaWRpbmcgYWN0aW9ucy5cbiAqIEBwYXJhbSB1bnByZXBhcmVkQWN0aW9ucyBDb2xsZWN0aW9uIG9mIGFsbCBhY3Rpb25zIGFmdGVyIG1lcmdpbmcgbWFuaWZlc3QgYW5kIGFubm90YXRpb24gYWN0aW9uc1xuICogQHBhcmFtIG92ZXJyaWRlTWVudUFjdGlvbnMgQ29sbGVjdGlvbiBvZiBhbGwgb3ZlcnJpZGVuIG1lbnUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNZW51QWN0aW9ucyh1bnByZXBhcmVkQWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIG92ZXJyaWRlTWVudUFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZm91bmRBY3Rpb247XG5cblx0dW5wcmVwYXJlZEFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBDdXN0b21BY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkge1xuXHRcdFx0YWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtOiBCYXNlQWN0aW9uLCBtZW51SXRlbUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Zm91bmRBY3Rpb24gPSBvdmVycmlkZU1lbnVBY3Rpb25zLmZpbmQoKG92ZXJyaWRlTWVudUFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvdmVycmlkZU1lbnVBY3Rpb24ua2V5ID09PSBtZW51SXRlbS5rZXk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChmb3VuZEFjdGlvbikge1xuXHRcdFx0XHRcdGFjdGlvbi5tZW51Py5zcGxpY2UobWVudUl0ZW1JbmRleCwgMSwgZm91bmRBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1lbnUgY29uc2lzdHMgb2YgYWxsIEFJIG9wZXJhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgRGF0YUZpZWxkRm9yQWN0aW9ucyBvciBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25zIGluIHRoZSBtZW51XG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gdHJ1ZSBpZiBhbGwgcmVjb3JkcyBpbiB0aGUgbWVudSBhcmUgQUkgb3BlcmF0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnVBSU9wZXJhdGlvbihhbm5vdGF0aW9uQWN0aW9uczogRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBhbm5vdGF0aW9uQWN0aW9ucy5ldmVyeShpc0FjdGlvbkFJT3BlcmF0aW9uKTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiByZWNvcmQgaXMgYW4gQUkgb3BlcmF0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgcmVjb3JkIG9mIHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uIG9yIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHJldHVybnMgQSBib29sZWFuIHRydWUgaWYgdGhlIGdpdmVuIHJlY29yZCBpcyBhbiBBSSBvcGVyYXRpb24sIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMpOiBib29sZWFuIHtcblx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zLlVJPy5Jc0FJT3BlcmF0aW9uPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZpc2liaWxpdHkgb2YgdGhlIENyZWF0ZU5leHQgYnV0dG9uLlxuICogVGhpcyBmdW5jdGlvbiBjZW50cmFsaXplcyB0aGUgdmlzaWJpbGl0eSBsb2dpYyB0byBiZSByZXVzZWQgYnkgYm90aCBnZXRGb290ZXJEZWZhdWx0QWN0aW9uc1xuICogYW5kIEZvb3RlckNvbnRlbnQudHN4LlxuICogQHBhcmFtIGhpZGRlbkRyYWZ0RW5hYmxlZCBXaGV0aGVyIGhpZGRlbiBkcmFmdCBtb2RlIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSBmY2xFbmFibGVkIFdoZXRoZXIgRkNMIChGbGV4aWJsZSBDb2x1bW4gTGF5b3V0KSBpcyBlbmFibGVkXG4gKiBAcmV0dXJucyBBIGNvbXBpbGVkIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIENyZWF0ZU5leHQgYnV0dG9uIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5KGhpZGRlbkRyYWZ0RW5hYmxlZDogYm9vbGVhbiwgZmNsRW5hYmxlZDogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aGlkZGVuRHJhZnRFbmFibGVkID09PSB0cnVlLFxuXHRcdGlmRWxzZShcblx0XHRcdGZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRhbmQoRHJhZnQuSXNOZXdPYmplY3QsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSksXG5cdFx0XHREcmFmdC5Jc05ld09iamVjdFxuXHRcdCksXG5cdFx0RHJhZnQuSXNOZXdPYmplY3Rcblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNENZQSxVQUFVLDBCQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxVQUFVO0lBQVZBLFVBQVU7SUFBVkEsVUFBVTtJQUFWQSxV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
611
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwiX2V4cG9ydHMiLCJhaUljb24iLCJnZXRWaXNpYmlsaXR5RW5hYmxlbWVudE1lbnVBY3Rpb25zIiwiYWN0aW9ucyIsIm1lbnVBY3Rpb25Ob3RWaXNpYmxlIiwibWVudUFjdGlvblZpc2libGVQYXRocyIsImF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlIiwibWVudUl0ZW1zVmlzaWJsZVBhdGhzIiwiZm9yRWFjaCIsIm1lbnVBY3Rpb24iLCJ2aXNpYmxlIiwidmFsdWVPZiIsInB1c2giLCJtZW51IiwibGVuZ3RoIiwibWVudUl0ZW0iLCJtZW51SXRlbVZpc2libGUiLCJ0b1N0cmluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJ2aXNpYmxlRXhwcmVzc2lvbnMiLCJtYXAiLCJtZW51SXRlbVZpc2libGVQYXRoIiwiYW5kIiwib3IiLCJhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uIiwiYWN0aW9uIiwidHlwZSIsIm5vdCIsImVxdWFsIiwiVUkiLCJoYXNDb2xsYWJvcmF0aW9uQXV0aG9yaXphdGlvbiIsIm1hcEFjdGlvbkJ5S2V5IiwibWFuaWZlc3RBY3Rpb25zIiwiYW5ub3RhdGlvbkFjdGlvbnMiLCJhY3Rpb25LZXkiLCJhbm5vdGF0aW9uQWN0aW9uIiwiZmluZCIsImtleSIsIm1hbmlmZXN0QWN0aW9uIiwicmVzdWx0QWN0aW9uIiwiT2JqZWN0Iiwia2V5cyIsImZpbHRlciIsImFjdGlvbkFubm90YXRpb24iLCJBY3Rpb25UeXBlIiwiTWVudSIsImVuYWJsZWQiLCJwcm9wIiwicHJvcEtleSIsImNhbkJlTWVudUl0ZW0iLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJtYXBNZW51RGVmYXVsdEFjdGlvbiIsImNvbW1hbmRBY3Rpb25zIiwiZGVmYXVsdEFjdGlvbiIsImNvbW1hbmQiLCJtYXBNZW51SXRlbXMiLCJtYXBwZWRNZW51SXRlbXMiLCJtYXRjaGluZ0Fubm90YXRpb25BY3Rpb24iLCJtZW51SXRlbUtleSIsIm1hcHBlZE1lbnVBY3Rpb24iLCJ0cmFuc2Zvcm1NZW51QWN0aW9uc0FuZElkZW50aWZ5Q29tbWFuZHMiLCJhbGxBY3Rpb25zIiwiYWN0aW9uS2V5c1RvRGVsZXRlIiwidW5kZWZpbmVkIiwiX2dldE1hbmlmZXN0RW5hYmxlZCIsImlzQW5ub3RhdGlvbkFjdGlvbiIsImNvbnZlcnRlckNvbnRleHQiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsInJlc3VsdCIsImdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlciIsImludGVybmFsTW9kZWxQcm9wZXJ0eSIsImlmRWxzZSIsInJlcXVpcmVzU2VsZWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJwYXRoSW5Nb2RlbCIsImdyZWF0ZXJPckVxdWFsIiwiX2dldE1hbmlmZXN0VmlzaWJsZSIsIm92ZXJyaWRlTWFuaWZlc3RDb25maWd1cmF0aW9uV2l0aEFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsInByZXNzIiwidmlzaWJsZUZvckNvbnRleHRNZW51IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiaGlkZGVuQWN0aW9ucyIsImZhY2V0TmFtZSIsImxhc3REb3RJbmRleCIsImxhc3RJbmRleE9mIiwiaWQiLCJzdGFydHNXaXRoIiwiZ2V0Q3VzdG9tQWN0aW9uSUQiLCJEZWZhdWx0IiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwiaGFuZGxlck1vZHVsZSIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJoYW5kbGVyTWV0aG9kIiwidGV4dCIsIm5vV3JhcCIsIl9fbm9XcmFwIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwiZW5hYmxlQXV0b1Njcm9sbCIsImlubGluZSIsImlzQUlPcGVyYXRpb24iLCJwcm9wZXJ0eVZhbHVlIiwicmVzb2x2ZWRCaW5kaW5nIiwiaXNDb25zdGFudCIsInZhbHVlIiwiY29uc3RhbnQiLCJtZXRob2RQYXRoIiwiaW50ZXJuYWxNb2RlbFBhdGgiLCJmb3JtYXRSZXN1bHQiLCJmcG1Gb3JtYXR0ZXIiLCJjdXN0b21Cb29sZWFuUHJvcGVydHlDaGVjayIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJvTWVudUl0ZW1LZXlzIiwiYWN0aW9uTWVudSIsInJlZHVjZSIsIml0ZW0iLCJfcmVmIiwiZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uIiwiYWN0aW9uVGFyZ2V0IiwicGF0aEZyb21Db250ZXh0TG9jYXRpb24iLCJhbm5vdGF0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiaXNFbmFibGVkRXhwIiwiZ2V0QWN0aW9uRW5hYmxlZEV4cHJlc3Npb24iLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImNvbGxhYm9yYXRpb25PblJvb3QiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQiLCJnZXREcmFmdFJvb3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm1hcHBpbmdzIiwibWFwcGluZyIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsImJJc05hdmlnYXRpb25Db25maWd1cmVkIiwiZGV0YWlsT3JEaXNwbGF5IiwiZGV0YWlsIiwiZGlzcGxheSIsInJvdXRlIiwiYWZ0ZXJFeGVjdXRpb24iLCJuYXZpZ2F0ZVRvSW5zdGFuY2UiLCJkYXRhRmllbGRJc0NvcHlBY3Rpb24iLCJkYXRhRmllbGQiLCJJc0NvcHlBY3Rpb24iLCIkVHlwZSIsImdldENvcHlBY3Rpb24iLCJjb3B5RGF0YUZpZWxkcyIsIkxvZyIsImVycm9yIiwiZ2V0QW5ub3RhdGlvbk1lbnVBY3Rpb25JdGVtcyIsIm1lbnVBY3Rpb25JdGVtcyIsImdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24iLCJhbm5vdGF0aW9uTWVudUl0ZW1zIiwibWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnMiLCJwcmVwYXJlTWVudUFjdGlvbnMiLCJ1bnByZXBhcmVkQWN0aW9ucyIsIm92ZXJyaWRlTWVudUFjdGlvbnMiLCJmb3VuZEFjdGlvbiIsIm1lbnVJdGVtSW5kZXgiLCJvdmVycmlkZU1lbnVBY3Rpb24iLCJzcGxpY2UiLCJpc01lbnVBSU9wZXJhdGlvbiIsImV2ZXJ5IiwiaXNBY3Rpb25BSU9wZXJhdGlvbiIsIkFjdGlvblRhcmdldCIsIklzQUlPcGVyYXRpb24iLCJnZXRDcmVhdGVOZXh0QnV0dG9uVmlzaWJpbGl0eSIsImhpZGRlbkRyYWZ0RW5hYmxlZCIsImZjbEVuYWJsZWQiLCJEcmFmdCIsIklzTmV3T2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgU2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkdyb3VwVHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRncmVhdGVyT3JFcXVhbCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEN1c3RvbURlZmluZWRUYWJsZUNvbHVtbkZvck92ZXJyaWRlLFxuXHRNYW5pZmVzdEFjdGlvbixcblx0TmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQsIE92ZXJyaWRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgZ2V0Q3VzdG9tQWN0aW9uSUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgZnBtRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgRHJhZnQsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gQnV0dG9uVHlwZSB7XG5cdEFjY2VwdCA9IFwiQWNjZXB0XCIsXG5cdEF0dGVudGlvbiA9IFwiQXR0ZW50aW9uXCIsXG5cdEJhY2sgPSBcIkJhY2tcIixcblx0Q3JpdGljYWwgPSBcIkNyaXRpY2FsXCIsXG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0RW1waGFzaXplZCA9IFwiRW1waGFzaXplZFwiLFxuXHRHaG9zdCA9IFwiR2hvc3RcIixcblx0TmVnYXRpdmUgPSBcIk5lZ2F0aXZlXCIsXG5cdE5ldXRyYWwgPSBcIk5ldXRyYWxcIixcblx0UmVqZWN0ID0gXCJSZWplY3RcIixcblx0U3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuXHRUcmFuc3BhcmVudCA9IFwiVHJhbnNwYXJlbnRcIixcblx0VW5zdHlsZWQgPSBcIlVuc3R5bGVkXCIsXG5cdFVwID0gXCJVcFwiXG59XG5cbmV4cG9ydCBjb25zdCBhaUljb24gPSBcInNhcC1pY29uOi8vYWlcIjtcblxuZXhwb3J0IHR5cGUgQmFzZUFjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHR5cGU/OiBBY3Rpb25UeXBlO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbmFibGVkRm9yQ29udGV4dE1lbnU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlRm9yQ29udGV4dE1lbnU/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0ZW5hYmxlT25TZWxlY3Q/OiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24/OiBzdHJpbmc7XG5cdGlzTmF2aWdhYmxlPzogYm9vbGVhbjtcblx0ZW5hYmxlQXV0b1Njcm9sbD86IGJvb2xlYW47XG5cdHBhcmVudEVudGl0eURlbGV0ZUVuYWJsZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0bWVudT86IEJhc2VBY3Rpb25bXTtcblx0ZmFjZXROYW1lPzogc3RyaW5nO1xuXHRjb21tYW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRpc0FJT3BlcmF0aW9uPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb24gPSBCYXNlQWN0aW9uICYge1xuXHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHwgQWN0aW9uVHlwZS5NZW51IHwgQWN0aW9uVHlwZS5Db3B5O1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRjdXN0b21EYXRhPzogc3RyaW5nO1xuXHRyZXF1aXJlc0RpYWxvZz86IHN0cmluZztcblx0YmluZGluZz86IHN0cmluZztcblx0YnV0dG9uVHlwZT86IEJ1dHRvblR5cGUuR2hvc3QgfCBCdXR0b25UeXBlLlRyYW5zcGFyZW50IHwgc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkFjdGlvbkFjdGlvbkdyb3VwID0gQmFzZUFjdGlvbiAmIHtcblx0Ly8gaW1wbGVtZW50cyBEYXRhRmllbGRGb3JBY3Rpb25Hcm91cFxuXHR0eXBlOiBBY3Rpb25UeXBlLk1lbnU7XG5cdG1lbnU6IEFubm90YXRpb25BY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUFjdGlvbiA9IEN1c3RvbUVsZW1lbnQ8XG5cdEJhc2VBY3Rpb24gJiB7XG5cdFx0aGFuZGxlck1ldGhvZD86IHN0cmluZztcblx0XHRoYW5kbGVyTW9kdWxlPzogc3RyaW5nO1xuXHRcdG5vV3JhcD86IGJvb2xlYW47IC8vIEluZGljYXRlcyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdGhlIHdyYXBwaW5nIGZyb20gdGhlIEZQTUhlbHBlclxuXHRcdHJlcXVpcmVzU2VsZWN0aW9uPzogYm9vbGVhbjtcblx0XHRkZWZhdWx0QWN0aW9uPzogc3RyaW5nIHwgQmFzZUFjdGlvbiB8IEN1c3RvbUFjdGlvbjsgLy8gSW5kaWNhdGVzIHdoZXRoZXIgYSBkZWZhdWx0IGFjdGlvbiBleGlzdHMgaW4gdGhpcyBjb250ZXh0XG5cdH1cbj47XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb25Hcm91cCA9IEJhc2VBY3Rpb24gJiB7XG5cdC8vIGltcGxlbWVudHMgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBcblx0dHlwZTogQWN0aW9uVHlwZS5NZW51O1xuXHRtZW51OiBBbm5vdGF0aW9uQWN0aW9uW107XG59O1xuXG5leHBvcnQgdHlwZSBDb21iaW5lZEFjdGlvbiA9IHtcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcbn07XG5cbmV4cG9ydCB0eXBlIE92ZXJyaWRlVHlwZUFjdGlvbiA9IHtcblx0ZW5hYmxlQXV0b1Njcm9sbD86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGlzTmF2aWdhYmxlPzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblx0ZW5hYmxlT25TZWxlY3Q/OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xuXHRtZW51PzogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZTtcblxuXHQvLyBDYW4gYmUgb3ZlcndyaXR0ZW4gYnkgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhbmQgc2hvdWxkIGJlIGFsaWduZWQgZm9yIGFsbCBhY3Rpb25zXG5cdGVuYWJsZWQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHZpc2libGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHZpc2libGVGb3JDb250ZXh0TWVudT86IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGU7XG5cdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlO1xufTtcblxuZXhwb3J0IHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uT3JBY3Rpb25Hcm91cCA9IERhdGFGaWVsZEZvckFjdGlvblR5cGVzIHwgRGF0YUZpZWxkRm9yQWN0aW9uR3JvdXBUeXBlcztcblxudHlwZSBNZW51QWN0aW9uID1cblx0fCBCYXNlQWN0aW9uXG5cdHwge1xuXHRcdFx0dmlzaWJsZT86IHN0cmluZ1tdO1xuXHRcdFx0ZW5hYmxlZD86IHN0cmluZ1tdO1xuXHRcdFx0bWVudT86IEJhc2VBY3Rpb25bXTtcblx0ICB9O1xuLyoqXG4gKiBNZXRob2QgcHJvdmlkZXMgYWN0aW9ucyBjb2xsZWN0aW9uIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHNldHRpbmcgZm9yIGFsbCBhY3Rpb25zIG9mIHR5cGUgbWVudSBkZXBlbmRpbmcgb24gaXRzIHZpc2libGUgc2V0dGluZyBhbmQgaXRzIG1lbnUgaXRlbXMgdmlzaWJsZSBzZXR0aW5ncy5cbiAqIEBwYXJhbSBhY3Rpb25zIENvbGxlY3Rpb24gb2YgYWN0aW9uc1xuICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBhY3Rpb25zIHdpdGggdmlzaWJsZSBzZXR0aW5nIHNldCBmb3IgYWN0aW9ucyBvZiB0eXBlIG1lbnVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFZpc2liaWxpdHlFbmFibGVtZW50TWVudUFjdGlvbnMgPSAoYWN0aW9uczogQ3VzdG9tQWN0aW9uW10pOiBDdXN0b21BY3Rpb25bXSA9PiB7XG5cdGxldCBtZW51QWN0aW9uTm90VmlzaWJsZTogc3RyaW5nIHwgYm9vbGVhbixcblx0XHRtZW51QWN0aW9uVmlzaWJsZVBhdGhzOiBzdHJpbmdbXSxcblx0XHRhdGxlYXN0T25lTWVudUl0ZW1zVmlzaWJsZTogYm9vbGVhbixcblx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHM6IHN0cmluZ1tdO1xuXHRhY3Rpb25zLmZvckVhY2goKG1lbnVBY3Rpb246IE1lbnVBY3Rpb24pID0+IHtcblx0XHRtZW51QWN0aW9uTm90VmlzaWJsZSA9IG1lbnVBY3Rpb24udmlzaWJsZT8udmFsdWVPZigpID09PSBcImZhbHNlXCI7XG5cdFx0YXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgPSBmYWxzZTtcblx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHMgPSBbXTtcblx0XHRtZW51QWN0aW9uVmlzaWJsZVBhdGhzID0gW107XG5cdFx0aWYgKG1lbnVBY3Rpb24udmlzaWJsZSAmJiAhKG1lbnVBY3Rpb24udmlzaWJsZS52YWx1ZU9mKCkgPT09IFwidHJ1ZVwiIHx8IG1lbnVBY3Rpb24udmlzaWJsZS52YWx1ZU9mKCkgPT09IFwiZmFsc2VcIikpIHtcblx0XHRcdG1lbnVBY3Rpb25WaXNpYmxlUGF0aHMucHVzaChtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cdFx0aWYgKG1lbnVBY3Rpb24/Lm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0bWVudUFjdGlvbj8ubWVudT8uZm9yRWFjaCgobWVudUl0ZW06IEJhc2VBY3Rpb24pOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1WaXNpYmxlID0gbWVudUl0ZW0udmlzaWJsZTtcblx0XHRcdFx0aWYgKG1lbnVJdGVtVmlzaWJsZSAmJiAodHlwZW9mIG1lbnVJdGVtVmlzaWJsZSA9PT0gXCJib29sZWFuXCIgfHwgbWVudUl0ZW1WaXNpYmxlLnZhbHVlT2YoKSA9PT0gXCJ0cnVlXCIpKSB7XG5cdFx0XHRcdFx0YXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgPSB0cnVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG1lbnVJdGVtVmlzaWJsZSAmJiBtZW51SXRlbVZpc2libGUudmFsdWVPZigpICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0XHRtZW51SXRlbXNWaXNpYmxlUGF0aHMucHVzaChtZW51SXRlbVZpc2libGUudmFsdWVPZigpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWVudUFjdGlvbk5vdFZpc2libGUpIHtcblx0XHRcdFx0Ly8gaWYgbWVudSBpcyBzdGF0aWNhbGx5IHZpc2libGUgZmFsc2Vcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gZmFsc2UudG9TdHJpbmcoKTtcblx0XHRcdH0gZWxzZSBpZiAoIWF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlICYmICFtZW51SXRlbXNWaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGlmIGFsbCBtZW51IGl0ZW1zIGFyZSBzdGF0aWNhbGx5IHZpc2libGUgZmFsc2Vcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gZmFsc2UudG9TdHJpbmcoKTtcblx0XHRcdH0gZWxzZSBpZiAoYXRsZWFzdE9uZU1lbnVJdGVtc1Zpc2libGUgJiYgIW1lbnVBY3Rpb25WaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBtZW51IGl0ZW0gaXMgc3RhdGljYWxseSB2aXNpYmxlIHRydWUgYW5kIG5vIHZpc2libGUgc2V0dGluZyBmb3IgbWVudVxuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSB0cnVlLnRvU3RyaW5nKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGF0bGVhc3RPbmVNZW51SXRlbXNWaXNpYmxlKSB7XG5cdFx0XHRcdC8vIGlmIGF0IGxlYXN0IG9uZSBtZW51IGl0ZW0sIHRoZW4ganVzdCBjb25zaWRlciB2aXNpYmxlIHNldHRpbmcgb2YgdGhlIG1lbnVcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24ocmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudUFjdGlvbi52aXNpYmxlIGFzIHN0cmluZykpO1xuXHRcdFx0fSBlbHNlIGlmIChtZW51QWN0aW9uVmlzaWJsZVBhdGhzLmxlbmd0aCB8fCBtZW51SXRlbXNWaXNpYmxlUGF0aHMubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBtZW51IGlzIHNldCB0byBpbnZpc2libGUsIGl0IHNob3VsZCBiZSBpbnZpc2libGUsIG90aGVyd2lzZSB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBpdGVtc1xuXHRcdFx0XHRjb25zdCB2aXNpYmxlRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdID0gbWVudUl0ZW1zVmlzaWJsZVBhdGhzLm1hcCgobWVudUl0ZW1WaXNpYmxlUGF0aCkgPT5cblx0XHRcdFx0XHRyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51SXRlbVZpc2libGVQYXRoLCBcImJvb2xlYW5cIilcblx0XHRcdFx0KTtcblx0XHRcdFx0bWVudUFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKChtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nKSB8fCB0cnVlLCBcImJvb2xlYW5cIiksIG9yKC4uLnZpc2libGVFeHByZXNzaW9ucykpXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtZW51QWN0aW9uLnZpc2libGUgPSAoIW1lbnVBY3Rpb25Ob3RWaXNpYmxlKS50b1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zO1xufTtcblxuLyoqXG4gKiBBZGRzIHRoZSBjb2xsYWJvcmF0aW9uIGNvbmRpdGlvbiB0byBhbGwgYWN0aW9ucyB3aXRoIHR5cGUgRm9yQWN0aW9uLlxuICogVGhpcyBkaXNhYmxlcyB0aGUgYWN0aW9ucyBpZiB0aGUgY29sbGFib3JhdGlvbiBpcyBlbmFibGVkLCBidXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRoZSBhdXRob3JpemF0aW9uIGZyb20gdGhlIGJhY2sgZW5kLlxuICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgb2YgdGhlIHRhYmxlIGFjdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDb2xsYWJvcmF0aW9uQ29uZGl0aW9uKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogdm9pZCB7XG5cdGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbi52aXNpYmxlPy52YWx1ZU9mKCkgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIpIHtcblx0XHRcdGFjdGlvbi52aXNpYmxlID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKSwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gYWN0aW9uIGJ5IGl0cyBrZXksIGJhc2VkIG9uIHRoZSBnaXZlbiBhbm5vdGF0aW9uIGFjdGlvbnMgYW5kIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uIFRoZSByZXN1bHQgYWxyZWFkeSByZXByZXNlbnRzIHRoZVxuICogbWVyZ2VkIGFjdGlvbiBmcm9tIGJvdGggY29uZmlndXJhdGlvbiBzb3VyY2VzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWxzbyByZXR1cm5zIGFuIGluZGljYXRpb24gd2hldGhlciB0aGUgYWN0aW9uIGNhbiBiZSBhIG1lbnUgaXRlbSwgc2F5aW5nIHdoZXRoZXIgaXQgaXMgdmlzaWJsZSBvciBvZiBhIHNwZWNpZmljIHR5cGVcbiAqIHRoYXQgYWxsb3dzIHRoaXMuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGFjdGlvbktleSBBY3Rpb24gS2V5IHRvIGxvb2sgdXBcbiAqIEByZXR1cm5zIE1lcmdlZCBhY3Rpb24gYW5kIGluZGljYXRvciB3aGV0aGVyIGl0IGNhbiBiZSBhIG1lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBtYXBBY3Rpb25CeUtleShcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRhY3Rpb25LZXk6IHN0cmluZ1xuKTogeyBhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb247IGNhbkJlTWVudUl0ZW06IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IHtcblx0Y29uc3QgYW5ub3RhdGlvbkFjdGlvbiA9IGFubm90YXRpb25BY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLmtleSA9PT0gYWN0aW9uS2V5KTtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0bGV0IHJlc3VsdEFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbiA9IHsgLi4uKGFubm90YXRpb25BY3Rpb24gPz8gbWFuaWZlc3RBY3Rpb24pIH07XG5cblx0Ly8gYWN0aW9ucyBpbnNpZGUgbWVudXMgY2FuJ3QgYmUgZm91bmQgb24gdG9wIGxldmVsLCBzbyBhc3NpZ24gYWN0aW9ucyBmcm9tIG1lbnUgdG8gaXRcblx0aWYgKE9iamVjdC5rZXlzKHJlc3VsdEFjdGlvbikubGVuZ3RoID09PSAwKSB7XG5cdFx0YW5ub3RhdGlvbkFjdGlvbnNcblx0XHRcdC5maWx0ZXIoKGFjdGlvbkFubm90YXRpb246IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFjdGlvbkFubm90YXRpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51O1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKChtZW51QWN0aW9uOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdG1lbnVBY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW06IEJhc2VBY3Rpb24pID0+IHtcblx0XHRcdFx0XHRpZiAobWVudUl0ZW0ua2V5ID09PSBhY3Rpb25LZXkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdEFjdGlvbiA9IG1lbnVJdGVtO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8vIEFubm90YXRpb24gYWN0aW9uIGFuZCBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFscmVhZHkgaGFzIHRvIGJlIG1lcmdlZCBoZXJlIGFzIGluc2VydEN1c3RvbUVsZW1lbnRzIG9ubHkgY29uc2lkZXJzIHRvcC1sZXZlbCBhY3Rpb25zXG5cdGlmIChhbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0Ly8gSWYgZW5hYmxlZCBvciB2aXNpYmxlIGlzIG5vdCBzZXQgaW4gdGhlIG1hbmlmZXN0LCB1c2UgdGhlIGFubm90YXRpb24gdmFsdWUgYW5kIGhlbmNlIGRvIG5vdCBvdmVyd3JpdGVcblx0XHRyZXN1bHRBY3Rpb24uZW5hYmxlZCA9IG1hbmlmZXN0QWN0aW9uPy5lbmFibGVkID8/IGFubm90YXRpb25BY3Rpb24uZW5hYmxlZDtcblx0XHRyZXN1bHRBY3Rpb24udmlzaWJsZSA9IG1hbmlmZXN0QWN0aW9uPy52aXNpYmxlID8/IGFubm90YXRpb25BY3Rpb24udmlzaWJsZTtcblxuXHRcdGZvciAoY29uc3QgcHJvcCBpbiBtYW5pZmVzdEFjdGlvbiB8fCB7fSkge1xuXHRcdFx0Y29uc3QgcHJvcEtleSA9IHByb3AgYXMga2V5b2YgQmFzZUFjdGlvbjtcblx0XHRcdGlmICghYW5ub3RhdGlvbkFjdGlvbltwcm9wS2V5XSAmJiBwcm9wS2V5ICE9PSBcIm1lbnVcIikge1xuXHRcdFx0XHRyZXN1bHRBY3Rpb25bcHJvcEtleV0gPSBtYW5pZmVzdEFjdGlvbltwcm9wS2V5XSBhcyBuZXZlcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBjYW5CZU1lbnVJdGVtID1cblx0XHRyZXN1bHRBY3Rpb24/LnZpc2libGUgfHxcblx0XHRyZXN1bHRBY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0cmVzdWx0QWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRyZXR1cm4ge1xuXHRcdGFjdGlvbjogcmVzdWx0QWN0aW9uIGFzIEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdFx0Y2FuQmVNZW51SXRlbVxuXHR9O1xufVxuXG4vKipcbiAqIE1hcCB0aGUgZGVmYXVsdCBhY3Rpb24ga2V5IG9mIGEgbWVudSB0byBpdHMgYWN0dWFsIGFjdGlvbiBjb25maWd1cmF0aW9uIGFuZCBpZGVudGlmeSB3aGV0aGVyIHRoaXMgZGVmYXVsdCBhY3Rpb24gaXMgYSBjb21tYW5kLlxuICogQHBhcmFtIG1lbnVBY3Rpb24gTWVudSBhY3Rpb24gdG8gbWFwIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3JcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgQWN0aW9ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCB0aHJvdWdoIGFubm90YXRpb25zXG4gKiBAcGFyYW0gY29tbWFuZEFjdGlvbnMgQXJyYXkgb2YgY29tbWFuZCBhY3Rpb25zIHRvIHB1c2ggdGhlIGRlZmF1bHQgYWN0aW9uIHRvIGlmIGFwcGxpY2FibGVcbiAqL1xuZnVuY3Rpb24gbWFwTWVudURlZmF1bHRBY3Rpb24oXG5cdG1lbnVBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbixcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBQYXJ0aWFsbHlDb252ZXJ0ZWRDdXN0b21BY3Rpb24+LFxuXHRhbm5vdGF0aW9uQWN0aW9uczogQmFzZUFjdGlvbltdLFxuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbj5cbik6IHZvaWQge1xuXHRjb25zdCB7IGFjdGlvbiwgY2FuQmVNZW51SXRlbSB9ID0gbWFwQWN0aW9uQnlLZXkobWFuaWZlc3RBY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucywgbWVudUFjdGlvbi5kZWZhdWx0QWN0aW9uIGFzIHN0cmluZyk7XG5cblx0aWYgKGNhbkJlTWVudUl0ZW0pIHtcblx0XHRtZW51QWN0aW9uLmRlZmF1bHRBY3Rpb24gPSBhY3Rpb247XG5cdH1cblxuXHRpZiAoYWN0aW9uLmNvbW1hbmQpIHtcblx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb24ua2V5XSA9IGFjdGlvbjtcblx0fVxufVxuXG4vKipcbiAqIE1hcCB0aGUgbWVudSBpdGVtIGtleXMgb2YgYSBtZW51IHRvIHRoZWlyIGFjdHVhbCBhY3Rpb24gY29uZmlndXJhdGlvbnMgYW5kIGlkZW50aWZ5IHdoZXRoZXIgdGhleSBhcmUgY29tbWFuZHMuXG4gKiBAcGFyYW0gbWVudUFjdGlvbiBNZW51IGFjdGlvbiB0byBtYXAgdGhlIG1lbnUgaXRlbXMgZm9yXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHBhcmFtIGNvbW1hbmRBY3Rpb25zIEFycmF5IG9mIGNvbW1hbmQgYWN0aW9ucyB0byBwdXNoIHRoZSBtZW51IGl0ZW0gYWN0aW9ucyB0byBpZiBhcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIG1hcE1lbnVJdGVtcyhcblx0bWVudUFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uLFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uPlxuKTogdm9pZCB7XG5cdGNvbnN0IG1hcHBlZE1lbnVJdGVtczogKEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW10gPSBbXTtcblx0Y29uc3QgbWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uID0gYW5ub3RhdGlvbkFjdGlvbnMuZmluZCgoYW5ub3RhdGlvbkFjdGlvbikgPT4gYW5ub3RhdGlvbkFjdGlvbi5rZXkgPT09IG1lbnVBY3Rpb24ua2V5KTtcblxuXHRpZiAobWVudUFjdGlvbi5tZW51Py5sZW5ndGggIT09IDApIHtcblx0XHRmb3IgKGNvbnN0IG1lbnVJdGVtS2V5IG9mIG1lbnVBY3Rpb24ubWVudSA/PyBbXSkge1xuXHRcdFx0Y29uc3QgeyBhY3Rpb24sIGNhbkJlTWVudUl0ZW0gfSA9IG1hcEFjdGlvbkJ5S2V5KG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIG1lbnVJdGVtS2V5KTtcblxuXHRcdFx0aWYgKGNhbkJlTWVudUl0ZW0pIHtcblx0XHRcdFx0bWFwcGVkTWVudUl0ZW1zLnB1c2goYWN0aW9uKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdGNvbW1hbmRBY3Rpb25zW21lbnVJdGVtS2V5XSA9IGFjdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBJZiBubyBtZW51IGl0ZW1zIGFyZSBhc3NpZ25lZCB0byB0aGUgbWFuaWZlc3Qtb3ZlcnJpZGUtbWVudSwgaXQgaW5oZXJpdHMgdGhlIGl0ZW1zIGZyb20gdGhlIHByZXZpb3VzIG1lbnVcblx0ZWxzZSBpZiAobWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uKSB7XG5cdFx0bWF0Y2hpbmdBbm5vdGF0aW9uQWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtKSA9PiBtYXBwZWRNZW51SXRlbXMucHVzaChtZW51SXRlbSkpO1xuXHR9XG5cblx0Y29uc3QgbWFwcGVkTWVudUFjdGlvbiA9IG1lbnVBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uO1xuXHRtYXBwZWRNZW51QWN0aW9uLm1lbnUgPSBtYXBwZWRNZW51SXRlbXM7XG5cblx0Ly8gSWYgdGhlIG1lbnUgaXMgc2V0IHRvIGludmlzaWJsZSwgaXQgc2hvdWxkIGJlIGludmlzaWJsZSwgb3RoZXJ3aXNlIHRoZSB2aXNpYmlsaXR5IHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGl0ZW1zXG5cdGNvbnN0IHZpc2libGVFeHByZXNzaW9uczogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10gPSBtYXBwZWRNZW51SXRlbXMubWFwKChtZW51SXRlbSkgPT5cblx0XHRyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51SXRlbS52aXNpYmxlIGFzIHN0cmluZywgXCJib29sZWFuXCIpXG5cdCk7XG5cdG1hcHBlZE1lbnVBY3Rpb24udmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhtZW51QWN0aW9uLnZpc2libGUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIiksIG9yKC4uLnZpc2libGVFeHByZXNzaW9ucykpXG5cdCk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyB0aGUgZmxhdCBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgaW50byBhIG5lc3RlZCBzdHJ1Y3R1cmVzIG9mIG1lbnVzLiBUaGUgcmVzdWx0IGlzIGEgcmVjb3JkIG9mIGFjdGlvbnMgdGhhdCBhcmUgZWl0aGVyIG1lbnVzIG9yXG4gKiBvbmVzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBtZW51cyBhcyBtZW51IGl0ZW1zLiBJdCBhbHNvIHJldHVybnMgYSBsaXN0IG9mIGFjdGlvbnMgdGhhdCBoYXZlIGFuIGFzc2lnbmVkIGNvbW1hbmQuXG4gKlxuICogTm90ZSB0aGF0IG1lbnUgaXRlbXMgYXJlIGFscmVhZHkgdGhlIG1lcmdlZCByZXN1bHQgb2YgYW5ub3RhdGlvbiBhY3Rpb25zIGFuZCB0aGVpciBtYW5pZmVzdCBjb25maWd1cmF0aW9uLCBhcyB7QGxpbmsgaW5zZXJ0Q3VzdG9tRWxlbWVudHN9XG4gKiBvbmx5IGNvbnNpZGVycyByb290LWxldmVsIGFjdGlvbnMuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIEFjdGlvbnMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBBY3Rpb25zIGRlZmluZWQgdGhyb3VnaCBhbm5vdGF0aW9uc1xuICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIGFjdGlvbnMgZnJvbSB0aGUgbWFuaWZlc3QgYW5kIGEgbGlzdCBvZiBjb21tYW5kIGFjdGlvbnNcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtTWVudUFjdGlvbnNBbmRJZGVudGlmeUNvbW1hbmRzKFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbj4sXG5cdGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW11cbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWxsQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRjb25zdCBhY3Rpb25LZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cdGNvbnN0IGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cblx0Zm9yIChjb25zdCBhY3Rpb25LZXkgaW4gbWFuaWZlc3RBY3Rpb25zKSB7XG5cdFx0Y29uc3QgbWFuaWZlc3RBY3Rpb246IFBhcnRpYWxseUNvbnZlcnRlZEN1c3RvbUFjdGlvbiA9IG1hbmlmZXN0QWN0aW9uc1thY3Rpb25LZXldO1xuXG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRBY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bWFwTWVudURlZmF1bHRBY3Rpb24obWFuaWZlc3RBY3Rpb24sIG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIGNvbW1hbmRBY3Rpb25zKTtcblx0XHR9XG5cblx0XHRpZiAobWFuaWZlc3RBY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZS5NZW51KSB7XG5cdFx0XHRtYXBNZW51SXRlbXMobWFuaWZlc3RBY3Rpb24sIG1hbmlmZXN0QWN0aW9ucywgYW5ub3RhdGlvbkFjdGlvbnMsIGNvbW1hbmRBY3Rpb25zKTtcblxuXHRcdFx0Ly8gTWVudSBoYXMgbm8gdmlzaWJsZSBpdGVtcywgc28gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIW1hbmlmZXN0QWN0aW9uLm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0XHRhY3Rpb25LZXlzVG9EZWxldGUucHVzaChtYW5pZmVzdEFjdGlvbi5rZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb25LZXldID0gbWFuaWZlc3RBY3Rpb24gYXMgQ3VzdG9tQWN0aW9uO1xuXHRcdH1cblxuXHRcdGFsbEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbjtcblx0fVxuXG5cdGFjdGlvbktleXNUb0RlbGV0ZS5mb3JFYWNoKChhY3Rpb25LZXk6IHN0cmluZykgPT4gZGVsZXRlIGFsbEFjdGlvbnNbYWN0aW9uS2V5XSk7XG5cblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBhbGxBY3Rpb25zLFxuXHRcdGNvbW1hbmRBY3Rpb25zOiBjb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGVuYWJsZW1lbnQgb2YgYSBtYW5pZmVzdCBhY3Rpb24uXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb24gVGhlIGFjdGlvbiBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGlzQW5ub3RhdGlvbkFjdGlvbiBXaGV0aGVyIHRoZSBhY3Rpb24sIGRlZmluZWQgaW4gbWFuaWZlc3QsIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIGFubm90YXRpb24gYWN0aW9uLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGVuYWJsZW1lbnRcbiAqL1xuY29uc3QgX2dldE1hbmlmZXN0RW5hYmxlZCA9IGZ1bmN0aW9uIChcblx0bWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uLFxuXHRpc0Fubm90YXRpb25BY3Rpb246IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uICYmIG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gYWN0aW9uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBhY3Rpb24ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBnZXRNYW5pZmVzdEFjdGlvbkJvb2xlYW5Qcm9wZXJ0eVdpdGhGb3JtYXR0ZXIobWFuaWZlc3RBY3Rpb24uZW5hYmxlZCwgY29udmVydGVyQ29udGV4dCwgZm9yQ29udGV4dE1lbnUpO1xuXG5cdC8vIENvbnNpZGVyIHJlcXVpcmVzU2VsZWN0aW9uIHByb3BlcnR5IHRvIGluY2x1ZGUgc2VsZWN0ZWRDb250ZXh0cyBpbiB0aGUgYmluZGluZyBleHByZXNzaW9uXG5cdGNvbnN0IGludGVybmFsTW9kZWxQcm9wZXJ0eSA9ICFmb3JDb250ZXh0TWVudSA/IFwibnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIgOiBcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0aWZFbHNlKFxuXHRcdFx0bWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUsXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLmVuYWJsZU9uU2VsZWN0ID09PSBcInNpbmdsZVwiLFxuXHRcdFx0XHRhbmQoZXF1YWwocGF0aEluTW9kZWwoaW50ZXJuYWxNb2RlbFByb3BlcnR5LCBcImludGVybmFsXCIpLCAxKSwgcmVzdWx0KSxcblx0XHRcdFx0YW5kKGdyZWF0ZXJPckVxdWFsKHBhdGhJbk1vZGVsKGludGVybmFsTW9kZWxQcm9wZXJ0eSwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdClcblx0XHRcdCksXG5cdFx0XHRyZXN1bHRcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZpc2liaWxpdHkgb2YgYSBtYW5pZmVzdCBhY3Rpb24uXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb24gVGhlIGFjdGlvbiBjb25maWd1cmVkIGluIHRoZSBtYW5pZmVzdFxuICogQHBhcmFtIGlzQW5ub3RhdGlvbkFjdGlvbiBXaGV0aGVyIHRoZSBhY3Rpb24sIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIERldGVybWluZWQgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSB2aXNpYmlsaXR5XG4gKi9cbmNvbnN0IF9nZXRNYW5pZmVzdFZpc2libGUgPSBmdW5jdGlvbiAoXG5cdG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbixcblx0aXNBbm5vdGF0aW9uQWN0aW9uOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGlzQW5ub3RhdGlvbkFjdGlvbiAmJiBtYW5pZmVzdEFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBJZiBhbm5vdGF0aW9uIGFjdGlvbiBoYXMgbm8gcHJvcGVydHkgZGVmaW5lZCBpbiBtYW5pZmVzdCxcblx0XHQvLyBkbyBub3Qgb3ZlcndyaXRlIGl0IHdpdGggbWFuaWZlc3QgYWN0aW9uJ3MgZGVmYXVsdCB2YWx1ZS5cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0bGV0IHJlc3VsdCA9IGdldE1hbmlmZXN0QWN0aW9uQm9vbGVhblByb3BlcnR5V2l0aEZvcm1hdHRlcihtYW5pZmVzdEFjdGlvbi52aXNpYmxlLCBjb252ZXJ0ZXJDb250ZXh0LCBmb3JDb250ZXh0TWVudSk7XG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0cmVzdWx0ID0gZm9yQ29udGV4dE1lbnUgPyBhbmQocmVzdWx0LCBlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2luYWN0aXZlQ29udGV4dFwiLCBcImludGVybmFsXCIpLCBmYWxzZSkpIDogcmVzdWx0O1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmVzdWx0KTtcbn07XG5cbnR5cGUgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uID0gT21pdDxDdXN0b21BY3Rpb24sIFwibWVudVwiPiAmIHsgbWVudTogc3RyaW5nW10gfCB1bmRlZmluZWQgfTtcblxuLyoqXG4gKiBBcyBzb21lIHByb3BlcnRpZXMgc2hvdWxkIG5vdCBiZSBvdmVycmlkYWJsZSBieSB0aGUgbWFuaWZlc3QsIG1ha2Ugc3VyZSB0aGF0IHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGdldHMgdGhlIGFubm90YXRpb24gdmFsdWVzIGZvciB0aGVzZS5cbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbiBBY3Rpb24gZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9uIEFjdGlvbiBkZWZpbmVkIHRocm91Z2ggYW5ub3RhdGlvbnNcbiAqL1xuZnVuY3Rpb24gb3ZlcnJpZGVNYW5pZmVzdENvbmZpZ3VyYXRpb25XaXRoQW5ub3RhdGlvbihtYW5pZmVzdEFjdGlvbjogUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uLCBhbm5vdGF0aW9uQWN0aW9uPzogQmFzZUFjdGlvbik6IHZvaWQge1xuXHRpZiAoIWFubm90YXRpb25BY3Rpb24pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBEbyBub3Qgb3ZlcnJpZGUgdGhlICd0eXBlJyBnaXZlbiBpbiBhbiBhbm5vdGF0aW9uIGFjdGlvblxuXHRtYW5pZmVzdEFjdGlvbi50eXBlID0gYW5ub3RhdGlvbkFjdGlvbi50eXBlO1xuXHRtYW5pZmVzdEFjdGlvbi5hbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb25BY3Rpb24uYW5ub3RhdGlvblBhdGg7XG5cdG1hbmlmZXN0QWN0aW9uLnByZXNzID0gYW5ub3RhdGlvbkFjdGlvbi5wcmVzcztcblxuXHQvLyBPbmx5IHVzZSB0aGUgYW5ub3RhdGlvbiB2YWx1ZXMgZm9yIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgaWYgbm90IHNldCBpbiB0aGUgbWFuaWZlc3Rcblx0bWFuaWZlc3RBY3Rpb24uZW5hYmxlZCA9IG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPz8gYW5ub3RhdGlvbkFjdGlvbi5lbmFibGVkO1xuXHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gbWFuaWZlc3RBY3Rpb24udmlzaWJsZSA/PyBhbm5vdGF0aW9uQWN0aW9uLnZpc2libGU7XG5cdG1hbmlmZXN0QWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSA9IG1hbmlmZXN0QWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSA/PyBhbm5vdGF0aW9uQWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBhY3Rpb24gY29uZmlndXJhdGlvbiBiYXNlZCBvbiB0aGUgbWFuaWZlc3Qgc2V0dGluZ3MuXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhbm5vdGF0aW9uQWN0aW9ucyBUaGUgYW5ub3RhdGlvbiBhY3Rpb25zIGRlZmluaXRpb25cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3NcbiAqIEBwYXJhbSBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gaGlkZGVuQWN0aW9ucyBBY3Rpb25zIHRoYXQgYXJlIGNvbmZpZ3VyZWQgYXMgaGlkZGVuIChhZGRpdGlvbmFsIHRvIHRoZSB2aXNpYmxlIHByb3BlcnR5KVxuICogQHBhcmFtIGZhY2V0TmFtZSBUaGUgZmFjZXQgd2hlcmUgYW4gYWN0aW9uIGlzIGRpc3BsYXllZCBpZiBpdCBpcyBpbmxpbmVcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPiB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRhbm5vdGF0aW9uQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3M/OiBib29sZWFuLFxuXHRoaWRkZW5BY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRmYWNldE5hbWU/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgUGFydGlhbGx5Q29udmVydGVkQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRjb25zdCBsYXN0RG90SW5kZXggPSBtYW5pZmVzdEFjdGlvbi5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRcdGxldCBhbm5vdGF0aW9uQWN0aW9uOiBCYXNlQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGFubm90YXRpb25BY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGFjdGlvbiBvZiBhbm5vdGF0aW9uQWN0aW9ucykge1xuXHRcdFx0XHQvLyBTdWJTZWN0aW9uLnRzI2NyZWF0ZUZvcm1BY3Rpb25SZWR1Y2VyIHVzZXMgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgd2hpY2ggcmVzdWx0cyBpbiBhbm5vdGF0aW9uIGFjdGlvbnMgbWl4aW5nIHVwIHdpdGggbWFuaWZlc3QgYWN0aW9uXG5cdFx0XHRcdC8vIHRoaXMgaXMgd2h5IHdlIG1heSBmaW5kIGFuIGFjdGlvbiB0aGF0IGhhcyBhIEN1c3RvbUFjdGlvbiBwcmVmaXhcblx0XHRcdFx0aWYgKGFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGFjdGlvbi5rZXkgPT09IGFjdGlvbktleSkge1xuXHRcdFx0XHRcdGFubm90YXRpb25BY3Rpb24gPSBhY3Rpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IFwiTWVudVwiKSB7XG5cdFx0XHRcdFx0Ly8gSWYgbm90IGZvdW5kLCBjaGVjayBpbnNpZGUgbWVudXNcblx0XHRcdFx0XHRhbm5vdGF0aW9uQWN0aW9uID0gYWN0aW9uLm1lbnU/LmZpbmQoKG1lbnVJdGVtOiBCYXNlQWN0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbWVudUl0ZW0ua2V5ID09PSBhY3Rpb25LZXk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGFubm90YXRpb25BY3Rpb24pIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFRvIGlkZW50aWZ5IHRoZSBhbm5vdGF0aW9uIGFjdGlvbiBwcm9wZXJ0eSBvdmVyd3JpdGUgdmlhIG1hbmlmZXN0IHVzZS1jYXNlLlxuXHRcdGNvbnN0IGlzQW5ub3RhdGlvbkFjdGlvbiA9ICEhYW5ub3RhdGlvbkFjdGlvbjtcblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lKSB7XG5cdFx0XHRmYWNldE5hbWUgPSBtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWU7XG5cdFx0fVxuXG5cdFx0YWN0aW9uc1thY3Rpb25LZXldID0ge1xuXHRcdFx0aWQ6IGFubm90YXRpb25BY3Rpb24gPyBhY3Rpb25LZXkgOiBnZXRDdXN0b21BY3Rpb25JRChhY3Rpb25LZXkpLFxuXHRcdFx0dHlwZTogbWFuaWZlc3RBY3Rpb24ubWVudSA/IEFjdGlvblR5cGUuTWVudSA6IEFjdGlvblR5cGUuRGVmYXVsdCxcblx0XHRcdHZpc2libGU6IF9nZXRNYW5pZmVzdFZpc2libGUobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHR2aXNpYmxlRm9yQ29udGV4dE1lbnU6IF9nZXRNYW5pZmVzdFZpc2libGUobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSksXG5cdFx0XHRlbmFibGVkOiBfZ2V0TWFuaWZlc3RFbmFibGVkKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0ZW5hYmxlZEZvckNvbnRleHRNZW51OiBfZ2V0TWFuaWZlc3RFbmFibGVkKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQsIHRydWUpLFxuXHRcdFx0aGFuZGxlck1vZHVsZTogbWFuaWZlc3RBY3Rpb24ucHJlc3MgJiYgbWFuaWZlc3RBY3Rpb24ucHJlc3Muc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRoYW5kbGVyTWV0aG9kOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSksXG5cdFx0XHRwcmVzczogbWFuaWZlc3RBY3Rpb24ucHJlc3MsXG5cdFx0XHR0ZXh0OiBtYW5pZmVzdEFjdGlvbi50ZXh0LFxuXHRcdFx0bm9XcmFwOiBtYW5pZmVzdEFjdGlvbi5fX25vV3JhcCxcblx0XHRcdGtleTogcmVwbGFjZVNwZWNpYWxDaGFycyhhY3Rpb25LZXkpLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IG1hbmlmZXN0QWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtYW5pZmVzdEFjdGlvbi5kZWZhdWx0VmFsdWVzRnVuY3Rpb24sXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdEFjdGlvbiwgbmF2aWdhdGlvblNldHRpbmdzLCBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyksXG5cdFx0XHRjb21tYW5kOiBtYW5pZmVzdEFjdGlvbi5jb21tYW5kLFxuXHRcdFx0cmVxdWlyZXNTZWxlY3Rpb246IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogZW5hYmxlQXV0b1Njcm9sbChtYW5pZmVzdEFjdGlvbiksXG5cdFx0XHRtZW51OiBtYW5pZmVzdEFjdGlvbi5tZW51ID8/IChhbm5vdGF0aW9uQWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUgPyBbXSA6IHVuZGVmaW5lZCksXG5cdFx0XHRmYWNldE5hbWU6IG1hbmlmZXN0QWN0aW9uLmlubGluZSA/IGZhY2V0TmFtZSA6IHVuZGVmaW5lZCxcblx0XHRcdGRlZmF1bHRBY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRBY3Rpb24sXG5cdFx0XHRpc0FJT3BlcmF0aW9uOiBtYW5pZmVzdEFjdGlvbj8uaXNBSU9wZXJhdGlvbiA/PyB1bmRlZmluZWRcblx0XHR9O1xuXG5cdFx0b3ZlcnJpZGVNYW5pZmVzdENvbmZpZ3VyYXRpb25XaXRoQW5ub3RhdGlvbihhY3Rpb25zW2FjdGlvbktleV0sIGFubm90YXRpb25BY3Rpb24pO1xuXHR9XG5cblx0cmV0dXJuIHRyYW5zZm9ybU1lbnVBY3Rpb25zQW5kSWRlbnRpZnlDb21tYW5kcyhhY3Rpb25zLCBhbm5vdGF0aW9uQWN0aW9ucyA/PyBbXSk7XG59XG5cbi8qKlxuICogR2V0cyBhIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgYSBCb29sZWFuIG1hbmlmZXN0IHByb3BlcnR5IHRoYXQgY2FuIGVpdGhlciBiZSByZXByZXNlbnRlZCBieSBhIHN0YXRpYyB2YWx1ZSwgYSBiaW5kaW5nIHN0cmluZyxcbiAqIG9yIGEgcnVudGltZSBmb3JtYXR0ZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gcHJvcGVydHlWYWx1ZSBTdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmVkIHByb3BlcnR5IHZhbHVlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgQSBiaW5kaW5nIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBwcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBnZXRNYW5pZmVzdEFjdGlvbkJvb2xlYW5Qcm9wZXJ0eVdpdGhGb3JtYXR0ZXIoXG5cdHByb3BlcnR5VmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IHJlc29sdmVkQmluZGluZyA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4gfCBzdHJpbmc+KHByb3BlcnR5VmFsdWUgYXMgc3RyaW5nLCBcImJvb2xlYW5cIik7XG5cdGxldCByZXN1bHQ6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0aWYgKGlzQ29uc3RhbnQocmVzb2x2ZWRCaW5kaW5nKSAmJiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIE5vIHByb3BlcnR5IHZhbHVlIGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QgZm9yIHRoZSBjdXN0b20gYWN0aW9uIC0tPiBkZWZhdWx0IHZhbHVlIGlzIHRydWVcblx0XHRyZXN1bHQgPSBjb25zdGFudCh0cnVlKTtcblx0fSBlbHNlIGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgdHlwZW9mIHJlc29sdmVkQmluZGluZy52YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdC8vIFRoZW4gaXQncyBhIG1vZHVsZS1tZXRob2QgcmVmZXJlbmNlIFwic2FwLnh4eC55eXkuZG9Tb21ldGhpbmdcIlxuXHRcdGNvbnN0IG1ldGhvZFBhdGggPSByZXNvbHZlZEJpbmRpbmcudmFsdWU7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbFBhdGggPSAhZm9yQ29udGV4dE1lbnUgPyBcInNlbGVjdGVkQ29udGV4dHNcIiA6IFwiY29udGV4dG1lbnUvc2VsZWN0ZWRDb250ZXh0c1wiO1xuXHRcdC8vIEZJWE1FOiBUaGUgY3VzdG9tIFwiaXNFbmFibGVkXCIgY2hlY2sgZG9lcyBub3QgdHJpZ2dlciAoYmVjYXVzZSBub25lIG9mIHRoZSBib3VuZCB2YWx1ZXMgY2hhbmdlcylcblx0XHRyZXN1bHQgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbcGF0aEluTW9kZWw8Vmlldz4oXCIvXCIsIFwiJHZpZXdcIiksIG1ldGhvZFBhdGgsIHBhdGhJbk1vZGVsPENvbnRleHRbXT4oaW50ZXJuYWxNb2RlbFBhdGgsIFwiaW50ZXJuYWxcIildLFxuXHRcdFx0ZnBtRm9ybWF0dGVyLmN1c3RvbUJvb2xlYW5Qcm9wZXJ0eUNoZWNrLFxuXHRcdFx0IWZvckNvbnRleHRNZW51XG5cdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkuY29udGV4dExvY2F0aW9uPy50YXJnZXRFbnRpdHlUeXBlIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXG5cdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyB0aGVuIGl0J3MgYSBiaW5kaW5nXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEN1c3RvbUFjdGlvbltdKTogQ3VzdG9tQWN0aW9uW10gPT4ge1xuXHRsZXQgb01lbnVJdGVtS2V5czogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblx0YWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uPy5tZW51Py5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFjdGlvbk1lbnUgPSBhY3Rpb24ubWVudTtcblx0XHRcdG9NZW51SXRlbUtleXMgPSBhY3Rpb25NZW51LnJlZHVjZSgoaXRlbTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIHsga2V5IH0pID0+IHtcblx0XHRcdFx0aWYgKGtleSAmJiAhaXRlbVtrZXldKSB7XG5cdFx0XHRcdFx0aXRlbVtrZXldID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0sIG9NZW51SXRlbUtleXMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiAhb01lbnVJdGVtS2V5c1thY3Rpb24ua2V5XSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb25FeHByZXNzaW9uKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4sXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiA9IGZhbHNlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0bGV0IGlzRW5hYmxlZEV4cCA9IGdldEFjdGlvbkVuYWJsZWRFeHByZXNzaW9uKFxuXHRcdFx0YWN0aW9uVGFyZ2V0LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uXG5cdFx0KTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT25Sb290ID1cblx0XHRcdE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkRnJvbUNvbnZlcnRlckNvbnRleHQoY29udmVydGVyQ29udGV4dCkgJiZcblx0XHRcdE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKTtcblx0XHRpZiAoY29sbGFib3JhdGlvbk9uUm9vdCkge1xuXHRcdFx0aXNFbmFibGVkRXhwID0gYW5kKGlzRW5hYmxlZEV4cCwgbm90KGVxdWFsKFVJLmhhc0NvbGxhYm9yYXRpb25BdXRob3JpemF0aW9uLCBmYWxzZSkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzRW5hYmxlZEV4cDtcblx0fVxuXHRyZXR1cm4gY29uc3RhbnQodHJ1ZSk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBwYXRoRnJvbUNvbnRleHRMb2NhdGlvbiBJcyB0aGUgYmluZGluZyBwYXRoIGNhbGN1bGF0ZWQgIGZyb20gdGhlIGNvbnZlcnRlciBjb250ZXh0IGxvY2F0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHBhdGhGcm9tQ29udGV4dExvY2F0aW9uID0gZmFsc2Vcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCBhY3Rpb25UYXJnZXQsIHBhdGhGcm9tQ29udGV4dExvY2F0aW9uKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcobWFwcGluZ3M/OiBTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlW10pOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGU+W10ge1xuXHRyZXR1cm4gbWFwcGluZ3Ncblx0XHQ/IG1hcHBpbmdzLm1hcCgobWFwcGluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IG1hcHBpbmcuTG9jYWxQcm9wZXJ0eS52YWx1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0U2VtYW50aWNPYmplY3RQcm9wZXJ0eTogbWFwcGluZy5TZW1hbnRpY09iamVjdFByb3BlcnR5LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHQgIH0pXG5cdFx0OiBbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRhY3Rpb246IE1hbmlmZXN0QWN0aW9uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUgfCB1bmRlZmluZWQsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGFGaWVsZElzQ29weUFjdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzKTogYm9vbGVhbiB7XG5cdHJldHVybiBkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5Jc0NvcHlBY3Rpb24/LnZhbHVlT2YoKSA9PT0gdHJ1ZSAmJiBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcHlBY3Rpb24oY29weURhdGFGaWVsZHM6IERhdGFGaWVsZEZvckFjdGlvblR5cGVzW10pOiBEYXRhRmllbGRGb3JBY3Rpb25UeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb3B5RGF0YUZpZWxkcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gY29weURhdGFGaWVsZHNbMF07XG5cdH1cblx0aWYgKGNvcHlEYXRhRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRMb2cuZXJyb3IoXCJNdWx0aXBsZSBhY3Rpb25zIGFyZSBhbm5vdGF0ZWQgd2l0aCBpc0NvcHlBY3Rpb24uIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdGFuZGFyZCBjb3B5IGFjdGlvbi5cIik7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZXh0cmFjdCBtZW51IGl0ZW1zIGZyb20gYWN0aW9ucyBvZiB0eXBlIG1lbnVzLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgYW5ub3RhdGlvbiBiYXNlZCBhY3Rpb25zXG4gKiBAcmV0dXJucyBDb2xsZWN0aW9uIG9mIGFjdGlvbnMgd2hpY2ggYXJlIG1lbnUgaXRlbXMgaW4gb25lIG9mIHRoZSBhbm5vdGF0aW9uIGJhc2VkIG1lbnVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbm5vdGF0aW9uTWVudUFjdGlvbkl0ZW1zKGFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtZW51QWN0aW9uSXRlbXM6IEJhc2VBY3Rpb25bXSA9IFtdO1xuXG5cdGFubm90YXRpb25BY3Rpb25zLmZvckVhY2goKGFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24udHlwZSA9PT0gXCJNZW51XCIgJiYgIWFjdGlvbi5pZD8uc3RhcnRzV2l0aChcIkN1c3RvbUFjdGlvbjo6XCIpICYmIGFjdGlvbi5tZW51KSB7XG5cdFx0XHRtZW51QWN0aW9uSXRlbXMucHVzaCguLi5hY3Rpb24ubWVudSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gbWVudUFjdGlvbkl0ZW1zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBmaW5kIHRoZSBtYXRjaGluZyBtYW5pZmVzdCBhY3Rpb25zIHdoaWNoIG92ZXJyaWRlIHRoZSBhbm5vdGF0aW9uIG1lbnUgaXRlbXMuXG4gKiBAcGFyYW0gYW5ub3RhdGlvbk1lbnVJdGVtcyBDb2xsZWN0aW9uIG9mIGFubm90YXRpb24gYmFzZWQgbWVudSBpdGVtc1xuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9ucyBDb2xsZWN0aW9uIG9mIG1hbmlmZXN0IGJhc2VkIGFjdGlvbnNcbiAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgYWN0aW9ucyB3aGljaCBhcmUgbWVudSBpdGVtcyBpbiBvbmUgb2YgdGhlIGFubm90YXRpb24gYmFzZWQgbWVudXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hdGNoaW5nTWFuaWZlc3RBY3Rpb24oXG5cdGFubm90YXRpb25NZW51SXRlbXM6IEJhc2VBY3Rpb25bXSxcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+XG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgbWF0Y2hpbmdNYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IG1hbmlmZXN0QWN0aW9uIGluIG1hbmlmZXN0QWN0aW9ucykge1xuXHRcdGlmIChcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnN0YXJ0c1dpdGgoXCJEYXRhRmllbGRGb3JBY3Rpb246OlwiKSAmJlxuXHRcdFx0YW5ub3RhdGlvbk1lbnVJdGVtcy5maW5kKChtZW51QWN0aW9uSXRlbXMpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lbnVBY3Rpb25JdGVtcy5rZXkgPT09IG1hbmlmZXN0QWN0aW9uO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zW21hbmlmZXN0QWN0aW9uXSA9IG1hbmlmZXN0QWN0aW9uc1ttYW5pZmVzdEFjdGlvbl07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoaW5nTWFuaWZlc3RBY3Rpb25zO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byB0cmFuc2Zvcm0gdGhlIG1lbnVzIGJ5IHJlcGxhY2luZyB0aGUgbWVudSBpdGVtcyB3aXRoIHRoZWlyIG92ZXJyaWRpbmcgYWN0aW9ucy5cbiAqIEBwYXJhbSB1bnByZXBhcmVkQWN0aW9ucyBDb2xsZWN0aW9uIG9mIGFsbCBhY3Rpb25zIGFmdGVyIG1lcmdpbmcgbWFuaWZlc3QgYW5kIGFubm90YXRpb24gYWN0aW9uc1xuICogQHBhcmFtIG92ZXJyaWRlTWVudUFjdGlvbnMgQ29sbGVjdGlvbiBvZiBhbGwgb3ZlcnJpZGVuIG1lbnUgaXRlbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNZW51QWN0aW9ucyh1bnByZXBhcmVkQWN0aW9uczogQ3VzdG9tQWN0aW9uW10sIG92ZXJyaWRlTWVudUFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IHZvaWQge1xuXHRsZXQgZm91bmRBY3Rpb247XG5cblx0dW5wcmVwYXJlZEFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uOiBDdXN0b21BY3Rpb24pID0+IHtcblx0XHRpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkge1xuXHRcdFx0YWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtOiBCYXNlQWN0aW9uLCBtZW51SXRlbUluZGV4OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Zm91bmRBY3Rpb24gPSBvdmVycmlkZU1lbnVBY3Rpb25zLmZpbmQoKG92ZXJyaWRlTWVudUFjdGlvbjogQmFzZUFjdGlvbikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvdmVycmlkZU1lbnVBY3Rpb24ua2V5ID09PSBtZW51SXRlbS5rZXk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChmb3VuZEFjdGlvbikge1xuXHRcdFx0XHRcdGFjdGlvbi5tZW51Py5zcGxpY2UobWVudUl0ZW1JbmRleCwgMSwgZm91bmRBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIG1lbnUgY29uc2lzdHMgb2YgYWxsIEFJIG9wZXJhdGlvbiBhY3Rpb25zLlxuICogQHBhcmFtIGFubm90YXRpb25BY3Rpb25zIENvbGxlY3Rpb24gb2YgRGF0YUZpZWxkRm9yQWN0aW9ucyBvciBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25zIGluIHRoZSBtZW51XG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gdHJ1ZSBpZiBhbGwgcmVjb3JkcyBpbiB0aGUgbWVudSBhcmUgQUkgb3BlcmF0aW9ucywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc01lbnVBSU9wZXJhdGlvbihhbm5vdGF0aW9uQWN0aW9uczogRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlc1tdKTogYm9vbGVhbiB7XG5cdHJldHVybiBhbm5vdGF0aW9uQWN0aW9ucy5ldmVyeShpc0FjdGlvbkFJT3BlcmF0aW9uKTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiByZWNvcmQgaXMgYW4gQUkgb3BlcmF0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgcmVjb3JkIG9mIHR5cGUgRGF0YUZpZWxkRm9yQWN0aW9uIG9yIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHJldHVybnMgQSBib29sZWFuIHRydWUgaWYgdGhlIGdpdmVuIHJlY29yZCBpcyBhbiBBSSBvcGVyYXRpb24sIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBY3Rpb25BSU9wZXJhdGlvbihkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMpOiBib29sZWFuIHtcblx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zLlVJPy5Jc0FJT3BlcmF0aW9uPy52YWx1ZU9mKCkgPT09IHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIHZpc2liaWxpdHkgb2YgdGhlIENyZWF0ZU5leHQgYnV0dG9uLlxuICogVGhpcyBmdW5jdGlvbiBjZW50cmFsaXplcyB0aGUgdmlzaWJpbGl0eSBsb2dpYyB0byBiZSByZXVzZWQgYnkgYm90aCBnZXRGb290ZXJEZWZhdWx0QWN0aW9uc1xuICogYW5kIEZvb3RlckNvbnRlbnQudHN4LlxuICogQHBhcmFtIGhpZGRlbkRyYWZ0RW5hYmxlZCBXaGV0aGVyIGhpZGRlbiBkcmFmdCBtb2RlIGlzIGVuYWJsZWRcbiAqIEBwYXJhbSBmY2xFbmFibGVkIFdoZXRoZXIgRkNMIChGbGV4aWJsZSBDb2x1bW4gTGF5b3V0KSBpcyBlbmFibGVkXG4gKiBAcmV0dXJucyBBIGNvbXBpbGVkIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIENyZWF0ZU5leHQgYnV0dG9uIHZpc2liaWxpdHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENyZWF0ZU5leHRCdXR0b25WaXNpYmlsaXR5KGhpZGRlbkRyYWZ0RW5hYmxlZDogYm9vbGVhbiwgZmNsRW5hYmxlZDogYm9vbGVhbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBpZkVsc2UoXG5cdFx0aGlkZGVuRHJhZnRFbmFibGVkID09PSB0cnVlLFxuXHRcdGlmRWxzZShcblx0XHRcdGZjbEVuYWJsZWQgPT09IHRydWUsXG5cdFx0XHRhbmQoRHJhZnQuSXNOZXdPYmplY3QsIGVxdWFsKHBhdGhJbk1vZGVsKFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIFwiZmNsaGVscGVyXCIpLCB0cnVlKSksXG5cdFx0XHREcmFmdC5Jc05ld09iamVjdFxuXHRcdCksXG5cdFx0RHJhZnQuSXNOZXdPYmplY3Rcblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -592,9 +592,10 @@ function getManifestActionBooleanPropertyWithFormatter(
592
592
  } else if (isConstant(resolvedBinding) && typeof resolvedBinding.value === "string") {
593
593
  // Then it's a module-method reference "sap.xxx.yyy.doSomething"
594
594
  const methodPath = resolvedBinding.value;
595
+ const internalModelPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
595
596
  // FIXME: The custom "isEnabled" check does not trigger (because none of the bound values changes)
596
597
  result = formatResult(
597
- [pathInModel<View>("/", "$view"), methodPath, pathInModel<Context[]>("selectedContexts", "internal")],
598
+ [pathInModel<View>("/", "$view"), methodPath, pathInModel<Context[]>(internalModelPath, "internal")],
598
599
  fpmFormatter.customBooleanPropertyCheck,
599
600
  !forContextMenu
600
601
  ? converterContext.getDataModelObjectPath().contextLocation?.targetEntityType || converterContext.getEntityType()