@sapui5/sap.fe.core 1.108.1 → 1.108.2
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.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +21 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +19 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +14 -1
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +12 -0
- package/src/sap/fe/core/converters/annotations/DataField.js +8 -5
- package/src/sap/fe/core/converters/annotations/DataField.ts +19 -17
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +75 -35
- package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -41
- package/src/sap/fe/core/helpers/PasteHelper.js +27 -22
- package/src/sap/fe/core/helpers/PasteHelper.ts +30 -24
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_ar.properties +19 -23
- package/src/sap/fe/core/messagebundle_bg.properties +37 -41
- package/src/sap/fe/core/messagebundle_ca.properties +39 -43
- package/src/sap/fe/core/messagebundle_cs.properties +19 -23
- package/src/sap/fe/core/messagebundle_cy.properties +19 -23
- package/src/sap/fe/core/messagebundle_da.properties +19 -23
- package/src/sap/fe/core/messagebundle_de.properties +30 -34
- package/src/sap/fe/core/messagebundle_el.properties +19 -23
- package/src/sap/fe/core/messagebundle_en.properties +5 -9
- package/src/sap/fe/core/messagebundle_en_GB.properties +19 -23
- package/src/sap/fe/core/messagebundle_es.properties +27 -31
- package/src/sap/fe/core/messagebundle_es_MX.properties +18 -22
- package/src/sap/fe/core/messagebundle_et.properties +20 -24
- package/src/sap/fe/core/messagebundle_fi.properties +39 -43
- package/src/sap/fe/core/messagebundle_fr.properties +19 -23
- package/src/sap/fe/core/messagebundle_fr_CA.properties +41 -45
- package/src/sap/fe/core/messagebundle_hi.properties +20 -24
- package/src/sap/fe/core/messagebundle_hr.properties +39 -43
- package/src/sap/fe/core/messagebundle_hu.properties +19 -23
- package/src/sap/fe/core/messagebundle_id.properties +19 -23
- package/src/sap/fe/core/messagebundle_it.properties +18 -22
- package/src/sap/fe/core/messagebundle_iw.properties +19 -23
- package/src/sap/fe/core/messagebundle_ja.properties +19 -23
- package/src/sap/fe/core/messagebundle_kk.properties +20 -24
- package/src/sap/fe/core/messagebundle_ko.properties +19 -23
- package/src/sap/fe/core/messagebundle_lt.properties +19 -23
- package/src/sap/fe/core/messagebundle_lv.properties +19 -23
- package/src/sap/fe/core/messagebundle_ms.properties +19 -23
- package/src/sap/fe/core/messagebundle_nl.properties +19 -23
- package/src/sap/fe/core/messagebundle_no.properties +18 -22
- package/src/sap/fe/core/messagebundle_pl.properties +22 -26
- package/src/sap/fe/core/messagebundle_pt.properties +20 -24
- package/src/sap/fe/core/messagebundle_pt_PT.properties +19 -23
- package/src/sap/fe/core/messagebundle_ro.properties +38 -42
- package/src/sap/fe/core/messagebundle_ru.properties +39 -43
- package/src/sap/fe/core/messagebundle_sh.properties +18 -22
- package/src/sap/fe/core/messagebundle_sk.properties +18 -22
- package/src/sap/fe/core/messagebundle_sl.properties +38 -42
- package/src/sap/fe/core/messagebundle_sv.properties +18 -22
- package/src/sap/fe/core/messagebundle_th.properties +40 -44
- package/src/sap/fe/core/messagebundle_tr.properties +19 -23
- package/src/sap/fe/core/messagebundle_uk.properties +19 -23
- package/src/sap/fe/core/messagebundle_vi.properties +39 -43
- package/src/sap/fe/core/messagebundle_zh_CN.properties +38 -42
- package/src/sap/fe/core/messagebundle_zh_TW.properties +18 -22
- package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -2
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +2 -0
- package/src/sap/fe/core/templating/UIFormatters.js +5 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/helpers/ClassSupport", "sap/fe/macros/table/TableSizeHelper", "sap/ui/base/BindingParser", "sap/ui/core/routing/HashChanger", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper"], function (Log, BaseController, CommonUtils, Placeholder, ClassSupport, TableSizeHelper, BindingParser, HashChanger, JSONModel, AnnotationHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/helpers/ClassSupport", "sap/fe/macros/table/TableSizeHelper", "sap/ui/base/BindingParser", "sap/ui/core/routing/HashChanger", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/AnnotationHelper", "sap/ui/thirdparty/URI"], function (Log, BaseController, CommonUtils, Placeholder, ClassSupport, TableSizeHelper, BindingParser, HashChanger, JSONModel, AnnotationHelper, URI) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _class, _class2, _descriptor;
|
|
@@ -234,6 +234,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
234
234
|
|
|
235
235
|
_proto._computeTitleInfo = function _computeTitleInfo(title, subtitle, sIntent) {
|
|
236
236
|
var aParts = sIntent.split("/");
|
|
237
|
+
sIntent = URI.decode(sIntent);
|
|
237
238
|
|
|
238
239
|
if (aParts[aParts.length - 1].indexOf("?") === -1) {
|
|
239
240
|
sIntent += "?restoreHistory=true";
|
|
@@ -608,4 +609,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/BaseController", "sap/fe/core/Common
|
|
|
608
609
|
})), _class2)) || _class);
|
|
609
610
|
return RootViewBaseController;
|
|
610
611
|
}, false);
|
|
611
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiUm9vdFZpZXdCYXNlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsImJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkiLCJvbkluaXQiLCJUYWJsZVNpemVIZWxwZXIiLCJpbml0IiwiX2FIZWxwZXJNb2RlbHMiLCJnZXRQbGFjZWhvbGRlciIsIm9QbGFjZWhvbGRlciIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiX29uQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkV4aXQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXIiLCJ1bmRlZmluZWQiLCJleGl0IiwiZm9yRWFjaCIsIm9Nb2RlbCIsImRlc3Ryb3kiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRSb3V0ZXIiLCJfY3JlYXRlSGVscGVyTW9kZWwiLCJKU09OTW9kZWwiLCJwdXNoIiwid2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeSIsIm9FdmVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwiYUNvbnRhaW5lcnMiLCJnZXRQYXJhbWV0ZXIiLCJhRkVDb250YWluZXJzIiwib0NvbnRhaW5lciIsIm9WaWV3IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJvUmlnaHRNb3N0RkVWaWV3IiwibGVuZ3RoIiwiaXNQYWdlUmVhZHkiLCJhdHRhY2hFdmVudE9uY2UiLCJfb1JvdXRlTWF0Y2hlZFByb21pc2UiLCJvUm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiVVNoZWxsIiwiX2NvbXB1dGVUaXRsZUhpZXJhcmNoeSIsImJGb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJvblBhZ2VSZWFkeSIsImdldFBhcmVudCIsImZvcmNlRm9jdXMiLCJvbkNvbnRhaW5lclJlYWR5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpbmFsbHkiLCJfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9UaXRsZUhpZXJhcmNoeUNhY2hlIiwiX2NvbXB1dGVUaXRsZUluZm8iLCJ0aXRsZSIsInN1YnRpdGxlIiwic0ludGVudCIsImFQYXJ0cyIsInNwbGl0IiwiaW5kZXhPZiIsImludGVudCIsImljb24iLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwic1BhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVmFsdWVFeHByZXNzaW9uIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImdldE9iamVjdCIsImNvbnRleHQiLCJzVGV4dEV4cHJlc3Npb24iLCJvUHJvcGVydHlDb250ZXh0IiwiYVByb21pc2VzIiwib1ZhbHVlRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwib1Byb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwic1ZhbHVlUGF0aCIsInBhcnRzIiwicGF0aCIsImZuVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJvVmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiaW5pdGlhbGl6ZSIsIm9Qcm9taXNlRm9yVGl0bGVWYWx1ZSIsImZuQ2hhbmdlIiwic1RhcmdldFZhbHVlIiwiZ2V0U291cmNlIiwiZ2V0VmFsdWUiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJvVGV4dEV4cHJlc3Npb24iLCJzVGV4dFBhdGgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiZm5UZXh0Rm9ybWF0dGVyIiwib1RleHRCaW5kaW5nIiwib1Byb21pc2VGb3JUaXRsZVRleHQiLCJzVGFyZ2V0VGV4dCIsImFsbCIsInRpdGxlSW5mbyIsIl9nZXRBcHBTcGVjaWZpY0hhc2giLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIl9nZXRIYXNoIiwiZ2V0SGFzaCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwic0VudGl0eVBhdGgiLCJzVHlwZU5hbWUiLCJzQXBwU3BlY2lmaWNIYXNoIiwic1RpdGxlIiwib1RpdGxlSW5mbyIsIl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MiLCJhSGllcmFyY2h5IiwiYUhpZXJhcmNoeVNoZWxsIiwibGV2ZWwiLCJvSGllcmFyY2h5Iiwib1NoZWxsSGllcmFyY2h5Iiwia2V5IiwiU3RyaW5nIiwiX2dldFRhcmdldFR5cGVGcm9tSGFzaCIsInNIYXNoIiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRlIiwib1JvdXRlIiwiZ2V0Um91dGUiLCJuYW1lIiwibWF0Y2giLCJzVGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwidGFyZ2V0IiwiZ2V0VGFyZ2V0IiwiX29PcHRpb25zIiwib0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9DdXJyZW50UGFnZSIsImFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJzQXBwVGl0bGUiLCJnZXRNZXRhZGF0YSIsInNBcHBTdWJUaXRsZSIsImFwcFN1YlRpdGxlIiwib1BhZ2VUaXRsZUluZm9ybWF0aW9uIiwic05ld1BhdGgiLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJnZXRQYXRoIiwiYVBhdGhQYXJ0cyIsInNoaWZ0IiwicG9wIiwic1BhdGhQYXJ0Iiwic1BhcmFtZXRlclBhdGgiLCJiSXNQYXJhbWV0ZXJpemVkIiwicmVqZWN0IiwiYVRpdGxlSW5mb0hpZXJhcmNoeSIsImFUaXRsZUluZm9IaWVyYXJjaHlTaGVsbCIsInJldmVyc2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJzRXJyb3JNZXNzYWdlIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNQcm9wb3NlZExheW91dCIsImtlZXBDdXJyZW50TGF5b3V0Iiwib25Db250ZXh0Qm91bmRUb1ZpZXciLCJzRGVlcGVzdFBhdGgiLCJnZXRQcm9wZXJ0eSIsInNWaWV3Q29udGV4dFBhdGgiLCJkaXNwbGF5TWVzc2FnZVBhZ2UiLCJtUGFyYW1ldGVycyIsInVwZGF0ZVVJU3RhdGVGb3JWaWV3IiwiRkNMTGV2ZWwiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJ2aWV3IiwiYXBwQ29udGVudElkIiwiYnlJZCIsIkJhc2VDb250cm9sbGVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1hNTFZpZXdcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5yb290Vmlldy5Sb290Vmlld0Jhc2VDb250cm9sbGVyXCIpXG5jbGFzcyBSb290Vmlld0Jhc2VDb250cm9sbGVyIGV4dGVuZHMgQmFzZUNvbnRyb2xsZXIge1xuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdG9QbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRwcml2YXRlIF9hSGVscGVyTW9kZWxzITogYW55W107XG5cdHByaXZhdGUgb1JvdXRlcj86IFJvdXRlcjtcblx0cHJpdmF0ZSBfb1JvdXRlTWF0Y2hlZFByb21pc2U6IGFueTtcblx0cHJpdmF0ZSBvVGl0bGVIaWVyYXJjaHlDYWNoZTogYW55O1xuXHRwcml2YXRlIGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRvbkluaXQoKSB7XG5cdFx0VGFibGVTaXplSGVscGVyLmluaXQoKTtcblxuXHRcdHRoaXMuX2FIZWxwZXJNb2RlbHMgPSBbXTtcblx0fVxuXG5cdGdldFBsYWNlaG9sZGVyKCkge1xuXHRcdHJldHVybiB0aGlzLm9QbGFjZWhvbGRlcjtcblx0fVxuXHRhdHRhY2hSb3V0ZU1hdGNoZXJzKCkge1xuXHRcdHRoaXMub1BsYWNlaG9sZGVyLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQodGhpcy5fb25BZnRlclJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdH1cblx0b25FeGl0KCkge1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5kZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCh0aGlzLl9vbkFmdGVyUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIgPSB1bmRlZmluZWQ7XG5cblx0XHRUYWJsZVNpemVIZWxwZXIuZXhpdCgpO1xuXG5cdFx0Ly8gRGVzdHJveSBhbGwgSlNPTiBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSBmb3IgdGhlIHZpZXdzXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5mb3JFYWNoKGZ1bmN0aW9uIChvTW9kZWw6IGFueSkge1xuXHRcdFx0b01vZGVsLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIHRoZSByZXNvdXJjZSBidW5kbGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIHJlc291cmNlTW9kZWwgb2YgdGhlIGNvbXBvbmVudFxuXHQgKi9cblx0Z2V0UmVzb3VyY2VCdW5kbGUoKSB7XG5cdFx0cmV0dXJuICh0aGlzLmdldE93bmVyQ29tcG9uZW50KCkuZ2V0TW9kZWwoXCJpMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdH1cblx0Z2V0Um91dGVyKCkge1xuXHRcdGlmICghdGhpcy5vUm91dGVyKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlcigpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXI7XG5cdH1cblxuXHRfY3JlYXRlSGVscGVyTW9kZWwoKSB7XG5cdFx0Ly8gV2Uga2VlcCBhIHJlZmVyZW5jZSBvbiB0aGUgbW9kZWxzIGNyZWF0ZWQgZHluYW1pY2FsbHksIGFzIHRoZXkgZG9uJ3QgZ2V0IGRlc3Ryb3llZFxuXHRcdC8vIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgdmlldyBpcyBkZXN0cm95ZWQuXG5cdFx0Ly8gVGhpcyBpcyBkb25lIGR1cmluZyBvbkV4aXRcblx0XHRjb25zdCBvTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscy5wdXNoKG9Nb2RlbCk7XG5cblx0XHRyZXR1cm4gb01vZGVsO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHdhaXRpbmcgZm9yIHRoZSBSaWdodCBtb3N0IHZpZXcgdG8gYmUgcmVhZHkuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlclxuXHQgKiBAcGFyYW0gb0V2ZW50IFJlZmVyZW5jZSBhbiBFdmVudCBwYXJhbWV0ZXIgY29taW5nIGZyb20gcm91dGVNYXRjaGVkIGV2ZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHJpZ2h0IG1vc3QgdmlldyBpcyByZWFkeVxuXHQgKi9cblx0d2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeShvRXZlbnQ6IGFueSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IGFDb250YWluZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInZpZXdzXCIpLFxuXHRcdFx0XHQvLyBUaGVyZSBjYW4gYWxzbyBiZSByZXVzZSBjb21wb25lbnRzIGluIHRoZSB2aWV3LCByZW1vdmUgdGhlbSBiZWZvcmUgcHJvY2Vzc2luZy5cblx0XHRcdFx0YUZFQ29udGFpbmVyczogYW55W10gPSBbXTtcblx0XHRcdGFDb250YWluZXJzLmZvckVhY2goZnVuY3Rpb24gKG9Db250YWluZXI6IGFueSkge1xuXHRcdFx0XHRsZXQgb1ZpZXcgPSBvQ29udGFpbmVyO1xuXHRcdFx0XHRpZiAob0NvbnRhaW5lciAmJiBvQ29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbXBvbmVudEluc3RhbmNlID0gb0NvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0XHRcdG9WaWV3ID0gb0NvbXBvbmVudEluc3RhbmNlLmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5KSB7XG5cdFx0XHRcdFx0YUZFQ29udGFpbmVycy5wdXNoKG9WaWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBvUmlnaHRNb3N0RkVWaWV3ID0gYUZFQ29udGFpbmVyc1thRkVDb250YWluZXJzLmxlbmd0aCAtIDFdO1xuXHRcdFx0aWYgKG9SaWdodE1vc3RGRVZpZXcgJiYgb1JpZ2h0TW9zdEZFVmlldy5nZXRDb250cm9sbGVyKCkucGFnZVJlYWR5LmlzUGFnZVJlYWR5KCkpIHtcblx0XHRcdFx0cmVzb2x2ZShvUmlnaHRNb3N0RkVWaWV3KTtcblx0XHRcdH0gZWxzZSBpZiAob1JpZ2h0TW9zdEZFVmlldykge1xuXHRcdFx0XHRvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUuXG5cdCAqICAtIHVwZGF0ZSB0aGUgc2hlbGwgdGl0bGUuXG5cdCAqICAtIHVwZGF0ZSB0YWJsZSBzY3JvbGwuXG5cdCAqICAtIGNhbGwgb25QYWdlUmVhZHkgb24gdGhlIHJpZ2h0TW9zdFZpZXcuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXIjX29uQWZ0ZXJSb3V0ZU1hdGNoZWRcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkJhc2VDb250cm9sbGVyXG5cdCAqL1xuXHRfb25BZnRlclJvdXRlTWF0Y2hlZChvRXZlbnQ6IGFueSkge1xuXHRcdGlmICghdGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gdGhpcy53YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudClcblx0XHRcdFx0LnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHQvLyBUaGUgYXV0b0ZvY3VzIGlzIGluaXRpYWxseSBkaXNhYmxlZCBvbiB0aGUgbmF2Q29udGFpbmVyIG9yIHRoZSBGQ0wsIHNvIHRoYXQgdGhlIGZvY3VzIHN0YXlzIG9uIHRoZSBTaGVsbCBtZW51XG5cdFx0XHRcdFx0Ly8gZXZlbiBpZiB0aGUgYXBwIHRha2VzIGEgbG9uZyB0aW1lIHRvIGxhdW5jaFxuXHRcdFx0XHRcdC8vIFRoZSBmaXJzdCB0aW1lIHRoZSB2aWV3IGlzIGRpc3BsYXllZCwgd2UgbmVlZCB0byBlbmFibGUgdGhlIGF1dG9mb2N1cyBzbyB0aGF0IGl0J3MgbWFuYWdlZCBwcm9wZXJseSBkdXJpbmcgbmF2aWdhdGlvblxuXHRcdFx0XHRcdGNvbnN0IG9Sb290Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXSBhcyBhbnk7XG5cdFx0XHRcdFx0aWYgKG9Sb290Q29udHJvbCAmJiBvUm9vdENvbnRyb2wuZ2V0QXV0b0ZvY3VzICYmICFvUm9vdENvbnRyb2wuZ2V0QXV0b0ZvY3VzKCkpIHtcblx0XHRcdFx0XHRcdG9Sb290Q29udHJvbC5zZXRQcm9wZXJ0eShcImF1dG9Gb2N1c1wiLCB0cnVlLCB0cnVlKTsgLy8gRG8gbm90IG1hcmsgdGhlIGNvbnRhaW5lciBhcyBpbnZhbGlkLCBvdGhlcndpc2UgaXQncyByZS1yZW5kZXJlZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdFx0XHRcdHRoaXMuX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk7XG5cdFx0XHRcdFx0aWYgKG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5VU2hlbGwpIHtcblx0XHRcdFx0XHRcdHRoaXMuX2NvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGJGb3JjZUZvY3VzID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXJQcm94eSgpLmlzRm9jdXNGb3JjZWQoKTtcblx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuc2V0Rm9jdXNGb3JjZWQoZmFsc2UpOyAvLyByZXNldFxuXHRcdFx0XHRcdGlmIChvVmlldy5nZXRDb250cm9sbGVyKCkgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpLm9uUGFnZVJlYWR5ICYmIG9WaWV3LmdldFBhcmVudCgpLm9uUGFnZVJlYWR5KSB7XG5cdFx0XHRcdFx0XHRvVmlldy5nZXRQYXJlbnQoKS5vblBhZ2VSZWFkeSh7IGZvcmNlRm9jdXM6IGJGb3JjZUZvY3VzIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5vbkNvbnRhaW5lclJlYWR5KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9uQ29udGFpbmVyUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcHV0aW5nIHRoZSB0aXRsZSBoaWVyYXJjaHkgYW5kIGNhbGxpbmcgZm9jdXMgbWV0aG9kXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSA9IG51bGw7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIFRpdGxlSGllcmFyY2h5IGNhY2hlICggb3IgaW5pdGlhbGl6ZXMgaXQgaWYgdW5kZWZpbmVkKS5cblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXIjX2dldFRpdGxlSGllcmFyY2h5Q2FjaGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkJhc2VDb250cm9sbGVyXG5cdCAqIEByZXR1cm5zICBUaGUgVGl0bGVIaWVyYXJjaHkgY2FjaGVcblx0ICovXG5cdF9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCkge1xuXHRcdGlmICghdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSkge1xuXHRcdFx0dGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZSA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5vVGl0bGVIaWVyYXJjaHlDYWNoZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB0aXRsZUluZm8gb2JqZWN0LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHRpdGxlXG5cdCAqIEBwYXJhbSBzdWJ0aXRsZVxuXHQgKiBAcGFyYW0gc0ludGVudCBUaGUgaW50ZW50IHBhdGggdG8gYmUgcmVkaXJlY3RlZCB0b1xuXHQgKiBAcmV0dXJucyBUaGUgdGl0bGUgaW5mb3JtYXRpb25cblx0ICovXG5cdF9jb21wdXRlVGl0bGVJbmZvKHRpdGxlOiBhbnksIHN1YnRpdGxlOiBhbnksIHNJbnRlbnQ6IGFueSkge1xuXHRcdGNvbnN0IGFQYXJ0cyA9IHNJbnRlbnQuc3BsaXQoXCIvXCIpO1xuXHRcdGlmIChhUGFydHNbYVBhcnRzLmxlbmd0aCAtIDFdLmluZGV4T2YoXCI/XCIpID09PSAtMSkge1xuXHRcdFx0c0ludGVudCArPSBcIj9yZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNJbnRlbnQgKz0gXCImcmVzdG9yZUhpc3Rvcnk9dHJ1ZVwiO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IHRpdGxlLFxuXHRcdFx0c3VidGl0bGU6IHN1YnRpdGxlLFxuXHRcdFx0aW50ZW50OiBzSW50ZW50LFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblx0X2Zvcm1hdFRpdGxlKGRpc3BsYXlNb2RlOiBzdHJpbmcsIHRpdGxlVmFsdWU6IHN0cmluZywgdGl0bGVEZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlVmFsdWV9ICgke3RpdGxlRGVzY3JpcHRpb259KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSBgJHt0aXRsZURlc2NyaXB0aW9ufSAoJHt0aXRsZVZhbHVlfSlgO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259YDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0aGUgdmFsdWUgb2YgdGhlIEhlYWRlckluZm8gdGl0bGUgZm9yIGEgZ2l2ZW4gcGF0aC5cblx0ICpcblx0ICogQHBhcmFtIHNQYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIGZvcm1hdHRlZCB0aXRsZSwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIG5vIEhlYWRlckluZm8gdGl0bGUgYW5ub3RhdGlvbiBpcyBhdmFpbGFibGVcblx0ICovXG5cdGFzeW5jIF9mZXRjaFRpdGxlVmFsdWUoc1BhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0b01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCksXG5cdFx0XHRvQmluZGluZ1ZpZXdDb250ZXh0ID0gb01vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNQYXRoKSxcblx0XHRcdHNWYWx1ZUV4cHJlc3Npb24gPSBBbm5vdGF0aW9uSGVscGVyLmZvcm1hdChcblx0XHRcdFx0b01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01ldGFQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UaXRsZS9WYWx1ZWApLFxuXHRcdFx0XHR7IGNvbnRleHQ6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQgfVxuXHRcdFx0KTtcblx0XHRpZiAoIXNWYWx1ZUV4cHJlc3Npb24pIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdFx0fVxuXHRcdGNvbnN0IHNUZXh0RXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0YFxuXHRcdFx0XHQpLFxuXHRcdFx0XHR7IGNvbnRleHQ6IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQgfVxuXHRcdFx0KSxcblx0XHRcdG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlLyRQYXRoQGApLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXSxcblx0XHRcdG9WYWx1ZUV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc1ZhbHVlRXhwcmVzc2lvbiksXG5cdFx0XHRvUHJvbWlzZUZvckRpc3BsYXlNb2RlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUNvbnRleHQpO1xuXHRcdFx0XHRyZXNvbHZlKGRpc3BsYXlNb2RlKTtcblx0XHRcdH0pO1xuXHRcdGFQcm9taXNlcy5wdXNoKG9Qcm9taXNlRm9yRGlzcGxheU1vZGUpO1xuXHRcdGNvbnN0IHNWYWx1ZVBhdGggPSBvVmFsdWVFeHByZXNzaW9uLnBhcnRzID8gb1ZhbHVlRXhwcmVzc2lvbi5wYXJ0c1swXS5wYXRoIDogb1ZhbHVlRXhwcmVzc2lvbi5wYXRoLFxuXHRcdFx0Zm5WYWx1ZUZvcm1hdHRlciA9IG9WYWx1ZUV4cHJlc3Npb24uZm9ybWF0dGVyLFxuXHRcdFx0b1ZhbHVlQmluZGluZyA9IG9Nb2RlbC5iaW5kUHJvcGVydHkoc1ZhbHVlUGF0aCwgb0JpbmRpbmdWaWV3Q29udGV4dCk7XG5cdFx0b1ZhbHVlQmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0Y29uc3Qgb1Byb21pc2VGb3JUaXRsZVZhbHVlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBzVGFyZ2V0VmFsdWUgPSBmblZhbHVlRm9ybWF0dGVyID8gZm5WYWx1ZUZvcm1hdHRlcihvRXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSkgOiBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKTtcblxuXHRcdFx0XHRvVmFsdWVCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdHJlc29sdmUoc1RhcmdldFZhbHVlKTtcblx0XHRcdH07XG5cdFx0XHRvVmFsdWVCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0fSk7XG5cdFx0YVByb21pc2VzLnB1c2gob1Byb21pc2VGb3JUaXRsZVZhbHVlKTtcblxuXHRcdGlmIChzVGV4dEV4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9UZXh0RXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzVGV4dEV4cHJlc3Npb24pO1xuXHRcdFx0bGV0IHNUZXh0UGF0aCA9IG9UZXh0RXhwcmVzc2lvbi5wYXJ0cyA/IG9UZXh0RXhwcmVzc2lvbi5wYXJ0c1swXS5wYXRoIDogb1RleHRFeHByZXNzaW9uLnBhdGg7XG5cdFx0XHRzVGV4dFBhdGggPSBzVmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IC0xID8gYCR7c1ZhbHVlUGF0aC5zbGljZSgwLCBzVmFsdWVQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSl9LyR7c1RleHRQYXRofWAgOiBzVGV4dFBhdGg7XG5cblx0XHRcdGNvbnN0IGZuVGV4dEZvcm1hdHRlciA9IG9UZXh0RXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRcdG9UZXh0QmluZGluZyA9IG9Nb2RlbC5iaW5kUHJvcGVydHkoc1RleHRQYXRoLCBvQmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRcdG9UZXh0QmluZGluZy5pbml0aWFsaXplKCk7XG5cdFx0XHRjb25zdCBvUHJvbWlzZUZvclRpdGxlVGV4dCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAoZGVzY3JpcHRpb246IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IHNUYXJnZXRUZXh0ID0gZm5UZXh0Rm9ybWF0dGVyID8gZm5UZXh0Rm9ybWF0dGVyKG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdFx0b1RleHRCaW5kaW5nLmRldGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHRcdFx0cmVzb2x2ZShzVGFyZ2V0VGV4dCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0b1RleHRCaW5kaW5nLmF0dGFjaENoYW5nZShmbkNoYW5nZSk7XG5cdFx0XHR9KTtcblx0XHRcdGFQcm9taXNlcy5wdXNoKG9Qcm9taXNlRm9yVGl0bGVUZXh0KTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHRpdGxlSW5mbzogYW55W10gPSBhd2FpdCBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHRcdFx0bGV0IGZvcm1hdHRlZFRpdGxlID0gXCJcIjtcblx0XHRcdGlmICh0eXBlb2YgdGl0bGVJbmZvICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gdGhpcy5fZm9ybWF0VGl0bGUodGl0bGVJbmZvWzBdLCB0aXRsZUluZm9bMV0sIHRpdGxlSW5mb1syXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZm9ybWF0dGVkVGl0bGU7XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgdGhlIHRpdGxlIGZyb20gdGhlIGhlYWRlciBpbmZvIDpcIiArIGVycm9yKTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHRfZ2V0QXBwU3BlY2lmaWNIYXNoKCkge1xuXHRcdC8vIEhhc2hDaGFuZ2VkIGlzU2hlbGxOYXZpZ2F0aW9uSGFzaENoYW5nZXJcblx0XHRyZXR1cm4gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoXG5cdFx0XHQ/IChIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpIGFzIGFueSkuaHJlZkZvckFwcFNwZWNpZmljSGFzaChcIlwiKVxuXHRcdFx0OiBcIlwiO1xuXHR9XG5cblx0X2dldEhhc2goKSB7XG5cdFx0cmV0dXJuIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aXRsZUluZm9ybWF0aW9uIGZyb20gYSBwYXRoLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBjYWNoZSB0byBzdG9yZSBUaXRsZSBJbmZvcm1hdGlvbiBpZiBuZWNlc3Nhcnlcblx0ICpcblx0ICogQG5hbWUgc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXIjZ2V0VGl0bGVJbmZvRnJvbVBhdGhcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkJhc2VDb250cm9sbGVyXG5cdCAqIEBwYXJhbSB7Kn0gc1BhdGggcGF0aCBvZiB0aGUgY29udGV4dCB0byByZXRyaWV2ZSB0aXRsZSBpbmZvcm1hdGlvbiBmcm9tIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gIG9UaXRsZWluZm9ybWF0aW9uIHJldHVybmVkIGFzIHByb21pc2Vcblx0ICovXG5cblx0Z2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGg6IGFueSkge1xuXHRcdGNvbnN0IG9UaXRsZUhpZXJhcmNoeUNhY2hlID0gdGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpO1xuXG5cdFx0aWYgKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSkge1xuXHRcdFx0Ly8gVGhlIHRpdGxlIGluZm8gaXMgYWxyZWFkeSBzdG9yZWQgaW4gdGhlIGNhY2hlXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9UaXRsZUhpZXJhcmNoeUNhY2hlW3NQYXRoXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc0VudGl0eVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRjb25zdCBzVHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVHlwZU5hbWVgKTtcblx0XHRjb25zdCBzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5fZ2V0QXBwU3BlY2lmaWNIYXNoKCk7XG5cdFx0Y29uc3Qgc0ludGVudCA9IHNBcHBTcGVjaWZpY0hhc2ggKyBzUGF0aC5zbGljZSgxKTtcblx0XHRyZXR1cm4gdGhpcy5fZmV0Y2hUaXRsZVZhbHVlKHNQYXRoKS50aGVuKChzVGl0bGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb1RpdGxlSW5mbyA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oc1R5cGVOYW1lLCBzVGl0bGUsIHNJbnRlbnQpO1xuXHRcdFx0b1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdID0gb1RpdGxlSW5mbztcblx0XHRcdHJldHVybiBvVGl0bGVJbmZvO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBFbnN1cmUgdGhhdCB0aGUgdXNoZWxsIHNlcnZpY2UgcmVjZWl2ZXMgYWxsIGVsZW1lbnRzXG5cdCAqICh0aXRsZSwgc3VidGl0bGUsIGludGVudCwgaWNvbikgYXMgc3RyaW5ncy5cblx0ICpcblx0ICogQW5ub3RhdGlvbiBIZWFkZXJJbmZvIGFsbG93cyBmb3IgYmluZGluZyBvZiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cblx0ICogKHdoaWNoIGFyZSB1c2VkIGhlcmUgYXMgdGl0bGUgYW5kIHN1YnRpdGxlKSB0byBhbnkgZWxlbWVudCBpbiB0aGUgZW50aXR5XG5cdCAqIChiZWluZyBwb3NzaWJseSB0eXBlcyBsaWtlIGJvb2xlYW4sIHRpbWVzdGFtcCwgZG91YmxlLCBldGMuKVxuXHQgKlxuXHQgKiBDcmVhdGVzIGEgbmV3IGhpZXJhcmNoeSBhbmQgY29udmVydHMgbm9uLXN0cmluZyB0eXBlcyB0byBzdHJpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBhSGllcmFyY2h5IFNoZWxsIHRpdGxlIGhpZXJhcmNoeVxuXHQgKiBAcmV0dXJucyBDb3B5IG9mIHNoZWxsIHRpdGxlIGhpZXJhcmNoeSBjb250YWluaW5nIGFsbCBlbGVtZW50cyBhcyBzdHJpbmdzXG5cdCAqL1xuXHRfZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKGFIaWVyYXJjaHk6IGFueSkge1xuXHRcdGNvbnN0IGFIaWVyYXJjaHlTaGVsbCA9IFtdO1xuXHRcdGZvciAoY29uc3QgbGV2ZWwgaW4gYUhpZXJhcmNoeSkge1xuXHRcdFx0Y29uc3Qgb0hpZXJhcmNoeSA9IGFIaWVyYXJjaHlbbGV2ZWxdO1xuXHRcdFx0Y29uc3Qgb1NoZWxsSGllcmFyY2h5OiBhbnkgPSB7fTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIG9IaWVyYXJjaHkpIHtcblx0XHRcdFx0b1NoZWxsSGllcmFyY2h5W2tleV0gPSB0eXBlb2Ygb0hpZXJhcmNoeVtrZXldICE9PSBcInN0cmluZ1wiID8gU3RyaW5nKG9IaWVyYXJjaHlba2V5XSkgOiBvSGllcmFyY2h5W2tleV07XG5cdFx0XHR9XG5cdFx0XHRhSGllcmFyY2h5U2hlbGwucHVzaChvU2hlbGxIaWVyYXJjaHkpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUhpZXJhcmNoeVNoZWxsO1xuXHR9XG5cblx0X2dldFRhcmdldFR5cGVGcm9tSGFzaChzSGFzaDogYW55KSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0bGV0IHNUYXJnZXRUeXBlID0gXCJcIjtcblxuXHRcdGNvbnN0IGFSb3V0ZXMgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNS9yb3V0aW5nL3JvdXRlc1wiKTtcblx0XHRmb3IgKGNvbnN0IHJvdXRlIG9mIGFSb3V0ZXMpIHtcblx0XHRcdGNvbnN0IG9Sb3V0ZSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0Um91dGUocm91dGUubmFtZSk7XG5cdFx0XHRpZiAob1JvdXRlLm1hdGNoKHNIYXNoKSkge1xuXHRcdFx0XHRjb25zdCBzVGFyZ2V0ID0gQXJyYXkuaXNBcnJheShyb3V0ZS50YXJnZXQpID8gcm91dGUudGFyZ2V0WzBdIDogcm91dGUudGFyZ2V0O1xuXHRcdFx0XHRzVGFyZ2V0VHlwZSA9IChvQXBwQ29tcG9uZW50LmdldFJvdXRlcigpLmdldFRhcmdldChzVGFyZ2V0KSBhcyBhbnkpLl9vT3B0aW9ucy5uYW1lO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc1RhcmdldFR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB1cGRhdGluZyB0aGUgc2hlbGwgdGl0bGUgYWZ0ZXIgZWFjaCBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXJcblx0ICogQHBhcmFtIG9WaWV3IFRoZSBjdXJyZW50IHZpZXdcblx0ICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbWVudSBpcyBmaWxsZWQgcHJvcGVybHlcblx0ICovXG5cdF9jb21wdXRlVGl0bGVIaWVyYXJjaHkob1ZpZXc6IGFueSkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0b0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0N1cnJlbnRQYWdlID0gb1ZpZXcuZ2V0UGFyZW50KCksXG5cdFx0XHRhVGl0bGVJbmZvcm1hdGlvblByb21pc2VzID0gW10sXG5cdFx0XHRzQXBwU3BlY2lmaWNIYXNoID0gdGhpcy5fZ2V0QXBwU3BlY2lmaWNIYXNoKCksXG5cdFx0XHRzQXBwVGl0bGUgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIikudGl0bGUgfHwgXCJcIixcblx0XHRcdHNBcHBTdWJUaXRsZSA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5hcHBTdWJUaXRsZSB8fCBcIlwiO1xuXHRcdGxldCBvUGFnZVRpdGxlSW5mb3JtYXRpb246IGFueSwgc05ld1BhdGg7XG5cblx0XHRpZiAob0N1cnJlbnRQYWdlICYmIG9DdXJyZW50UGFnZS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24pIHtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgYXBwbGljYXRpb24gaXMgYSBMUiwgdXNlIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgZnJvbSB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0aWYgKHRoaXMuX2dldFRhcmdldFR5cGVGcm9tSGFzaChcIlwiKSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChQcm9taXNlLnJlc29sdmUodGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhzQXBwVGl0bGUsIHNBcHBTdWJUaXRsZSwgc0FwcFNwZWNpZmljSGFzaCkpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoZW4gbWFuYWdlIG90aGVyIHBhZ2VzXG5cdFx0XHRcdHNOZXdQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBhUGF0aFBhcnRzID0gc05ld1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXG5cdFx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTsgLy8gUmVtb3ZlIHRoZSBmaXJzdCBzZWdtZW50IChlbXB0eSBzdHJpbmcpIGFzIGl0IGhhcyBiZWVuIG1hbmFnZWQgYWJvdmVcblx0XHRcdFx0YVBhdGhQYXJ0cy5wb3AoKTsgLy8gUmVtb3ZlIHRoZSBsYXN0IHNlZ21lbnQgYXMgaXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcGFnZSBhbmQgc2hvdWxkbid0IGFwcGVhciBpbiB0aGUgbWVudVxuXG5cdFx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaCgoc1BhdGhQYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRzUGF0aCArPSBgLyR7c1BhdGhQYXJ0fWA7XG5cdFx0XHRcdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRzUGFyYW1ldGVyUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpLFxuXHRcdFx0XHRcdFx0YklzUGFyYW1ldGVyaXplZCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRcdFx0XHRpZiAoIWJJc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdFx0XHRcdGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaCh0aGlzLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ3VycmVudCBwYWdlXG5cdFx0XHRvUGFnZVRpdGxlSW5mb3JtYXRpb24gPSBvQ3VycmVudFBhZ2UuX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCk7XG5cdFx0XHRvUGFnZVRpdGxlSW5mb3JtYXRpb24gPSB0aGlzLl9jb21wdXRlVGl0bGVJbmZvKFxuXHRcdFx0XHRvUGFnZVRpdGxlSW5mb3JtYXRpb24udGl0bGUsXG5cdFx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbi5zdWJ0aXRsZSxcblx0XHRcdFx0c0FwcFNwZWNpZmljSGFzaCArIHRoaXMuX2dldEhhc2goKVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtzTmV3UGF0aF0gPSBvUGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKClbc0FwcFNwZWNpZmljSGFzaF0gPSBvUGFnZVRpdGxlSW5mb3JtYXRpb247XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMucHVzaChQcm9taXNlLnJlamVjdChcIlRpdGxlIGluZm9ybWF0aW9uIG1pc3NpbmcgaW4gSGVhZGVySW5mb1wiKSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhVGl0bGVJbmZvcm1hdGlvblByb21pc2VzKVxuXHRcdFx0LnRoZW4oKGFUaXRsZUluZm9IaWVyYXJjaHk6IGFueVtdKSA9PiB7XG5cdFx0XHRcdC8vIHdvcmthcm91bmQgZm9yIHNoZWxsIHdoaWNoIGlzIGV4cGVjdGluZyBhbGwgZWxlbWVudHMgYmVpbmcgb2YgdHlwZSBzdHJpbmdcblx0XHRcdFx0Y29uc3QgYVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsID0gdGhpcy5fZW5zdXJlSGllcmFyY2h5RWxlbWVudHNBcmVTdHJpbmdzKGFUaXRsZUluZm9IaWVyYXJjaHkpLFxuXHRcdFx0XHRcdHNUaXRsZSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZTtcblx0XHRcdFx0YVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsLnJldmVyc2UoKTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0SGllcmFyY2h5KGFUaXRsZUluZm9IaWVyYXJjaHlTaGVsbCk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3JNZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKHNFcnJvck1lc3NhZ2UpO1xuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5iSXNDb21wdXRpbmdUaXRsZUhpZXJhY2h5ID0gZmFsc2U7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3JNZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKHNFcnJvck1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZWVwQ3VycmVudExheW91dCA9IGZhbHNlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGJhY2sgYWZ0ZXIgYSB2aWV3IGhhcyBiZWVuIGJvdW5kIHRvIGEgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgaGFzIGJlZW4gYm91bmQgdG8gYSB2aWV3XG5cdCAqL1xuXHRvbkNvbnRleHRCb3VuZFRvVmlldyhvQ29udGV4dDogYW55KSB7XG5cdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRjb25zdCBzRGVlcGVzdFBhdGggPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpLmdldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIpLFxuXHRcdFx0XHRzVmlld0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAoIXNEZWVwZXN0UGF0aCB8fCBzRGVlcGVzdFBhdGguaW5kZXhPZihzVmlld0NvbnRleHRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHQvLyBUaGVyZSB3YXMgbm8gcHJldmlvdXMgdmFsdWUgZm9yIHRoZSBkZWVwZXN0IHJlYWNoZWQgcGF0aCwgb3IgdGhlIHBhdGhcblx0XHRcdFx0Ly8gZm9yIHRoZSB2aWV3IGlzbid0IGEgc3VicGF0aCBvZiB0aGUgcHJldmlvdXMgZGVlcGVzdCBwYXRoIC0tPiB1cGRhdGVcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKS5zZXRQcm9wZXJ0eShcIi9kZWVwZXN0UGF0aFwiLCBzVmlld0NvbnRleHRQYXRoLCB1bmRlZmluZWQsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0ZGlzcGxheU1lc3NhZ2VQYWdlKHNFcnJvck1lc3NhZ2U6IGFueSwgbVBhcmFtZXRlcnM6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRkZW5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHR1cGRhdGVVSVN0YXRlRm9yVmlldyhvVmlldzogYW55LCBGQ0xMZXZlbDogYW55KSB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGdldEluc3RhbmNlZFZpZXdzKCk6IFhNTFZpZXdbXSB7XG5cdFx0cmV0dXJuIFtdO1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdF9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcygpOiB2b2lkIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdGdldEFwcENvbnRlbnRDb250YWluZXIodmlldzogVmlldyk6IE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0IHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBhcHBDb250ZW50SWQgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCIvc2FwLnVpNS9yb3V0aW5nL2NvbmZpZy9jb250cm9sSWRcIikgfHwgXCJhcHBDb250ZW50XCI7XG5cdFx0cmV0dXJuIHZpZXcuYnlJZChhcHBDb250ZW50SWQpIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG59XG5pbnRlcmZhY2UgUm9vdFZpZXdCYXNlQ29udHJvbGxlciB7XG5cdG9uQ29udGFpbmVyUmVhZHk/KCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENBRkQsQ0FFRSxPQUFNRyxDQUFOLEVBQVM7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUQsQ0FBZDtJQUNBOztJQUNELElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFyQixFQUEyQjtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQVAsQ0FBWSxLQUFLLENBQWpCLEVBQW9CSCxPQUFwQixDQUFQO0lBQ0E7O0lBQ0QsT0FBT0MsTUFBUDtFQUNBOzs7Ozs7Ozs7Ozs7OztNQXppQktHLHNCLFdBRExDLGNBQWMsQ0FBQyw2Q0FBRCxDLFVBRWJDLGNBQWMsQ0FBQ0MsV0FBRCxDOzs7Ozs7Ozs7Ozs7OztZQU1QQyx5QixHQUE0QixLOzs7Ozs7V0FF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
|
|
612
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiUm9vdFZpZXdCYXNlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsImJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkiLCJvbkluaXQiLCJUYWJsZVNpemVIZWxwZXIiLCJpbml0IiwiX2FIZWxwZXJNb2RlbHMiLCJnZXRQbGFjZWhvbGRlciIsIm9QbGFjZWhvbGRlciIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiX29uQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJvbkV4aXQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsIm9Sb3V0ZXIiLCJ1bmRlZmluZWQiLCJleGl0IiwiZm9yRWFjaCIsIm9Nb2RlbCIsImRlc3Ryb3kiLCJnZXRSZXNvdXJjZUJ1bmRsZSIsImdldE93bmVyQ29tcG9uZW50IiwiZ2V0TW9kZWwiLCJnZXRSb3V0ZXIiLCJfY3JlYXRlSGVscGVyTW9kZWwiLCJKU09OTW9kZWwiLCJwdXNoIiwid2FpdEZvclJpZ2h0TW9zdFZpZXdSZWFkeSIsIm9FdmVudCIsIlByb21pc2UiLCJyZXNvbHZlIiwiYUNvbnRhaW5lcnMiLCJnZXRQYXJhbWV0ZXIiLCJhRkVDb250YWluZXJzIiwib0NvbnRhaW5lciIsIm9WaWV3IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJvQ29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJwYWdlUmVhZHkiLCJvUmlnaHRNb3N0RkVWaWV3IiwibGVuZ3RoIiwiaXNQYWdlUmVhZHkiLCJhdHRhY2hFdmVudE9uY2UiLCJfb1JvdXRlTWF0Y2hlZFByb21pc2UiLCJvUm9vdENvbnRyb2wiLCJnZXRWaWV3IiwiZ2V0Q29udGVudCIsImdldEF1dG9Gb2N1cyIsInNldFByb3BlcnR5Iiwib0FwcENvbXBvbmVudCIsIl9zY3JvbGxUYWJsZXNUb0xhc3ROYXZpZ2F0ZWRJdGVtcyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiVVNoZWxsIiwiX2NvbXB1dGVUaXRsZUhpZXJhcmNoeSIsImJGb3JjZUZvY3VzIiwiZ2V0Um91dGVyUHJveHkiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJvblBhZ2VSZWFkeSIsImdldFBhcmVudCIsImZvcmNlRm9jdXMiLCJvbkNvbnRhaW5lclJlYWR5IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpbmFsbHkiLCJfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSIsIm9UaXRsZUhpZXJhcmNoeUNhY2hlIiwiX2NvbXB1dGVUaXRsZUluZm8iLCJ0aXRsZSIsInN1YnRpdGxlIiwic0ludGVudCIsImFQYXJ0cyIsInNwbGl0IiwiVVJJIiwiZGVjb2RlIiwiaW5kZXhPZiIsImludGVudCIsImljb24iLCJfZm9ybWF0VGl0bGUiLCJkaXNwbGF5TW9kZSIsInRpdGxlVmFsdWUiLCJ0aXRsZURlc2NyaXB0aW9uIiwiZm9ybWF0dGVkVGl0bGUiLCJfZmV0Y2hUaXRsZVZhbHVlIiwic1BhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJvQmluZGluZ1ZpZXdDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJzVmFsdWVFeHByZXNzaW9uIiwiQW5ub3RhdGlvbkhlbHBlciIsImZvcm1hdCIsImdldE9iamVjdCIsImNvbnRleHQiLCJzVGV4dEV4cHJlc3Npb24iLCJvUHJvcGVydHlDb250ZXh0IiwiYVByb21pc2VzIiwib1ZhbHVlRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwib1Byb21pc2VGb3JEaXNwbGF5TW9kZSIsIkNvbW1vblV0aWxzIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwic1ZhbHVlUGF0aCIsInBhcnRzIiwicGF0aCIsImZuVmFsdWVGb3JtYXR0ZXIiLCJmb3JtYXR0ZXIiLCJvVmFsdWVCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwiaW5pdGlhbGl6ZSIsIm9Qcm9taXNlRm9yVGl0bGVWYWx1ZSIsImZuQ2hhbmdlIiwic1RhcmdldFZhbHVlIiwiZ2V0U291cmNlIiwiZ2V0VmFsdWUiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJvVGV4dEV4cHJlc3Npb24iLCJzVGV4dFBhdGgiLCJsYXN0SW5kZXhPZiIsInNsaWNlIiwiZm5UZXh0Rm9ybWF0dGVyIiwib1RleHRCaW5kaW5nIiwib1Byb21pc2VGb3JUaXRsZVRleHQiLCJzVGFyZ2V0VGV4dCIsImFsbCIsInRpdGxlSW5mbyIsIl9nZXRBcHBTcGVjaWZpY0hhc2giLCJIYXNoQ2hhbmdlciIsImdldEluc3RhbmNlIiwiaHJlZkZvckFwcFNwZWNpZmljSGFzaCIsIl9nZXRIYXNoIiwiZ2V0SGFzaCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwic0VudGl0eVBhdGgiLCJzVHlwZU5hbWUiLCJzQXBwU3BlY2lmaWNIYXNoIiwic1RpdGxlIiwib1RpdGxlSW5mbyIsIl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MiLCJhSGllcmFyY2h5IiwiYUhpZXJhcmNoeVNoZWxsIiwibGV2ZWwiLCJvSGllcmFyY2h5Iiwib1NoZWxsSGllcmFyY2h5Iiwia2V5IiwiU3RyaW5nIiwiX2dldFRhcmdldFR5cGVGcm9tSGFzaCIsInNIYXNoIiwic1RhcmdldFR5cGUiLCJhUm91dGVzIiwiZ2V0TWFuaWZlc3RFbnRyeSIsInJvdXRlIiwib1JvdXRlIiwiZ2V0Um91dGUiLCJuYW1lIiwibWF0Y2giLCJzVGFyZ2V0IiwiQXJyYXkiLCJpc0FycmF5IiwidGFyZ2V0IiwiZ2V0VGFyZ2V0IiwiX29PcHRpb25zIiwib0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9DdXJyZW50UGFnZSIsImFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMiLCJzQXBwVGl0bGUiLCJnZXRNZXRhZGF0YSIsInNBcHBTdWJUaXRsZSIsImFwcFN1YlRpdGxlIiwib1BhZ2VUaXRsZUluZm9ybWF0aW9uIiwic05ld1BhdGgiLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJnZXRQYXRoIiwiYVBhdGhQYXJ0cyIsInNoaWZ0IiwicG9wIiwic1BhdGhQYXJ0Iiwic1BhcmFtZXRlclBhdGgiLCJiSXNQYXJhbWV0ZXJpemVkIiwicmVqZWN0IiwiYVRpdGxlSW5mb0hpZXJhcmNoeSIsImFUaXRsZUluZm9IaWVyYXJjaHlTaGVsbCIsInJldmVyc2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0SGllcmFyY2h5Iiwic2V0VGl0bGUiLCJzRXJyb3JNZXNzYWdlIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNQcm9wb3NlZExheW91dCIsImtlZXBDdXJyZW50TGF5b3V0Iiwib25Db250ZXh0Qm91bmRUb1ZpZXciLCJzRGVlcGVzdFBhdGgiLCJnZXRQcm9wZXJ0eSIsInNWaWV3Q29udGV4dFBhdGgiLCJkaXNwbGF5TWVzc2FnZVBhZ2UiLCJtUGFyYW1ldGVycyIsInVwZGF0ZVVJU3RhdGVGb3JWaWV3IiwiRkNMTGV2ZWwiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImdldEFwcENvbnRlbnRDb250YWluZXIiLCJ2aWV3IiwiYXBwQ29udGVudElkIiwiYnlJZCIsIkJhc2VDb250cm9sbGVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb290Vmlld0Jhc2VDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBUYWJsZVNpemVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVTaXplSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1hNTFZpZXdcIjtcbmltcG9ydCBIYXNoQ2hhbmdlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9IYXNoQ2hhbmdlclwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvcmVzb3VyY2UvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IFVSSSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvVVJJXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LlJvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIilcbmNsYXNzIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0b1BsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cdHByaXZhdGUgX2FIZWxwZXJNb2RlbHMhOiBhbnlbXTtcblx0cHJpdmF0ZSBvUm91dGVyPzogUm91dGVyO1xuXHRwcml2YXRlIF9vUm91dGVNYXRjaGVkUHJvbWlzZTogYW55O1xuXHRwcml2YXRlIG9UaXRsZUhpZXJhcmNoeUNhY2hlOiBhbnk7XG5cdHByaXZhdGUgYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSA9IGZhbHNlO1xuXG5cdG9uSW5pdCgpIHtcblx0XHRUYWJsZVNpemVIZWxwZXIuaW5pdCgpO1xuXG5cdFx0dGhpcy5fYUhlbHBlck1vZGVscyA9IFtdO1xuXHR9XG5cblx0Z2V0UGxhY2Vob2xkZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMub1BsYWNlaG9sZGVyO1xuXHR9XG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKSB7XG5cdFx0dGhpcy5vUGxhY2Vob2xkZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5hdHRhY2hBZnRlclJvdXRlTWF0Y2hlZCh0aGlzLl9vbkFmdGVyUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0fVxuXHRvbkV4aXQoKSB7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaEFmdGVyUm91dGVNYXRjaGVkKHRoaXMuX29uQWZ0ZXJSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlciA9IHVuZGVmaW5lZDtcblxuXHRcdFRhYmxlU2l6ZUhlbHBlci5leGl0KCk7XG5cblx0XHQvLyBEZXN0cm95IGFsbCBKU09OIG1vZGVscyBjcmVhdGVkIGR5bmFtaWNhbGx5IGZvciB0aGUgdmlld3Ncblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLmZvckVhY2goZnVuY3Rpb24gKG9Nb2RlbDogYW55KSB7XG5cdFx0XHRvTW9kZWwuZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBDb252ZW5pZW5jZSBtZXRob2QgZm9yIGdldHRpbmcgdGhlIHJlc291cmNlIGJ1bmRsZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcmVzb3VyY2VNb2RlbCBvZiB0aGUgY29tcG9uZW50XG5cdCAqL1xuXHRnZXRSZXNvdXJjZUJ1bmRsZSgpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcImkxOG5cIikgYXMgUmVzb3VyY2VNb2RlbCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTtcblx0fVxuXHRnZXRSb3V0ZXIoKSB7XG5cdFx0aWYgKCF0aGlzLm9Sb3V0ZXIpIHtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlcjtcblx0fVxuXG5cdF9jcmVhdGVIZWxwZXJNb2RlbCgpIHtcblx0XHQvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIG9uIHRoZSBtb2RlbHMgY3JlYXRlZCBkeW5hbWljYWxseSwgYXMgdGhleSBkb24ndCBnZXQgZGVzdHJveWVkXG5cdFx0Ly8gYXV0b21hdGljYWxseSB3aGVuIHRoZSB2aWV3IGlzIGRlc3Ryb3llZC5cblx0XHQvLyBUaGlzIGlzIGRvbmUgZHVyaW5nIG9uRXhpdFxuXHRcdGNvbnN0IG9Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHR0aGlzLl9hSGVscGVyTW9kZWxzLnB1c2gob01vZGVsKTtcblxuXHRcdHJldHVybiBvTW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gd2FpdGluZyBmb3IgdGhlIFJpZ2h0IG1vc3QgdmlldyB0byBiZSByZWFkeS5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkJhc2VDb250cm9sbGVyXG5cdCAqIEBwYXJhbSBvRXZlbnQgUmVmZXJlbmNlIGFuIEV2ZW50IHBhcmFtZXRlciBjb21pbmcgZnJvbSByb3V0ZU1hdGNoZWQgZXZlbnRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIGluZGljYXRpbmcgd2hlbiB0aGUgcmlnaHQgbW9zdCB2aWV3IGlzIHJlYWR5XG5cdCAqL1xuXHR3YWl0Rm9yUmlnaHRNb3N0Vmlld1JlYWR5KG9FdmVudDogYW55KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3QgYUNvbnRhaW5lcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIiksXG5cdFx0XHRcdC8vIFRoZXJlIGNhbiBhbHNvIGJlIHJldXNlIGNvbXBvbmVudHMgaW4gdGhlIHZpZXcsIHJlbW92ZSB0aGVtIGJlZm9yZSBwcm9jZXNzaW5nLlxuXHRcdFx0XHRhRkVDb250YWluZXJzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUNvbnRhaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRhaW5lcjogYW55KSB7XG5cdFx0XHRcdGxldCBvVmlldyA9IG9Db250YWluZXI7XG5cdFx0XHRcdGlmIChvQ29udGFpbmVyICYmIG9Db250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29tcG9uZW50SW5zdGFuY2UgPSBvQ29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRcdFx0b1ZpZXcgPSBvQ29tcG9uZW50SW5zdGFuY2UuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0Q29udHJvbGxlcigpICYmIG9WaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRhRkVDb250YWluZXJzLnB1c2gob1ZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IG9SaWdodE1vc3RGRVZpZXcgPSBhRkVDb250YWluZXJzW2FGRUNvbnRhaW5lcnMubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAob1JpZ2h0TW9zdEZFVmlldyAmJiBvUmlnaHRNb3N0RkVWaWV3LmdldENvbnRyb2xsZXIoKS5wYWdlUmVhZHkuaXNQYWdlUmVhZHkoKSkge1xuXHRcdFx0XHRyZXNvbHZlKG9SaWdodE1vc3RGRVZpZXcpO1xuXHRcdFx0fSBlbHNlIGlmIChvUmlnaHRNb3N0RkVWaWV3KSB7XG5cdFx0XHRcdG9SaWdodE1vc3RGRVZpZXcuZ2V0Q29udHJvbGxlcigpLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJlc29sdmUob1JpZ2h0TW9zdEZFVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZG9uZS5cblx0ICogIC0gdXBkYXRlIHRoZSBzaGVsbCB0aXRsZS5cblx0ICogIC0gdXBkYXRlIHRhYmxlIHNjcm9sbC5cblx0ICogIC0gY2FsbCBvblBhZ2VSZWFkeSBvbiB0aGUgcmlnaHRNb3N0Vmlldy5cblx0ICpcblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlciNfb25BZnRlclJvdXRlTWF0Y2hlZFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXJcblx0ICovXG5cdF9vbkFmdGVyUm91dGVNYXRjaGVkKG9FdmVudDogYW55KSB7XG5cdFx0aWYgKCF0aGlzLl9vUm91dGVNYXRjaGVkUHJvbWlzZSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hlZFByb21pc2UgPSB0aGlzLndhaXRGb3JSaWdodE1vc3RWaWV3UmVhZHkob0V2ZW50KVxuXHRcdFx0XHQudGhlbigob1ZpZXc6IGFueSkgPT4ge1xuXHRcdFx0XHRcdC8vIFRoZSBhdXRvRm9jdXMgaXMgaW5pdGlhbGx5IGRpc2FibGVkIG9uIHRoZSBuYXZDb250YWluZXIgb3IgdGhlIEZDTCwgc28gdGhhdCB0aGUgZm9jdXMgc3RheXMgb24gdGhlIFNoZWxsIG1lbnVcblx0XHRcdFx0XHQvLyBldmVuIGlmIHRoZSBhcHAgdGFrZXMgYSBsb25nIHRpbWUgdG8gbGF1bmNoXG5cdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IHRpbWUgdGhlIHZpZXcgaXMgZGlzcGxheWVkLCB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgYXV0b2ZvY3VzIHNvIHRoYXQgaXQncyBtYW5hZ2VkIHByb3Blcmx5IGR1cmluZyBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0Y29uc3Qgb1Jvb3RDb250cm9sID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdIGFzIGFueTtcblx0XHRcdFx0XHRpZiAob1Jvb3RDb250cm9sICYmIG9Sb290Q29udHJvbC5nZXRBdXRvRm9jdXMgJiYgIW9Sb290Q29udHJvbC5nZXRBdXRvRm9jdXMoKSkge1xuXHRcdFx0XHRcdFx0b1Jvb3RDb250cm9sLnNldFByb3BlcnR5KFwiYXV0b0ZvY3VzXCIsIHRydWUsIHRydWUpOyAvLyBEbyBub3QgbWFyayB0aGUgY29udGFpbmVyIGFzIGludmFsaWQsIG90aGVyd2lzZSBpdCdzIHJlLXJlbmRlcmVkXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0XHRcdFx0dGhpcy5fc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTtcblx0XHRcdFx0XHRpZiAob0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLlVTaGVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fY29tcHV0ZVRpdGxlSGllcmFyY2h5KG9WaWV3KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYkZvcmNlRm9jdXMgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCkuaXNGb2N1c0ZvcmNlZCgpO1xuXHRcdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKS5zZXRGb2N1c0ZvcmNlZChmYWxzZSk7IC8vIHJlc2V0XG5cdFx0XHRcdFx0aWYgKG9WaWV3LmdldENvbnRyb2xsZXIoKSAmJiBvVmlldy5nZXRDb250cm9sbGVyKCkub25QYWdlUmVhZHkgJiYgb1ZpZXcuZ2V0UGFyZW50KCkub25QYWdlUmVhZHkpIHtcblx0XHRcdFx0XHRcdG9WaWV3LmdldFBhcmVudCgpLm9uUGFnZVJlYWR5KHsgZm9yY2VGb2N1czogYkZvcmNlRm9jdXMgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLm9uQ29udGFpbmVyUmVhZHkpIHtcblx0XHRcdFx0XHRcdHRoaXMub25Db250YWluZXJSZWFkeSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21wdXRpbmcgdGhlIHRpdGxlIGhpZXJhcmNoeSBhbmQgY2FsbGluZyBmb2N1cyBtZXRob2RcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX29Sb3V0ZU1hdGNoZWRQcm9taXNlID0gbnVsbDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgVGl0bGVIaWVyYXJjaHkgY2FjaGUgKCBvciBpbml0aWFsaXplcyBpdCBpZiB1bmRlZmluZWQpLlxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlciNfZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXJcblx0ICogQHJldHVybnMgIFRoZSBUaXRsZUhpZXJhcmNoeSBjYWNoZVxuXHQgKi9cblx0X2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKSB7XG5cdFx0aWYgKCF0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlKSB7XG5cdFx0XHR0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlID0ge307XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9UaXRsZUhpZXJhcmNoeUNhY2hlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHRpdGxlSW5mbyBvYmplY3QuXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlclxuXHQgKiBAcGFyYW0gdGl0bGVcblx0ICogQHBhcmFtIHN1YnRpdGxlXG5cdCAqIEBwYXJhbSBzSW50ZW50IFRoZSBpbnRlbnQgcGF0aCB0byBiZSByZWRpcmVjdGVkIHRvXG5cdCAqIEByZXR1cm5zIFRoZSB0aXRsZSBpbmZvcm1hdGlvblxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUluZm8odGl0bGU6IGFueSwgc3VidGl0bGU6IGFueSwgc0ludGVudDogYW55KSB7XG5cdFx0Y29uc3QgYVBhcnRzID0gc0ludGVudC5zcGxpdChcIi9cIik7XG5cdFx0c0ludGVudCA9IFVSSS5kZWNvZGUoc0ludGVudCk7XG5cdFx0aWYgKGFQYXJ0c1thUGFydHMubGVuZ3RoIC0gMV0uaW5kZXhPZihcIj9cIikgPT09IC0xKSB7XG5cdFx0XHRzSW50ZW50ICs9IFwiP3Jlc3RvcmVIaXN0b3J5PXRydWVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0ludGVudCArPSBcIiZyZXN0b3JlSGlzdG9yeT10cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRzdWJ0aXRsZTogc3VidGl0bGUsXG5cdFx0XHRpbnRlbnQ6IHNJbnRlbnQsXG5cdFx0XHRpY29uOiBcIlwiXG5cdFx0fTtcblx0fVxuXHRfZm9ybWF0VGl0bGUoZGlzcGxheU1vZGU6IHN0cmluZywgdGl0bGVWYWx1ZTogc3RyaW5nLCB0aXRsZURlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGxldCBmb3JtYXR0ZWRUaXRsZSA9IFwiXCI7XG5cdFx0c3dpdGNoIChkaXNwbGF5TW9kZSkge1xuXHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVWYWx1ZX1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVWYWx1ZX0gKCR7dGl0bGVEZXNjcmlwdGlvbn0pYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRmb3JtYXR0ZWRUaXRsZSA9IGAke3RpdGxlRGVzY3JpcHRpb259ICgke3RpdGxlVmFsdWV9KWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdGZvcm1hdHRlZFRpdGxlID0gYCR7dGl0bGVEZXNjcmlwdGlvbn1gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaXRsZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSB2YWx1ZSBvZiB0aGUgSGVhZGVySW5mbyB0aXRsZSBmb3IgYSBnaXZlbiBwYXRoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc1BhdGggVGhlIHBhdGggdG8gdGhlIGVudGl0eVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHRpdGxlLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm8gSGVhZGVySW5mbyB0aXRsZSBhbm5vdGF0aW9uIGlzIGF2YWlsYWJsZVxuXHQgKi9cblx0YXN5bmMgX2ZldGNoVGl0bGVWYWx1ZShzUGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbCgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKSxcblx0XHRcdG9CaW5kaW5nVmlld0NvbnRleHQgPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc1BhdGgpLFxuXHRcdFx0c1ZhbHVlRXhwcmVzc2lvbiA9IEFubm90YXRpb25IZWxwZXIuZm9ybWF0KFxuXHRcdFx0XHRvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvL1RpdGxlL1ZhbHVlYCksXG5cdFx0XHRcdHsgY29udGV4dDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCB9XG5cdFx0XHQpO1xuXHRcdGlmICghc1ZhbHVlRXhwcmVzc2lvbikge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0Y29uc3Qgc1RleHRFeHByZXNzaW9uID0gQW5ub3RhdGlvbkhlbHBlci5mb3JtYXQoXG5cdFx0XHRcdG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRcdGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWUvJFBhdGhAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRgXG5cdFx0XHRcdCksXG5cdFx0XHRcdHsgY29udGV4dDogb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCB9XG5cdFx0XHQpLFxuXHRcdFx0b1Byb3BlcnR5Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NNZXRhUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm8vVGl0bGUvVmFsdWUvJFBhdGhAYCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0b1ZhbHVlRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzVmFsdWVFeHByZXNzaW9uKSxcblx0XHRcdG9Qcm9taXNlRm9yRGlzcGxheU1vZGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5Q29udGV4dCk7XG5cdFx0XHRcdHJlc29sdmUoZGlzcGxheU1vZGUpO1xuXHRcdFx0fSk7XG5cdFx0YVByb21pc2VzLnB1c2gob1Byb21pc2VGb3JEaXNwbGF5TW9kZSk7XG5cdFx0Y29uc3Qgc1ZhbHVlUGF0aCA9IG9WYWx1ZUV4cHJlc3Npb24ucGFydHMgPyBvVmFsdWVFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBvVmFsdWVFeHByZXNzaW9uLnBhdGgsXG5cdFx0XHRmblZhbHVlRm9ybWF0dGVyID0gb1ZhbHVlRXhwcmVzc2lvbi5mb3JtYXR0ZXIsXG5cdFx0XHRvVmFsdWVCaW5kaW5nID0gb01vZGVsLmJpbmRQcm9wZXJ0eShzVmFsdWVQYXRoLCBvQmluZGluZ1ZpZXdDb250ZXh0KTtcblx0XHRvVmFsdWVCaW5kaW5nLmluaXRpYWxpemUoKTtcblx0XHRjb25zdCBvUHJvbWlzZUZvclRpdGxlVmFsdWUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNUYXJnZXRWYWx1ZSA9IGZuVmFsdWVGb3JtYXR0ZXIgPyBmblZhbHVlRm9ybWF0dGVyKG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpKSA6IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRWYWx1ZSgpO1xuXG5cdFx0XHRcdG9WYWx1ZUJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0cmVzb2x2ZShzVGFyZ2V0VmFsdWUpO1xuXHRcdFx0fTtcblx0XHRcdG9WYWx1ZUJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHR9KTtcblx0XHRhUHJvbWlzZXMucHVzaChvUHJvbWlzZUZvclRpdGxlVmFsdWUpO1xuXG5cdFx0aWYgKHNUZXh0RXhwcmVzc2lvbikge1xuXHRcdFx0Y29uc3Qgb1RleHRFeHByZXNzaW9uID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKHNUZXh0RXhwcmVzc2lvbik7XG5cdFx0XHRsZXQgc1RleHRQYXRoID0gb1RleHRFeHByZXNzaW9uLnBhcnRzID8gb1RleHRFeHByZXNzaW9uLnBhcnRzWzBdLnBhdGggOiBvVGV4dEV4cHJlc3Npb24ucGF0aDtcblx0XHRcdHNUZXh0UGF0aCA9IHNWYWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gLTEgPyBgJHtzVmFsdWVQYXRoLnNsaWNlKDAsIHNWYWx1ZVBhdGgubGFzdEluZGV4T2YoXCIvXCIpKX0vJHtzVGV4dFBhdGh9YCA6IHNUZXh0UGF0aDtcblxuXHRcdFx0Y29uc3QgZm5UZXh0Rm9ybWF0dGVyID0gb1RleHRFeHByZXNzaW9uLmZvcm1hdHRlcixcblx0XHRcdFx0b1RleHRCaW5kaW5nID0gb01vZGVsLmJpbmRQcm9wZXJ0eShzVGV4dFBhdGgsIG9CaW5kaW5nVmlld0NvbnRleHQpO1xuXHRcdFx0b1RleHRCaW5kaW5nLmluaXRpYWxpemUoKTtcblx0XHRcdGNvbnN0IG9Qcm9taXNlRm9yVGl0bGVUZXh0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6IChkZXNjcmlwdGlvbjogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRcdGNvbnN0IGZuQ2hhbmdlID0gZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1RhcmdldFRleHQgPSBmblRleHRGb3JtYXR0ZXIgPyBmblRleHRGb3JtYXR0ZXIob0V2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCkpIDogb0V2ZW50LmdldFNvdXJjZSgpLmdldFZhbHVlKCk7XG5cblx0XHRcdFx0XHRvVGV4dEJpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdFx0XHRyZXNvbHZlKHNUYXJnZXRUZXh0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHRvVGV4dEJpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuQ2hhbmdlKTtcblx0XHRcdH0pO1xuXHRcdFx0YVByb21pc2VzLnB1c2gob1Byb21pc2VGb3JUaXRsZVRleHQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdGl0bGVJbmZvOiBhbnlbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdFx0XHRsZXQgZm9ybWF0dGVkVGl0bGUgPSBcIlwiO1xuXHRcdFx0aWYgKHR5cGVvZiB0aXRsZUluZm8gIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Zm9ybWF0dGVkVGl0bGUgPSB0aGlzLl9mb3JtYXRUaXRsZSh0aXRsZUluZm9bMF0sIHRpdGxlSW5mb1sxXSwgdGl0bGVJbmZvWzJdKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmb3JtYXR0ZWRUaXRsZTtcblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBmZXRjaGluZyB0aGUgdGl0bGUgZnJvbSB0aGUgaGVhZGVyIGluZm8gOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdF9nZXRBcHBTcGVjaWZpY0hhc2goKSB7XG5cdFx0Ly8gSGFzaENoYW5nZWQgaXNTaGVsbE5hdmlnYXRpb25IYXNoQ2hhbmdlclxuXHRcdHJldHVybiAoSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKSBhcyBhbnkpLmhyZWZGb3JBcHBTcGVjaWZpY0hhc2hcblx0XHRcdD8gKEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkgYXMgYW55KS5ocmVmRm9yQXBwU3BlY2lmaWNIYXNoKFwiXCIpXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblxuXHRfZ2V0SGFzaCgpIHtcblx0XHRyZXR1cm4gSGFzaENoYW5nZXIuZ2V0SW5zdGFuY2UoKS5nZXRIYXNoKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRpdGxlSW5mb3JtYXRpb24gZnJvbSBhIHBhdGguXG5cdCAqIEl0IHVwZGF0ZXMgdGhlIGNhY2hlIHRvIHN0b3JlIFRpdGxlIEluZm9ybWF0aW9uIGlmIG5lY2Vzc2FyeVxuXHQgKlxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlciNnZXRUaXRsZUluZm9Gcm9tUGF0aFxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUucm9vdFZpZXcuQmFzZUNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHsqfSBzUGF0aCBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIHJldHJpZXZlIHRpdGxlIGluZm9ybWF0aW9uIGZyb20gTWV0YU1vZGVsXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSAgb1RpdGxlaW5mb3JtYXRpb24gcmV0dXJuZWQgYXMgcHJvbWlzZVxuXHQgKi9cblxuXHRnZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aDogYW55KSB7XG5cdFx0Y29uc3Qgb1RpdGxlSGllcmFyY2h5Q2FjaGUgPSB0aGlzLl9nZXRUaXRsZUhpZXJhcmNoeUNhY2hlKCk7XG5cblx0XHRpZiAob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKSB7XG5cdFx0XHQvLyBUaGUgdGl0bGUgaW5mbyBpcyBhbHJlYWR5IHN0b3JlZCBpbiB0aGUgY2FjaGVcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob1RpdGxlSGllcmFyY2h5Q2FjaGVbc1BhdGhdKTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpO1xuXHRcdGNvbnN0IHNUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGVhZGVySW5mby9UeXBlTmFtZWApO1xuXHRcdGNvbnN0IHNBcHBTcGVjaWZpY0hhc2ggPSB0aGlzLl9nZXRBcHBTcGVjaWZpY0hhc2goKTtcblx0XHRjb25zdCBzSW50ZW50ID0gc0FwcFNwZWNpZmljSGFzaCArIHNQYXRoLnNsaWNlKDEpO1xuXHRcdHJldHVybiB0aGlzLl9mZXRjaFRpdGxlVmFsdWUoc1BhdGgpLnRoZW4oKHNUaXRsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvVGl0bGVJbmZvID0gdGhpcy5fY29tcHV0ZVRpdGxlSW5mbyhzVHlwZU5hbWUsIHNUaXRsZSwgc0ludGVudCk7XG5cdFx0XHRvVGl0bGVIaWVyYXJjaHlDYWNoZVtzUGF0aF0gPSBvVGl0bGVJbmZvO1xuXHRcdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEVuc3VyZSB0aGF0IHRoZSB1c2hlbGwgc2VydmljZSByZWNlaXZlcyBhbGwgZWxlbWVudHNcblx0ICogKHRpdGxlLCBzdWJ0aXRsZSwgaW50ZW50LCBpY29uKSBhcyBzdHJpbmdzLlxuXHQgKlxuXHQgKiBBbm5vdGF0aW9uIEhlYWRlckluZm8gYWxsb3dzIGZvciBiaW5kaW5nIG9mIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxuXHQgKiAod2hpY2ggYXJlIHVzZWQgaGVyZSBhcyB0aXRsZSBhbmQgc3VidGl0bGUpIHRvIGFueSBlbGVtZW50IGluIHRoZSBlbnRpdHlcblx0ICogKGJlaW5nIHBvc3NpYmx5IHR5cGVzIGxpa2UgYm9vbGVhbiwgdGltZXN0YW1wLCBkb3VibGUsIGV0Yy4pXG5cdCAqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaGllcmFyY2h5IGFuZCBjb252ZXJ0cyBub24tc3RyaW5nIHR5cGVzIHRvIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIGFIaWVyYXJjaHkgU2hlbGwgdGl0bGUgaGllcmFyY2h5XG5cdCAqIEByZXR1cm5zIENvcHkgb2Ygc2hlbGwgdGl0bGUgaGllcmFyY2h5IGNvbnRhaW5pbmcgYWxsIGVsZW1lbnRzIGFzIHN0cmluZ3Ncblx0ICovXG5cdF9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYUhpZXJhcmNoeTogYW55KSB7XG5cdFx0Y29uc3QgYUhpZXJhcmNoeVNoZWxsID0gW107XG5cdFx0Zm9yIChjb25zdCBsZXZlbCBpbiBhSGllcmFyY2h5KSB7XG5cdFx0XHRjb25zdCBvSGllcmFyY2h5ID0gYUhpZXJhcmNoeVtsZXZlbF07XG5cdFx0XHRjb25zdCBvU2hlbGxIaWVyYXJjaHk6IGFueSA9IHt9O1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gb0hpZXJhcmNoeSkge1xuXHRcdFx0XHRvU2hlbGxIaWVyYXJjaHlba2V5XSA9IHR5cGVvZiBvSGllcmFyY2h5W2tleV0gIT09IFwic3RyaW5nXCIgPyBTdHJpbmcob0hpZXJhcmNoeVtrZXldKSA6IG9IaWVyYXJjaHlba2V5XTtcblx0XHRcdH1cblx0XHRcdGFIaWVyYXJjaHlTaGVsbC5wdXNoKG9TaGVsbEhpZXJhcmNoeSk7XG5cdFx0fVxuXHRcdHJldHVybiBhSGllcmFyY2h5U2hlbGw7XG5cdH1cblxuXHRfZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKHNIYXNoOiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRsZXQgc1RhcmdldFR5cGUgPSBcIlwiO1xuXG5cdFx0Y29uc3QgYVJvdXRlcyA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3JvdXRpbmcvcm91dGVzXCIpO1xuXHRcdGZvciAoY29uc3Qgcm91dGUgb2YgYVJvdXRlcykge1xuXHRcdFx0Y29uc3Qgb1JvdXRlID0gb0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRSb3V0ZShyb3V0ZS5uYW1lKTtcblx0XHRcdGlmIChvUm91dGUubWF0Y2goc0hhc2gpKSB7XG5cdFx0XHRcdGNvbnN0IHNUYXJnZXQgPSBBcnJheS5pc0FycmF5KHJvdXRlLnRhcmdldCkgPyByb3V0ZS50YXJnZXRbMF0gOiByb3V0ZS50YXJnZXQ7XG5cdFx0XHRcdHNUYXJnZXRUeXBlID0gKG9BcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KHNUYXJnZXQpIGFzIGFueSkuX29PcHRpb25zLm5hbWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBzVGFyZ2V0VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIHVwZGF0aW5nIHRoZSBzaGVsbCB0aXRsZSBhZnRlciBlYWNoIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5yb290Vmlldy5CYXNlQ29udHJvbGxlclxuXHQgKiBAcGFyYW0gb1ZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcmV0dXJucyBBIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBtZW51IGlzIGZpbGxlZCBwcm9wZXJseVxuXHQgKi9cblx0X2NvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldzogYW55KSB7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRvQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRvQ3VycmVudFBhZ2UgPSBvVmlldy5nZXRQYXJlbnQoKSxcblx0XHRcdGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMgPSBbXSxcblx0XHRcdHNBcHBTcGVjaWZpY0hhc2ggPSB0aGlzLl9nZXRBcHBTcGVjaWZpY0hhc2goKSxcblx0XHRcdHNBcHBUaXRsZSA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS50aXRsZSB8fCBcIlwiLFxuXHRcdFx0c0FwcFN1YlRpdGxlID0gb0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpLmFwcFN1YlRpdGxlIHx8IFwiXCI7XG5cdFx0bGV0IG9QYWdlVGl0bGVJbmZvcm1hdGlvbjogYW55LCBzTmV3UGF0aDtcblxuXHRcdGlmIChvQ3VycmVudFBhZ2UgJiYgb0N1cnJlbnRQYWdlLl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbikge1xuXHRcdFx0aWYgKG9Db250ZXh0KSB7XG5cdFx0XHRcdC8vIElmIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBsaWNhdGlvbiBpcyBhIExSLCB1c2UgdGhlIHRpdGxlIGFuZCBzdWJ0aXRsZSBmcm9tIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRpZiAodGhpcy5fZ2V0VGFyZ2V0VHlwZUZyb21IYXNoKFwiXCIpID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdFx0YVRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVzb2x2ZSh0aGlzLl9jb21wdXRlVGl0bGVJbmZvKHNBcHBUaXRsZSwgc0FwcFN1YlRpdGxlLCBzQXBwU3BlY2lmaWNIYXNoKSkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVGhlbiBtYW5hZ2Ugb3RoZXIgcGFnZXNcblx0XHRcdFx0c05ld1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGFQYXRoUGFydHMgPSBzTmV3UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cblx0XHRcdFx0YVBhdGhQYXJ0cy5zaGlmdCgpOyAvLyBSZW1vdmUgdGhlIGZpcnN0IHNlZ21lbnQgKGVtcHR5IHN0cmluZykgYXMgaXQgaGFzIGJlZW4gbWFuYWdlZCBhYm92ZVxuXHRcdFx0XHRhUGF0aFBhcnRzLnBvcCgpOyAvLyBSZW1vdmUgdGhlIGxhc3Qgc2VnbWVudCBhcyBpdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwYWdlIGFuZCBzaG91bGRuJ3QgYXBwZWFyIGluIHRoZSBtZW51XG5cblx0XHRcdFx0YVBhdGhQYXJ0cy5mb3JFYWNoKChzUGF0aFBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHNQYXRoICs9IGAvJHtzUGF0aFBhcnR9YDtcblx0XHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCksXG5cdFx0XHRcdFx0XHRiSXNQYXJhbWV0ZXJpemVkID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRcdGlmICghYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0XHRcdFx0YVRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZ2V0VGl0bGVJbmZvRnJvbVBhdGgoc1BhdGgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDdXJyZW50IHBhZ2Vcblx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbiA9IG9DdXJyZW50UGFnZS5fZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKTtcblx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbiA9IHRoaXMuX2NvbXB1dGVUaXRsZUluZm8oXG5cdFx0XHRcdG9QYWdlVGl0bGVJbmZvcm1hdGlvbi50aXRsZSxcblx0XHRcdFx0b1BhZ2VUaXRsZUluZm9ybWF0aW9uLnN1YnRpdGxlLFxuXHRcdFx0XHRzQXBwU3BlY2lmaWNIYXNoICsgdGhpcy5fZ2V0SGFzaCgpXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0dGhpcy5fZ2V0VGl0bGVIaWVyYXJjaHlDYWNoZSgpW3NOZXdQYXRoXSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuX2dldFRpdGxlSGllcmFyY2h5Q2FjaGUoKVtzQXBwU3BlY2lmaWNIYXNoXSA9IG9QYWdlVGl0bGVJbmZvcm1hdGlvbjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YVRpdGxlSW5mb3JtYXRpb25Qcm9taXNlcy5wdXNoKFByb21pc2UucmVqZWN0KFwiVGl0bGUgaW5mb3JtYXRpb24gbWlzc2luZyBpbiBIZWFkZXJJbmZvXCIpKTtcblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFUaXRsZUluZm9ybWF0aW9uUHJvbWlzZXMpXG5cdFx0XHQudGhlbigoYVRpdGxlSW5mb0hpZXJhcmNoeTogYW55W10pID0+IHtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3Igc2hlbGwgd2hpY2ggaXMgZXhwZWN0aW5nIGFsbCBlbGVtZW50cyBiZWluZyBvZiB0eXBlIHN0cmluZ1xuXHRcdFx0XHRjb25zdCBhVGl0bGVJbmZvSGllcmFyY2h5U2hlbGwgPSB0aGlzLl9lbnN1cmVIaWVyYXJjaHlFbGVtZW50c0FyZVN0cmluZ3MoYVRpdGxlSW5mb0hpZXJhcmNoeSksXG5cdFx0XHRcdFx0c1RpdGxlID0gb1BhZ2VUaXRsZUluZm9ybWF0aW9uLnRpdGxlO1xuXHRcdFx0XHRhVGl0bGVJbmZvSGllcmFyY2h5U2hlbGwucmV2ZXJzZSgpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRIaWVyYXJjaHkoYVRpdGxlSW5mb0hpZXJhcmNoeVNoZWxsKTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc1RpdGxlKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvck1lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yTWVzc2FnZSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvck1lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yTWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBzdHJpbmcgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayBhZnRlciBhIHZpZXcgaGFzIGJlZW4gYm91bmQgdG8gYSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBib3VuZCB0byBhIHZpZXdcblx0ICovXG5cdG9uQ29udGV4dEJvdW5kVG9WaWV3KG9Db250ZXh0OiBhbnkpIHtcblx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IHNEZWVwZXN0UGF0aCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuZ2V0UHJvcGVydHkoXCIvZGVlcGVzdFBhdGhcIiksXG5cdFx0XHRcdHNWaWV3Q29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHRcdGlmICghc0RlZXBlc3RQYXRoIHx8IHNEZWVwZXN0UGF0aC5pbmRleE9mKHNWaWV3Q29udGV4dFBhdGgpICE9PSAwKSB7XG5cdFx0XHRcdC8vIFRoZXJlIHdhcyBubyBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIGRlZXBlc3QgcmVhY2hlZCBwYXRoLCBvciB0aGUgcGF0aFxuXHRcdFx0XHQvLyBmb3IgdGhlIHZpZXcgaXNuJ3QgYSBzdWJwYXRoIG9mIHRoZSBwcmV2aW91cyBkZWVwZXN0IHBhdGggLS0+IHVwZGF0ZVxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL2RlZXBlc3RQYXRoXCIsIHNWaWV3Q29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRkaXNwbGF5TWVzc2FnZVBhZ2Uoc0Vycm9yTWVzc2FnZTogYW55LCBtUGFyYW1ldGVyczogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGRlblxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBhbnksIEZDTExldmVsOiBhbnkpIHtcblx0XHQvLyBUbyBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0Z2V0SW5zdGFuY2VkVmlld3MoKTogWE1MVmlld1tdIHtcblx0XHRyZXR1cm4gW107XG5cdFx0Ly8gVG8gYmUgb3ZlcnJpZGVuXG5cdH1cblx0X3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0Z2V0QXBwQ29udGVudENvbnRhaW5lcih2aWV3OiBWaWV3KTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IGFwcENvbnRlbnRJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcIi9zYXAudWk1L3JvdXRpbmcvY29uZmlnL2NvbnRyb2xJZFwiKSB8fCBcImFwcENvbnRlbnRcIjtcblx0XHRyZXR1cm4gdmlldy5ieUlkKGFwcENvbnRlbnRJZCkgYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cbn1cbmludGVyZmFjZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIHtcblx0b25Db250YWluZXJSZWFkeT8oKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQWhCLEVBQXNCQyxPQUF0QixFQUErQjtJQUNyQyxJQUFJO01BQ0gsSUFBSUMsTUFBTSxHQUFHRixJQUFJLEVBQWpCO0lBQ0EsQ0FGRCxDQUVFLE9BQU1HLENBQU4sRUFBUztNQUNWLE9BQU9GLE9BQU8sQ0FBQ0UsQ0FBRCxDQUFkO0lBQ0E7O0lBQ0QsSUFBSUQsTUFBTSxJQUFJQSxNQUFNLENBQUNFLElBQXJCLEVBQTJCO01BQzFCLE9BQU9GLE1BQU0sQ0FBQ0UsSUFBUCxDQUFZLEtBQUssQ0FBakIsRUFBb0JILE9BQXBCLENBQVA7SUFDQTs7SUFDRCxPQUFPQyxNQUFQO0VBQ0E7Ozs7Ozs7Ozs7Ozs7O01B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
|
|
@@ -15,6 +15,7 @@ import type Context from "sap/ui/model/Context";
|
|
|
15
15
|
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
16
16
|
import AnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
17
17
|
import type ResourceModel from "sap/ui/model/resource/ResourceModel";
|
|
18
|
+
import URI from "sap/ui/thirdparty/URI";
|
|
18
19
|
|
|
19
20
|
@defineUI5Class("sap.fe.core.rootView.RootViewBaseController")
|
|
20
21
|
class RootViewBaseController extends BaseController {
|
|
@@ -180,6 +181,7 @@ class RootViewBaseController extends BaseController {
|
|
|
180
181
|
*/
|
|
181
182
|
_computeTitleInfo(title: any, subtitle: any, sIntent: any) {
|
|
182
183
|
const aParts = sIntent.split("/");
|
|
184
|
+
sIntent = URI.decode(sIntent);
|
|
183
185
|
if (aParts[aParts.length - 1].indexOf("?") === -1) {
|
|
184
186
|
sIntent += "?restoreHistory=true";
|
|
185
187
|
} else {
|