@sapui5/sap.fe.templates 1.104.1 → 1.105.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -1
- package/src/sap/fe/templates/Feedback.js +1 -1
- package/src/sap/fe/templates/ListComponent.js +2 -2
- package/src/sap/fe/templates/ListReport/Component.js +2 -2
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +5 -3
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +2 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +10 -73
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +30 -116
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +25 -105
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +1 -1
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +166 -62
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +129 -41
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ListReport/view/fragments/Chart.fragment.xml +3 -0
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +10 -4
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/MacroChart.fragment.xml +3 -2
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +3 -3
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +6 -2
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/Table.fragment.xml +6 -6
- package/src/sap/fe/templates/ListReport/view/fragments/VariantManagement.fragment.xml +31 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +9 -9
- package/src/sap/fe/templates/ObjectPage/Component.ts +10 -6
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +10 -5
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +6 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +48 -143
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +48 -34
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +45 -29
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +15 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +9 -1
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +178 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -2
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Chart.fragment.xml +13 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +2 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +22 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +8 -49
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionPresentationVisualization.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +23 -0
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +2 -2
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
- package/src/sap/fe/templates/TableScroller.js +1 -1
- package/src/sap/fe/templates/library.js +2 -2
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cy.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +2 -7
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -2
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleModeOld.fragment.xml +0 -50
- package/src/sap/fe/templates/controls/Chart.fragment.xml +0 -25
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
2
2
|
import Log from "sap/base/Log";
|
|
3
3
|
import merge from "sap/base/util/merge";
|
|
4
|
+
import ActionRuntime from "sap/fe/core/ActionRuntime";
|
|
4
5
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
5
6
|
import BusyLocker from "sap/fe/core/controllerextensions/BusyLocker";
|
|
6
7
|
import { connect } from "sap/fe/core/controllerextensions/collaboration/ActivitySync";
|
|
@@ -257,18 +258,26 @@ class ObjectPageController extends PageController {
|
|
|
257
258
|
if (oBinding.isA("sap.ui.model.odata.v4.ODataListBinding")) {
|
|
258
259
|
this.paginator.initialize(oBinding, oContext);
|
|
259
260
|
} else {
|
|
260
|
-
//if the binding type is not ODataListBinding because of a deeplink navigation or a refresh of the page
|
|
261
|
+
// if the binding type is not ODataListBinding because of a deeplink navigation or a refresh of the page
|
|
261
262
|
// we need to create it
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
263
|
+
const sBindingPath = oBinding.getPath();
|
|
264
|
+
if (/\([^\)]*\)$/.test(sBindingPath)) {
|
|
265
|
+
// The current binding path ends with (xxx), so we create the listBinding by removing (xxx)
|
|
266
|
+
const sListBindingPath = sBindingPath.replace(/\([^\)]*\)$/, "");
|
|
267
|
+
oBinding = new (ODataListBinding as any)(oBinding.oModel, sListBindingPath);
|
|
268
|
+
const _setListBindingAsync = () => {
|
|
269
|
+
if (oBinding.getContexts().length > 0) {
|
|
270
|
+
this.paginator.initialize(oBinding, oContext);
|
|
271
|
+
oBinding.detachEvent("change", _setListBindingAsync);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
oBinding.getContexts(0);
|
|
276
|
+
oBinding.attachEvent("change", _setListBindingAsync);
|
|
277
|
+
} else {
|
|
278
|
+
// The current binding doesn't end with (xxx) --> the last segment is a 1-1 navigation, so we don't display the paginator
|
|
279
|
+
this.paginator.initialize(undefined);
|
|
280
|
+
}
|
|
272
281
|
}
|
|
273
282
|
}
|
|
274
283
|
}
|
|
@@ -392,6 +401,7 @@ class ObjectPageController extends PageController {
|
|
|
392
401
|
}
|
|
393
402
|
|
|
394
403
|
_onBackNavigationInDraft(oContext: any) {
|
|
404
|
+
this.messageHandler.removeTransitionMessages();
|
|
395
405
|
if (this.getAppComponent().getRouterProxy().checkIfBackHasSameContext()) {
|
|
396
406
|
// Back nav will keep the same context --> no need to display the dialog
|
|
397
407
|
history.back();
|
|
@@ -459,7 +469,9 @@ class ObjectPageController extends PageController {
|
|
|
459
469
|
),
|
|
460
470
|
aSelectedContexts = oTable.getSelectedContexts();
|
|
461
471
|
|
|
462
|
-
|
|
472
|
+
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
473
|
+
// Clear the selection in the table, need to be fixed and review with BLI: FIORITECHP1-24318
|
|
474
|
+
oTable.clearSelection();
|
|
463
475
|
});
|
|
464
476
|
CommonUtils.getSemanticTargetsFromPageModel(this, "_pageModel");
|
|
465
477
|
//Retrieve Object Page header actions from Object Page title control
|
|
@@ -734,7 +746,11 @@ class ObjectPageController extends PageController {
|
|
|
734
746
|
if (err) {
|
|
735
747
|
Log.error(err);
|
|
736
748
|
}
|
|
737
|
-
|
|
749
|
+
const rootViewController = this.getAppComponent().getRootViewController() as any;
|
|
750
|
+
const currentPageView = rootViewController.isFclEnabled()
|
|
751
|
+
? rootViewController.getRightmostView()
|
|
752
|
+
: (this.getAppComponent().getRootContainer() as any).getCurrentPage();
|
|
753
|
+
if (!currentPageView.isA("sap.m.MessagePage")) {
|
|
738
754
|
const oMessageButton = this.getView().byId("fe::FooterBar::MessageButton") as any,
|
|
739
755
|
oMessagePopover = oMessageButton.oMessagePopover,
|
|
740
756
|
oItemBinding = oMessagePopover.getBinding("items");
|
|
@@ -1056,23 +1072,23 @@ class ObjectPageController extends PageController {
|
|
|
1056
1072
|
aPathParts = sNewPath?.split("/") ?? [],
|
|
1057
1073
|
oMetaModel = oAppComponent && oAppComponent.getMetaModel();
|
|
1058
1074
|
let sPath = "";
|
|
1059
|
-
aPathParts.shift();
|
|
1060
|
-
aPathParts.splice(-1, 1);
|
|
1061
|
-
aPathParts.forEach(function (sPathPart: any) {
|
|
1062
|
-
sPath += `/${sPathPart}`;
|
|
1063
|
-
const oRootViewController = oAppComponent.getRootViewController() as RootContainerBaseController;
|
|
1064
|
-
const sParameterPath = oMetaModel.getMetaPath(sPath);
|
|
1065
|
-
const bResultContext = oMetaModel.getObject(`${sParameterPath}/@com.sap.vocabularies.Common.v1.ResultContext`);
|
|
1066
|
-
if (bResultContext) {
|
|
1067
|
-
// We dont need to create a breadcrumb for Parameter path
|
|
1068
|
-
aSkipParameterized.push(1);
|
|
1069
|
-
return;
|
|
1070
|
-
} else {
|
|
1071
|
-
aSkipParameterized.push(0);
|
|
1072
|
-
}
|
|
1073
|
-
aPromises.push(oRootViewController.getTitleInfoFromPath(sPath));
|
|
1074
|
-
});
|
|
1075
1075
|
try {
|
|
1076
|
+
aPathParts.shift();
|
|
1077
|
+
aPathParts.splice(-1, 1);
|
|
1078
|
+
aPathParts.forEach(function (sPathPart: any) {
|
|
1079
|
+
sPath += `/${sPathPart}`;
|
|
1080
|
+
const oRootViewController = oAppComponent.getRootViewController() as RootContainerBaseController;
|
|
1081
|
+
const sParameterPath = oMetaModel.getMetaPath(sPath);
|
|
1082
|
+
const bResultContext = oMetaModel.getObject(`${sParameterPath}/@com.sap.vocabularies.Common.v1.ResultContext`);
|
|
1083
|
+
if (bResultContext) {
|
|
1084
|
+
// We dont need to create a breadcrumb for Parameter path
|
|
1085
|
+
aSkipParameterized.push(1);
|
|
1086
|
+
return;
|
|
1087
|
+
} else {
|
|
1088
|
+
aSkipParameterized.push(0);
|
|
1089
|
+
}
|
|
1090
|
+
aPromises.push(oRootViewController.getTitleInfoFromPath(sPath));
|
|
1091
|
+
});
|
|
1076
1092
|
const titleHierarchyInfos: any[] = await Promise.all(aPromises);
|
|
1077
1093
|
let idx, hierarchyPosition, oLink;
|
|
1078
1094
|
for (const titleHierarchyInfo of titleHierarchyInfos) {
|
|
@@ -115,13 +115,13 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/helpers/Bindin
|
|
|
115
115
|
_exports.getExpressionForDescription = getExpressionForDescription;
|
|
116
116
|
|
|
117
117
|
var getExpressionForSaveButton = function (oViewData, fullContextPath) {
|
|
118
|
-
var
|
|
118
|
+
var _annotations$Session;
|
|
119
119
|
|
|
120
120
|
var saveButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_SAVE", oViewData.resourceBundle);
|
|
121
121
|
var createButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_CREATE", oViewData.resourceBundle);
|
|
122
122
|
var saveExpression;
|
|
123
123
|
|
|
124
|
-
if ((
|
|
124
|
+
if ((_annotations$Session = fullContextPath.startingEntitySet.annotations.Session) !== null && _annotations$Session !== void 0 && _annotations$Session.StickySessionSupported) {
|
|
125
125
|
// If we're in sticky mode AND the ui is in create mode, show Create, else show Save
|
|
126
126
|
saveExpression = ifElse(UI.IsCreateModeSticky, createButtonText, saveButtonText);
|
|
127
127
|
} else {
|
|
@@ -856,6 +856,18 @@ sap.ui.define(["sap/fe/core/CommonUtils", "sap/fe/core/converters/helpers/Bindin
|
|
|
856
856
|
};
|
|
857
857
|
|
|
858
858
|
_exports.getPressExpressionForLink = getPressExpressionForLink;
|
|
859
|
+
|
|
860
|
+
var getHeaderFormHboxRenderType = function (dataField) {
|
|
861
|
+
var _dataField$targetObje;
|
|
862
|
+
|
|
863
|
+
if ((dataField === null || dataField === void 0 ? void 0 : (_dataField$targetObje = dataField.targetObject) === null || _dataField$targetObje === void 0 ? void 0 : _dataField$targetObje.$Type) === "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") {
|
|
864
|
+
return undefined;
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
return "Bare";
|
|
868
|
+
};
|
|
869
|
+
|
|
870
|
+
_exports.getHeaderFormHboxRenderType = getHeaderFormHboxRenderType;
|
|
859
871
|
return _exports;
|
|
860
872
|
}, false);
|
|
861
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk9iamVjdFBhZ2VUZW1wbGF0aW5nLnRzIl0sIm5hbWVzIjpbIkJ1dHRvblR5cGUiLCJtTGlicmFyeSIsImdldEV4cHJlc3Npb25Gb3JUaXRsZSIsIm9IZWFkZXJJbmZvIiwib1ZpZXdEYXRhIiwiZnVsbENvbnRleHRQYXRoIiwib0RyYWZ0Um9vdCIsInRpdGxlTm9IZWFkZXJJbmZvIiwiQ29tbW9uVXRpbHMiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInJlc291cmNlQnVuZGxlIiwidW5kZWZpbmVkIiwiZW50aXR5U2V0IiwidGl0bGVXaXRoSGVhZGVySW5mbyIsIm9FbXB0eUhlYWRlckluZm9UaXRsZSIsIlRpdGxlIiwiVmFsdWUiLCJ0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyIsInRpdGxlVmFsdWVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiJHRhcmdldCIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVGV4dCIsIlVJIiwiVGV4dEFycmFuZ2VtZW50IiwiYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbiIsImZvcm1hdFZhbHVlUmVjdXJzaXZlbHkiLCJjcmVhdGVNb2RlVGl0bGUiLCJUeXBlTmFtZSIsImNvbmNhdCIsInRvU3RyaW5nIiwiYWN0aXZlRXhwcmVzc2lvbiIsIkVudGl0eSIsIklzQWN0aXZlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJhbmQiLCJvciIsIklzQ3JlYXRlTW9kZVN0aWNreSIsIklzQ3JlYXRlTW9kZSIsImlzRW1wdHkiLCJnZXRFeHByZXNzaW9uRm9yRGVzY3JpcHRpb24iLCJwYXRoSW5Nb2RlbCIsIkRlc2NyaXB0aW9uIiwiZ2V0RXhwcmVzc2lvbkZvclNhdmVCdXR0b24iLCJzYXZlQnV0dG9uVGV4dCIsImNyZWF0ZUJ1dHRvblRleHQiLCJzYXZlRXhwcmVzc2lvbiIsInN0YXJ0aW5nRW50aXR5U2V0IiwiU2Vzc2lvbiIsIlN0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJEcmFmdCIsIklzTmV3T2JqZWN0IiwiZ2V0Rm9vdGVyVmlzaWJsZSIsImZvb3RlckFjdGlvbnMiLCJkYXRhRmllbGRzIiwibWFuaWZlc3RBY3Rpb25zIiwiZmlsdGVyIiwiYWN0aW9uIiwiaXNNYW5pZmVzdEFjdGlvbiIsImN1c3RvbUFjdGlvblZpc2liaWxpdHkiLCJsZW5ndGgiLCJjdXN0b21BY3Rpb25JbmRpdmlkdWFsVmlzaWJpbGl0eSIsIm1hcCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwidmlzaWJsZSIsImFubm90YXRpb25BY3Rpb25WaXNpYmlsaXR5IiwiZ2V0RGF0YUZpZWxkQmFzZWRGb290ZXJWaXNpYmlsaXR5IiwiYURhdGFGaWVsZHMiLCJiQ29uc2lkZXJFZGl0YWJsZSIsInNIaWRkZW5FeHByZXNzaW9uIiwic1NlbWlIaWRkZW5FeHByZXNzaW9uIiwiYUhpZGRlbkFjdGlvblBhdGgiLCJpIiwib0RhdGFGaWVsZCIsIiRUeXBlIiwiRGV0ZXJtaW5pbmciLCJoaWRkZW5FeHByZXNzaW9uIiwiJFBhdGgiLCJpbmRleE9mIiwicHVzaCIsImluZGV4Iiwib0FjdGlvbiIsImFBY3Rpb25zIiwidHlwZSIsImJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24iLCJhSWRlbnRpZmljYXRpb24iLCJFbXBoYXNpemVkIiwic0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uIiwiYklzQWx3YXlzRGVmYXVsdCIsInNIaWRkZW5TaW1wbGVQYXRoIiwiZm9yRWFjaCIsIm9Dcml0aWNhbGl0eVByb3BlcnR5IiwiQ3JpdGljYWxpdHkiLCJvRGF0YUZpZWxkSGlkZGVuIiwiJEVudW1NZW1iZXIiLCJEZWZhdWx0Iiwic0NvbWJpbmVkSGlkZGVuRXhwcmVzc2lvbiIsImdldEVsZW1lbnRCaW5kaW5nIiwic1BhdGgiLCJzTmF2aWdhdGlvblBhdGgiLCJPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciIsImdldE5hdmlnYXRpb25QYXRoIiwiY2hlY2tEcmFmdFN0YXRlIiwib0Fubm90YXRpb25zIiwiZ2V0U3dpdGNoVG9BY3RpdmVWaXNpYmlsaXR5IiwiZ2V0U3dpdGNoVG9EcmFmdFZpc2liaWxpdHkiLCJnZXRTd2l0Y2hEcmFmdEFuZEFjdGl2ZVZpc2liaWxpdHkiLCJfZmluZEFjdGlvbiIsImFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyIsInNBY3Rpb25UeXBlIiwiZmluZCIsIm9IZWFkZXJBY3Rpb24iLCJnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsIm9EZWxldGVBY3Rpb24iLCJlbmFibGVkIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvblZpc2libGUiLCJvRWRpdEFjdGlvbiIsImdldEVkaXRDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCIsImdldEVkaXRBY3Rpb24iLCJvRW50aXR5U2V0IiwiZ2V0UGF0aCIsImdldE9iamVjdCIsImJEcmFmdFJvb3QiLCJoYXNPd25Qcm9wZXJ0eSIsImJTdGlja3lTZXNzaW9uIiwic0FjdGlvbk5hbWUiLCJpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zIiwib0ZpZWxkQ29udHJvbCIsImJDb21wdXRlZCIsImJJbW11dGFibGUiLCJiUmVhZE9ubHkiLCJCb29sIiwicmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyIsInNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSIsIk1hbmFnZWRPYmplY3QiLCJiaW5kaW5nUGFyc2VyIiwiZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzIiwib0NvbmZpZ3VyYXRpb24iLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb2xsZWN0aW9uTmFtZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsiLCJvQ29udHJvbENvbmZpZ3VyYXRpb24iLCJnZXRHcm91cElkRnJvbUNvbmZpZyIsIm9Db25maWd1cmF0aW9ucyIsInNBbm5vdGF0aW9uUGF0aCIsInNEZWZhdWx0R3JvdXBJZCIsImFBdXRvUGF0dGVybnMiLCJzR3JvdXBJZCIsInJlcXVlc3RHcm91cElkIiwic29tZSIsImF1dG9QYXR0ZXJuIiwiZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyIsInNLZXkiLCJzQmluZGluZyIsImRvZXNGaWVsZEdyb3VwQ29udGFpbk9ubHlPbmVNdWx0aUxpbmVEYXRhRmllbGQiLCJhRm9ybUVsZW1lbnRzIiwiaXNWYWx1ZU11bHRpbGluZVRleHQiLCJnZXRWaXNpYmxlRXhwcmVzc2lvbkZvckJyZWFkY3J1bWJzIiwic2hvd0JyZWFkQ3J1bWJzIiwiZmNsRW5hYmxlZCIsImdldFNoYXJlQnV0dG9uVmlzaWJpbGl0eSIsInZpZXdEYXRhIiwic1NoYXJlQnV0dG9uVmlzaWJpbGl0eUV4cCIsImdldFZpc2libGl0eU9mSGVhZGVyRmFjZXQiLCJvVGl0bGVBbm5vdGF0aW9ucyIsIm9EZXNjcmlwdGlvbkFubm90YXRpb25zIiwib0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wiLCJvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbCIsImJJc1RpdGxlUmVhZE9ubHkiLCJ0aXRsZUV4cHJlc3Npb24iLCJiSXNEZXNjcmlwdGlvblJlYWRPbmx5IiwiZGVzY3JpcHRpb25FeHByZXNzaW9uIiwiY29tYmluZVRpdGxlQW5kRGVzY3JpcHRpb25FeHByZXNzaW9uIiwib1RpdGxlRmllbGRDb250cm9sIiwib0Rlc2NyaXB0aW9uRmllbGRDb250cm9sIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlIiwic0VudGl0eVNldE5hbWUiLCJzRGVsZXRhYmxlQ29udGV4dHMiLCJzVGl0bGUiLCJzRGVzY3JpcHRpb24iLCJvUGFyYW1zIiwidGl0bGUiLCJlbnRpdHlTZXROYW1lIiwiQ29tbW9uSGVscGVyIiwiYWRkU2luZ2xlUXVvdGVzIiwiZGVzY3JpcHRpb24iLCJnZW5lcmF0ZUZ1bmN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JFZGl0Iiwic0VkaXRhYmxlQ29udGV4dHMiLCJBY3Rpb24iLCJzRGF0YUZpZWxkRW51bU1lbWJlciIsIkludm9jYXRpb25Hcm91cGluZyIsInNJbnZvY2F0aW9uR3JvdXAiLCJjb250ZXh0cyIsImludm9jYXRpb25Hcm91cGluZyIsIm1vZGVsIiwibGFiZWwiLCJMYWJlbCIsImlzTmF2aWdhYmxlIiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRm9vdGVyQW5ub3RhdGlvbkFjdGlvbiIsInNBY3Rpb25Db250ZXh0cyIsImdldFN0YXNoYWJsZUhCb3hCaW5kaW5nIiwib0hlYWRlckZhY2V0IiwiRmFjZXQiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsInRhcmdldEFubm90YXRpb25WYWx1ZSIsImdldFByZXNzRXhwcmVzc2lvbkZvckxpbmsiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsTUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQTVCOztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUUscUJBQXFCLEdBQUcsVUFDcENDLFdBRG9DLEVBRXBDQyxTQUZvQyxFQUdwQ0MsZUFIb0MsRUFJcENDLFVBSm9DLEVBS0Q7QUFBQTs7QUFDbkMsUUFBTUMsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0MsaUJBQVosQ0FBOEIsY0FBOUIsRUFBOENMLFNBQVMsQ0FBQ00sY0FBeEQsRUFBd0VDLFNBQXhFLEVBQW1GUCxTQUFTLENBQUNRLFNBQTdGLENBQTFCO0FBRUEsUUFBTUMsbUJBQW1CLEdBQUdMLFdBQVcsQ0FBQ0MsaUJBQVosQ0FDM0Isc0RBRDJCLEVBRTNCTCxTQUFTLENBQUNNLGNBRmlCLEVBRzNCQyxTQUgyQixFQUkzQlAsU0FBUyxD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Sk07QUFNUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1DLHlCQUF5QixHQUFHLFVBQVV6RSxjQUFWLEVBQStCQyxpQkFBL0IsRUFBdUQ7QUFDL0YsUUFBSUQsY0FBSixFQUFvQjtBQUNuQixVQUFJQSxjQUFjLENBQUMsZ0JBQUQsQ0FBZCxJQUFvQ0EsY0FBYyxDQUFDLGdCQUFELENBQWQsQ0FBaUMsVUFBakMsQ0FBeEMsRUFBc0Y7QUFDckYsZUFDQyxpRUFDQUcsSUFBSSxDQUFDQyxTQUFMLENBQWVILGlCQUFmLENBREEsR0FFQSxHQUZBLEdBR0FFLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixjQUFjLENBQUMsZ0JBQUQsQ0FBZCxDQUFpQyxVQUFqQyxDQUFmLENBSEEsR0FJQSxHQUxEO0FBT0EsT0FSRCxNQVFPLElBQUlBLGNBQWMsQ0FBQyxnQkFBRCxDQUFsQixFQUFzQztBQUM1QyxlQUFPLGtEQUFrREcsSUFBSSxDQUFDQyxTQUFMLENBQWVKLGNBQWMsQ0FBQyxnQkFBRCxDQUE3QixDQUFsRCxHQUFxRyxJQUE1RztBQUNBLE9BRk0sTUFFQTtBQUNOLGVBQU9qSSxTQUFQO0FBQ0E7QUFDRDtBQUNELEdBaEJNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkLCBEYXRhRmllbGRUeXBlcywgSGVhZGVySW5mb1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDb252ZXJ0ZXJBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBEcmFmdCwgRW50aXR5LCBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25jYXQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc0VtcHR5LFxuXHRvcixcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uLCBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgbUxpYnJhcnkgZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuXG5jb25zdCBCdXR0b25UeXBlID0gbUxpYnJhcnkuQnV0dG9uVHlwZTtcblxudHlwZSBWaWV3RGF0YSA9IHtcblx0cmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlO1xuXHRlbnRpdHlTZXQ6IHN0cmluZztcbn07XG5cbi8vYGBgbWVybWFpZFxuLy8gZ3JhcGggVERcbi8vIEFbT2JqZWN0IFBhZ2UgVGl0bGVdIC0tPnxHZXQgRGF0YUZpZWxkIFZhbHVlfCBDe0V2YWx1YXRlIENyZWF0ZSBNb2RlfVxuLy8gQyAtLT58SW4gQ3JlYXRlIE1vZGV8IER7SXMgRGF0YUZpZWxkIFZhbHVlIGVtcHR5fVxuLy8gRCAtLT58WWVzfCBGe0lzIHRoZXJlIGEgVHlwZU5hbWV9XG4vLyBGIC0tPnxZZXN8IEdbSXMgdGhlcmUgYW4gY3VzdG9tIHRpdGxlXVxuLy8gRyAtLT58WWVzfCBHMVtTaG93IHRoZSBjdXN0b20gdGl0bGUgKyAnVHlwZU5hbWUnXVxuLy8gRyAtLT58Tm98IEcyW0Rpc3BsYXkgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJ11cbi8vIEYgLS0+fE5vfCBIW0lzIHRoZXJlIGEgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58WWVzfCBJW1Nob3cgdGhlIGN1c3RvbSB0aXRsZV1cbi8vIEggLS0+fE5vfCBKW1Nob3cgdGhlIGRlZmF1bHQgJ1VuYW1uZWQgT2JqZWN0J11cbi8vIEQgLS0+fE5vfCBFXG4vLyBDIC0tPnxOb3QgaW4gY3JlYXRlIG1vZGV8IEVbU2hvdyBEYXRhRmllbGQgVmFsdWVdXG4vLyBgYGBcbi8qKlxuICogQ29tcHV0ZSB0aGUgdGl0bGUgZm9yIHRoZSBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgdmlldyBkYXRhIG9iamVjdCB3ZSdyZSBjdXJyZW50bHkgb25cbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIGZ1bGwgY29udGV4dCBwYXRoIHVzZWQgdG8gcmVhY2ggdGhhdCBvYmplY3QgcGFnZVxuICogQHBhcmFtIG9EcmFmdFJvb3RcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSB0aXRsZVxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvclRpdGxlID0gZnVuY3Rpb24gKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdG9WaWV3RGF0YTogVmlld0RhdGEsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0b0RyYWZ0Um9vdDogT2JqZWN0IHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHRpdGxlTm9IZWFkZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX05FV19PQkpFQ1RcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlLCB1bmRlZmluZWQsIG9WaWV3RGF0YS5lbnRpdHlTZXQpO1xuXG5cdGNvbnN0IHRpdGxlV2l0aEhlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcblx0XHRcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVcIixcblx0XHRvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUsXG5cdFx0dW5kZWZpbmVkLFxuXHRcdG9WaWV3RGF0YS5lbnRpdHlTZXRcblx0KTtcblxuXHRjb25zdCBvRW1wdHlIZWFkZXJJbmZvVGl0bGUgPVxuXHRcdG9IZWFkZXJJbmZvPy5UaXRsZSA9PT0gdW5kZWZpbmVkIHx8IChvSGVhZGVySW5mbz8uVGl0bGUgYXMgYW55KSA9PT0gXCJcIiB8fCAob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUgPT09IFwiXCI7XG5cblx0Y29uc3QgdGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8gPSAhb0VtcHR5SGVhZGVySW5mb1RpdGxlXG5cdFx0PyBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfQU5OT1RBVElPTl9IRUxQRVJfREVGQVVMVF9PQkpFQ1RfUEFHRV9IRUFERVJfVElUTEVfTk9fSEVBREVSX0lORk9cIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKVxuXHRcdDogXCJcIjtcblxuXHRsZXQgdGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlKTtcblx0aWYgKChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHQvLyBJbiBjYXNlIGFuIGV4cGxpY2l0IHRleHQgYXJyYW5nZW1lbnQgd2FzIHNldCB3ZSBtYWtlIHVzZSBvZiBpdCBpbiB0aGUgZGVzY3JpcHRpb24gYXMgd2VsbFxuXHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbih0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXG5cdHRpdGxlVmFsdWVFeHByZXNzaW9uID0gZm9ybWF0VmFsdWVSZWN1cnNpdmVseSh0aXRsZVZhbHVlRXhwcmVzc2lvbiwgZnVsbENvbnRleHRQYXRoKTtcblxuXHQvLyBJZiB0aGVyZSBpcyBhIFR5cGVOYW1lIGRlZmluZWQsIHNob3cgdGhlIGRlZmF1bHQgdGl0bGUgJ05ldyArIFR5cGVOYW1lJywgb3RoZXJ3aXNlIHNob3cgdGhlIGN1c3RvbSB0aXRsZSBvciB0aGUgZGVmYXVsdCAnTmV3IG9iamVjdCdcblx0Y29uc3QgY3JlYXRlTW9kZVRpdGxlID0gb0hlYWRlckluZm8/LlR5cGVOYW1lXG5cdFx0PyBjb25jYXQodGl0bGVXaXRoSGVhZGVySW5mbywgXCI6IFwiLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ob0hlYWRlckluZm8uVHlwZU5hbWUudG9TdHJpbmcoKSkpXG5cdFx0OiB0aXRsZU5vSGVhZGVySW5mbztcblx0Y29uc3QgYWN0aXZlRXhwcmVzc2lvbiA9IG9EcmFmdFJvb3QgPyBFbnRpdHkuSXNBY3RpdmUgOiB0cnVlO1xuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRpZkVsc2UoXG5cdFx0XHQvLyBJZiBDcmVhdGUgTW9kZSAmJiBFbXB0eSBleHByZXNzaW9uXG5cdFx0XHRhbmQob3IoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBVSS5Jc0NyZWF0ZU1vZGUpLCB0aXRsZVZhbHVlRXhwcmVzc2lvbiAmJiBpc0VtcHR5KHRpdGxlVmFsdWVFeHByZXNzaW9uKSksXG5cblx0XHRcdGNyZWF0ZU1vZGVUaXRsZSxcblx0XHRcdC8vIE90aGVyd2lzZSBzaG93IHRoZSBkZWZhdWx0IGV4cHJlc3Npb25cblx0XHRcdGlmRWxzZShcblx0XHRcdFx0YW5kKGFjdGl2ZUV4cHJlc3Npb24sIHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSxcblx0XHRcdFx0dGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8sXG5cdFx0XHRcdHRpdGxlVmFsdWVFeHByZXNzaW9uXG5cdFx0XHQpXG5cdFx0KVxuXHQpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiBhbiBvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0hlYWRlckluZm8gVGhlIEBVSS5IZWFkZXJJbmZvIGFubm90YXRpb24gY29udGVudFxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgb2JqZWN0IHBhZ2UgZGVzY3JpcHRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JEZXNjcmlwdGlvbiA9IGZ1bmN0aW9uIChcblx0b0hlYWRlckluZm86IEhlYWRlckluZm9UeXBlIHwgdW5kZWZpbmVkLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0bGV0IHBhdGhJbk1vZGVsID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSk7XG5cdGlmICgob0hlYWRlckluZm8/LkRlc2NyaXB0aW9uIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LlRleHQ/LmFubm90YXRpb25zPy5VST8uVGV4dEFycmFuZ2VtZW50KSB7XG5cdFx0Ly8gSW4gY2FzZSBhbiBleHBsaWNpdCB0ZXh0IGFycmFuZ2VtZW50IHdhcyBzZXQgd2UgbWFrZSB1c2Ugb2YgaXQgaW4gdGhlIGRlc2NyaXB0aW9uIGFzIHdlbGxcblx0XHRwYXRoSW5Nb2RlbCA9IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24ocGF0aEluTW9kZWwsIGZ1bGxDb250ZXh0UGF0aCk7XG5cdH1cblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0VmFsdWVSZWN1cnNpdmVseShwYXRoSW5Nb2RlbCwgZnVsbENvbnRleHRQYXRoKSk7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHNhdmUgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSBvVmlld0RhdGEgVGhlIGN1cnJlbnQgdmlldyBkYXRhXG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBwYXRoIHVzZWQgdXAgdW50aWwgaGVyZVxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0aGF0IHNob3dzIHRoZSByaWdodCBzYXZlIGJ1dHRvbiB0ZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yU2F2ZUJ1dHRvbiA9IGZ1bmN0aW9uIChcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IHNhdmVCdXR0b25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX1NBVkVcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKTtcblx0Y29uc3QgY3JlYXRlQnV0dG9uVGV4dCA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9PUF9PQkpFQ1RfUEFHRV9DUkVBVEVcIiwgb1ZpZXdEYXRhLnJlc291cmNlQnVuZGxlKTtcblx0bGV0IHNhdmVFeHByZXNzaW9uO1xuXG5cdGlmIChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuYW5ub3RhdGlvbnMuU2Vzc2lvbj8uU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCkge1xuXHRcdC8vIElmIHdlJ3JlIGluIHN0aWNreSBtb2RlIEFORCB0aGUgdWkgaXMgaW4gY3JlYXRlIG1vZGUsIHNob3cgQ3JlYXRlLCBlbHNlIHNob3cgU2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKFVJLklzQ3JlYXRlTW9kZVN0aWNreSwgY3JlYXRlQnV0dG9uVGV4dCwgc2F2ZUJ1dHRvblRleHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHdlJ3JlIGluIGRyYWZ0IEFORCB0aGUgZHJhZnQgaXMgYSBuZXcgb2JqZWN0ICghSXNBY3RpdmVFbnRpdHkgJiYgIUhhc0FjdGl2ZUVudGl0eSksIHNob3cgY3JlYXRlLCBlbHNlIHNob3cgc2F2ZVxuXHRcdHNhdmVFeHByZXNzaW9uID0gaWZFbHNlKERyYWZ0LklzTmV3T2JqZWN0LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHNhdmVFeHByZXNzaW9uKTtcbn07XG5cbi8qKlxuICogTWV0aG9kIHJldHVybnMgd2hldGhlciBmb290ZXIgaXMgdmlzaWJsZSBvciBub3Qgb24gb2JqZWN0IC8gc3Vib2JqZWN0IHBhZ2UuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBnZXRGb290ZXJWaXNpYmxlXG4gKiBAcGFyYW0gZm9vdGVyQWN0aW9ucyBUaGUgZm9vdGVyIGFjdGlvbiBvYmplY3QgY29taW5nIGZyb20gdGhlIGNvbnZlcnRlclxuICogQHBhcmFtIGRhdGFGaWVsZHMgRGF0YSBmaWVsZCBhcnJheSBmb3Igbm9ybWFsIGZvb3RlciB2aXNpYmlsaXR5IHByb2Nlc3NpbmdcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbnkgYWN0aW9uIGlzIHRydWUsIG90aGVyd2lzZSBjb21waWxlZCBCaW5kaW5nIG9yIGBmYWxzZWBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvb3RlclZpc2libGUgPSBmdW5jdGlvbiAoXG5cdGZvb3RlckFjdGlvbnM6IENvbnZlcnRlckFjdGlvbltdLFxuXHRkYXRhRmllbGRzOiBEYXRhRmllbGRbXVxuKTogYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgbWFuaWZlc3RBY3Rpb25zID0gZm9vdGVyQWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gaXNNYW5pZmVzdEFjdGlvbihhY3Rpb24pKSBhcyBNYW5pZmVzdEFjdGlvbltdO1xuXHRsZXQgY3VzdG9tQWN0aW9uVmlzaWJpbGl0eTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAobWFuaWZlc3RBY3Rpb25zLmxlbmd0aCkge1xuXHRcdC8vIElmIHdlIGhhdmUgbWFuaWZlc3QgYWN0aW9uc1xuXHRcdGNvbnN0IGN1c3RvbUFjdGlvbkluZGl2aWR1YWxWaXNpYmlsaXR5ID0gbWFuaWZlc3RBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oYWN0aW9uLnZpc2libGUgYXMgc3RyaW5nIHwgYm9vbGVhbiwgXCJib29sZWFuXCIpO1xuXHRcdH0pO1xuXHRcdC8vIGNvbnN0cnVjdCB0aGUgZm9vdGVyJ3MgdmlzaWJpbGl0eS1iaW5kaW5nIG91dCBvZiBhbGwgYWN0aW9ucycgdmlzaWJpbGl0eS1iaW5kaW5ncywgZmlyc3QgdGhlIGJpbmRpbmcgb2YgYWxsIGN1c3RvbSBhY3Rpb25zIC4uLlxuXHRcdGN1c3RvbUFjdGlvblZpc2liaWxpdHkgPSBvciguLi5jdXN0b21BY3Rpb25JbmRpdmlkdWFsVmlzaWJpbGl0eSk7XG5cdFx0Ly8gYW5kIHRoZW4gdGhlIGJpbmRpbmcgb2YgYWxsIGFubm90YXRpb24gYWN0aW9ucyBpbnNpZGUgdGhlIGZvb3RlciAuLi5cblx0XHRjb25zdCBhbm5vdGF0aW9uQWN0aW9uVmlzaWJpbGl0eSA9IGdldERhdGFGaWVsZEJhc2VkRm9vdGVyVmlzaWJpbGl0eShkYXRhRmllbGRzLCB0cnVlKTtcblx0XHQvLyBmaW5hbGx5LCByZXR1cm4gZXZlcnl0aGluZy5cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoY3VzdG9tQWN0aW9uVmlzaWJpbGl0eSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oYW5ub3RhdGlvbkFjdGlvblZpc2liaWxpdHksIFwiYm9vbGVhblwiKSkpO1xuXHR9XG5cdHJldHVybiBnZXREYXRhRmllbGRCYXNlZEZvb3RlclZpc2liaWxpdHkoZGF0YUZpZWxkcywgdHJ1ZSk7XG59O1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZm9vdGVyIGlzIHZpc2libGUgb3Igbm90LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VUZW1wbGF0aW5nLmdldERhdGFGaWVsZEJhc2VkRm9vdGVyVmlzaWJpbGl0eVxuICogQG1lbWJlcm9mIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlVGVtcGxhdGluZ1xuICogQHBhcmFtIGFEYXRhRmllbGRzIEFycmF5IG9mIERhdGFGaWVsZHMgaW4gdGhlIGlkZW50aWZpY2F0aW9uXG4gKiBAcGFyYW0gYkNvbnNpZGVyRWRpdGFibGUgV2hldGhlciB0aGUgZWRpdCBtb2RlIGJpbmRpbmcgaXMgcmVxdWlyZWQgb3Igbm90XG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIGlmIGFsbCB0aGUgYWN0aW9ucyBhcmUgdWkuaGlkZGVuLCB0cnVlIG90aGVyd2lzZVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YUZpZWxkQmFzZWRGb290ZXJWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKGFEYXRhRmllbGRzOiBhbnlbXSwgYkNvbnNpZGVyRWRpdGFibGU6IGJvb2xlYW4pIHtcblx0bGV0IHNIaWRkZW5FeHByZXNzaW9uID0gXCJcIjtcblx0bGV0IHNTZW1pSGlkZGVuRXhwcmVzc2lvbjtcblx0Y29uc3QgYUhpZGRlbkFjdGlvblBhdGggPSBbXTtcblxuXHRmb3IgKGNvbnN0IGkgaW4gYURhdGFGaWVsZHMpIHtcblx0XHRjb25zdCBvRGF0YUZpZWxkID0gYURhdGFGaWVsZHNbaV07XG5cdFx0aWYgKG9EYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbiAmJiBvRGF0YUZpZWxkLkRldGVybWluaW5nID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBoaWRkZW5FeHByZXNzaW9uID0gb0RhdGFGaWVsZFtgQCR7VUlBbm5vdGF0aW9uVGVybXMuSGlkZGVufWBdO1xuXHRcdFx0aWYgKCFoaWRkZW5FeHByZXNzaW9uKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmIChoaWRkZW5FeHByZXNzaW9uLiRQYXRoKSB7XG5cdFx0XHRcdGlmIChhSGlkZGVuQWN0aW9uUGF0aC5pbmRleE9mKGhpZGRlbkV4cHJlc3Npb24uJFBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRcdGFIaWRkZW5BY3Rpb25QYXRoLnB1c2goaGlkZGVuRXhwcmVzc2lvbi4kUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoYUhpZGRlbkFjdGlvblBhdGgubGVuZ3RoKSB7XG5cdFx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFIaWRkZW5BY3Rpb25QYXRoLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0aWYgKGFIaWRkZW5BY3Rpb25QYXRoW2luZGV4XSkge1xuXHRcdFx0XHRzU2VtaUhpZGRlbkV4cHJlc3Npb24gPSBcIigle1wiICsgYUhpZGRlbkFjdGlvblBhdGhbaW5kZXhdICsgXCJ9ID09PSB0cnVlID8gZmFsc2UgOiB0cnVlIClcIjtcblx0XHRcdH1cblx0XHRcdGlmIChpbmRleCA9PSBhSGlkZGVuQWN0aW9uUGF0aC5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdHNIaWRkZW5FeHByZXNzaW9uID0gc0hpZGRlbkV4cHJlc3Npb24gKyBzU2VtaUhpZGRlbkV4cHJlc3Npb247XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzSGlkZGVuRXhwcmVzc2lvbiA9IHNIaWRkZW5FeHByZXNzaW9uICsgc1NlbWlIaWRkZW5FeHByZXNzaW9uICsgXCJ8fFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJ7PSBcIiArXG5cdFx0XHQoYkNvbnNpZGVyRWRpdGFibGUgPyBcIihcIiA6IFwiXCIpICtcblx0XHRcdHNIaWRkZW5FeHByZXNzaW9uICtcblx0XHRcdChiQ29uc2lkZXJFZGl0YWJsZSA/IFwiIHx8ICR7dWk+L2lzRWRpdGFibGV9KSBcIiA6IFwiIFwiKSArXG5cdFx0XHRcIiYmICR7aW50ZXJuYWw+aXNDcmVhdGVEaWFsb2dPcGVufSAhPT0gdHJ1ZX1cIlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiez0gXCIgKyAoYkNvbnNpZGVyRWRpdGFibGUgPyBcIiR7dWk+L2lzRWRpdGFibGV9ICYmIFwiIDogXCJcIikgKyBcIiR7aW50ZXJuYWw+aXNDcmVhdGVEaWFsb2dPcGVufSAhPT0gdHJ1ZX1cIjtcblx0fVxufTtcblxuLyoqXG4gKiBNZXRob2QgcmV0dXJucyBXaGV0aGVyIHRoZSBhY3Rpb24gdHlwZSBpcyBtYW5pZmVzdCBvciBub3QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBpc01hbmlmZXN0QWN0aW9uVmlzaWJsZVxuICogQHBhcmFtIG9BY3Rpb24gVGhlIGFjdGlvbiBvYmplY3RcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhY3Rpb24gaXMgY29taW5nIGZyb20gbWFuaWZlc3QsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc01hbmlmZXN0QWN0aW9uID0gZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRjb25zdCBhQWN0aW9ucyA9IFtcblx0XHRcIlByaW1hcnlcIixcblx0XHRcIkRlZmF1bHRBcHBseVwiLFxuXHRcdFwiU2Vjb25kYXJ5XCIsXG5cdFx0XCJGb3JBY3Rpb25cIixcblx0XHRcIkZvck5hdmlnYXRpb25cIixcblx0XHRcIlN3aXRjaFRvQWN0aXZlT2JqZWN0XCIsXG5cdFx0XCJTd2l0Y2hUb0RyYWZ0T2JqZWN0XCIsXG5cdFx0XCJEcmFmdEFjdGlvbnNcIlxuXHRdO1xuXHRyZXR1cm4gYUFjdGlvbnMuaW5kZXhPZihvQWN0aW9uLnR5cGUpIDwgMDtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhbiBleHByZXNzaW9uIHRvIGRldGVybWluZSBFbXBoYXNpemVkICBidXR0b24gdHlwZSBiYXNlZCBvbiBDcml0aWNhbGl0eSBhY3Jvc3MgYWxsIGFjdGlvbnNcbiAqIElmIGNyaXRpY2FsIGFjdGlvbiBpcyByZW5kZXJlZCwgaXRzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIHByaW1hcnkgYWN0aW9uLiBIZW5jZSB0ZW1wbGF0ZSdzIGRlZmF1bHQgcHJpbWFyeSBhY3Rpb24gaXMgc2V0IGJhY2sgdG8gRGVmYXVsdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlVGVtcGxhdGluZy5idWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uXG4gKiBAbWVtYmVyb2Ygc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VUZW1wbGF0aW5nXG4gKiBAcGFyYW0gYUlkZW50aWZpY2F0aW9uIEFycmF5IG9mIGFsbCB0aGUgRGF0YUZpZWxkcyBpbiBJZGVudGlmaWNhdGlvblxuICogQHJldHVybnMgQW4gZXhwcmVzc2lvbiB0byBkZWR1Y2UgaWYgYnV0dG9uIHR5cGUgaXMgRGVmYXVsdCBvciBFbXBoYXNpemVkXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uID0gZnVuY3Rpb24gKGFJZGVudGlmaWNhdGlvbj86IGFueVtdKSB7XG5cdGlmICghYUlkZW50aWZpY2F0aW9uKSB7XG5cdFx0cmV0dXJuIEJ1dHRvblR5cGUuRW1waGFzaXplZDtcblx0fVxuXHRsZXQgc0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCBiSXNBbHdheXNEZWZhdWx0OiBib29sZWFuLFxuXHRcdHNIaWRkZW5TaW1wbGVQYXRoLFxuXHRcdHNIaWRkZW5FeHByZXNzaW9uID0gXCJcIjtcblx0YUlkZW50aWZpY2F0aW9uLmZvckVhY2goZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSkge1xuXHRcdGNvbnN0IG9Dcml0aWNhbGl0eVByb3BlcnR5ID0gb0RhdGFGaWVsZC5Dcml0aWNhbGl0eTtcblx0XHRjb25zdCBvRGF0YUZpZWxkSGlkZGVuID0gb0RhdGFGaWVsZFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0aWYgKG9EYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uXCIgJiYgIWJJc0Fsd2F5c0RlZmF1bHQgJiYgb0NyaXRpY2FsaXR5UHJvcGVydHkpIHtcblx0XHRcdGlmICghc0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uICYmIG9EYXRhRmllbGRIaWRkZW4gPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gaWYgRGF0YUZpZWxkIGlzIHNldCB0byBoaWRkZW4sIHdlIGNhbiBza2lwIG90aGVyIGNoZWNrcyBhbmQgcmV0dXJuIERlZmF1bHQgYnV0dG9uIHR5cGVcblx0XHRcdFx0c0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uID0gQnV0dG9uVHlwZS5FbXBoYXNpemVkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAob0RhdGFGaWVsZEhpZGRlbiAmJiBvRGF0YUZpZWxkSGlkZGVuLiRQYXRoKSB7XG5cdFx0XHRcdC8vIHdoZW4gdmlzaWJpbGl0eSBvZiBjcml0aWNhbCBidXR0b24gaXMgYmFzZWQgb24gcGF0aCwgY29sbGVjdCBhbGwgcGF0aHMgZm9yIGV4cHJlc3Npb25cblx0XHRcdFx0c0hpZGRlblNpbXBsZVBhdGggPSBvRGF0YUZpZWxkSGlkZGVuLiRQYXRoO1xuXHRcdFx0XHRpZiAoc0hpZGRlbkV4cHJlc3Npb24pIHtcblx0XHRcdFx0XHRzSGlkZGVuRXhwcmVzc2lvbiA9IHNIaWRkZW5FeHByZXNzaW9uICsgXCIgJiYgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c0hpZGRlbkV4cHJlc3Npb24gPSBzSGlkZGVuRXhwcmVzc2lvbiArIFwiJXtcIiArIHNIaWRkZW5TaW1wbGVQYXRoICsgXCJ9ID09PSB0cnVlXCI7XG5cdFx0XHRcdHNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiA9IFwiez0gKFwiICsgc0hpZGRlbkV4cHJlc3Npb24gKyBcIikgPyAnRW1waGFzaXplZCcgOiAnRGVmYXVsdCcgfVwiO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoIChvQ3JpdGljYWxpdHlQcm9wZXJ0eS4kRW51bU1lbWJlcikge1xuXHRcdFx0XHQvLyBzdXBwb3J0ZWQgY3JpdGljYWxpdHkgYXJlIFtQb3NpdGl2ZS8zLyczJ10gYW5kIFtOZWdhdGl2ZS8xLycxJ11cblx0XHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZS9OZWdhdGl2ZVwiOlxuXHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlXCI6XG5cdFx0XHRcdGNhc2UgXCIxXCI6XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0Y2FzZSBcIjNcIjpcblx0XHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRcdGlmICghb0RhdGFGaWVsZEhpZGRlbikge1xuXHRcdFx0XHRcdFx0c0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uID0gQnV0dG9uVHlwZS5EZWZhdWx0O1xuXHRcdFx0XHRcdFx0YklzQWx3YXlzRGVmYXVsdCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiA9IHNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiB8fCBCdXR0b25UeXBlLkRlZmF1bHQ7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0c0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uID0gQnV0dG9uVHlwZS5FbXBoYXNpemVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoKSB7XG5cdFx0XHRcdC8vIHdoZW4gQ3JpdGljYWxpdHkgaXMgc2V0IHVzaW5nIGEgcGF0aCwgdXNlIHRoZSBwYXRoIGZvciBkZWR1Y2luZyB0aGUgRW1waHNpemVkIHR5cGUgZm9yIGRlZmF1bHQgUHJpbWFyeSBBY3Rpb25cblx0XHRcdFx0Y29uc3Qgc0NvbWJpbmVkSGlkZGVuRXhwcmVzc2lvbiA9IHNIaWRkZW5FeHByZXNzaW9uID8gXCIhKFwiICsgc0hpZGRlbkV4cHJlc3Npb24gKyBcIikgJiYgXCIgOiBcIlwiO1xuXHRcdFx0XHRzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb24gPVxuXHRcdFx0XHRcdFwiez0gXCIgK1xuXHRcdFx0XHRcdHNDb21iaW5lZEhpZGRlbkV4cHJlc3Npb24gK1xuXHRcdFx0XHRcdFwiKCgke1wiICtcblx0XHRcdFx0XHRvQ3JpdGljYWxpdHlQcm9wZXJ0eS4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlJykgfHwgKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09ICcxJykgfHwgKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDEpIFwiICtcblx0XHRcdFx0XHRcInx8ICgke1wiICtcblx0XHRcdFx0XHRvQ3JpdGljYWxpdHlQcm9wZXJ0eS4kUGF0aCArXG5cdFx0XHRcdFx0XCJ9ID09PSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL1Bvc2l0aXZlJykgfHwgKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09ICczJykgfHwgKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09IDMpKSA/IFwiICtcblx0XHRcdFx0XHRcIidEZWZhdWx0J1wiICtcblx0XHRcdFx0XHRcIiA6IFwiICtcblx0XHRcdFx0XHRcIidFbXBoYXNpemVkJ1wiICtcblx0XHRcdFx0XHRcIiB9XCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiB8fCBCdXR0b25UeXBlLkVtcGhhc2l6ZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudEJpbmRpbmcgPSBmdW5jdGlvbiAoc1BhdGg6IGFueSkge1xuXHRjb25zdCBzTmF2aWdhdGlvblBhdGggPSBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChzUGF0aCk7XG5cdGlmIChzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gXCJ7cGF0aDonXCIgKyBzTmF2aWdhdGlvblBhdGggKyBcIid9XCI7XG5cdH0gZWxzZSB7XG5cdFx0Ly9ubyBuYXZpZ2F0aW9uIHByb3BlcnR5IG5lZWRzIGVtcHR5IG9iamVjdFxuXHRcdHJldHVybiBcIntwYXRoOiAnJ31cIjtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBkcmFmdCBwYXR0ZXJuIGlzIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gb0Fubm90YXRpb25zIEFubm90YXRpb25zIG9mIHRoZSBjdXJyZW50IGVudGl0eSBzZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBjaGVja0RyYWZ0U3RhdGUgPSBmdW5jdGlvbiAob0Fubm90YXRpb25zOiBhbnkpIHtcblx0aWYgKFxuXHRcdG9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdICYmXG5cdFx0b0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl1bXCJFZGl0QWN0aW9uXCJdXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIHZpc2liaWxpdHkgZm9yIHRoZSBTd2l0Y2hUb0FjdGl2ZSBidXR0b24gaW4gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvQW5ub3RhdGlvbnMgQW5ub3RhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hUb0FjdGl2ZVZpc2liaWxpdHkgPSBmdW5jdGlvbiAob0Fubm90YXRpb25zOiBhbnkpOiBhbnkge1xuXHRpZiAoY2hlY2tEcmFmdFN0YXRlKG9Bbm5vdGF0aW9ucykpIHtcblx0XHRyZXR1cm4gXCJ7PSAoJXtEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWV9KSA/ICggJHt1aT4vaXNFZGl0YWJsZX0gJiYgISR7dWk+Y3JlYXRlTW9kZX0gJiYgJXtEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWV9ICkgOiBmYWxzZSB9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBmb3IgdGhlIFN3aXRjaFRvRHJhZnQgYnV0dG9uIGluIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0Fubm90YXRpb25zIEFubm90YXRpb25zIG9mIHRoZSBjdXJyZW50IGVudGl0eSBzZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHRoZSBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0U3dpdGNoVG9EcmFmdFZpc2liaWxpdHkgPSBmdW5jdGlvbiAob0Fubm90YXRpb25zOiBhbnkpOiBhbnkge1xuXHRpZiAoY2hlY2tEcmFmdFN0YXRlKG9Bbm5vdGF0aW9ucykpIHtcblx0XHRyZXR1cm4gXCJ7PSAoJXtEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWV9KSA/ICggISgke3VpPi9pc0VkaXRhYmxlfSkgJiYgISR7dWk+Y3JlYXRlTW9kZX0gJiYgJHtIYXNEcmFmdEVudGl0eX0gJiYgJXtEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdElzQ3JlYXRlZEJ5TWV9ICkgOiBmYWxzZSB9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBmb3IgdGhlIFN3aXRjaERyYWZ0QW5kQWN0aXZlIGJ1dHRvbiBpbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9Bbm5vdGF0aW9ucyBBbm5vdGF0aW9ucyBvZiB0aGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN3aXRjaERyYWZ0QW5kQWN0aXZlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSk6IGFueSB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUob0Fubm90YXRpb25zKSkge1xuXHRcdHJldHVybiBcIns9ICgle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0pID8gKCAhJHt1aT5jcmVhdGVNb2RlfSAmJiAle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0gKSA6IGZhbHNlIH1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZmluZCBhbiBhY3Rpb24gZnJvbSB0aGUgYXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgJ2hlYWRlcicgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2UuXG4gKiBAcGFyYW0gc0FjdGlvblR5cGUgVGhlIGFjdGlvbiB0eXBlXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9uIHdpdGggdGhlIG1hdGNoaW5nIGFjdGlvbiB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgX2ZpbmRBY3Rpb24gPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBhbnlbXSwgc0FjdGlvblR5cGU6IHN0cmluZykge1xuXHRsZXQgb0FjdGlvbjtcblx0aWYgKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyAmJiBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0b0FjdGlvbiA9IGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvSGVhZGVyQWN0aW9uOiBhbnkpIHtcblx0XHRcdHJldHVybiBvSGVhZGVyQWN0aW9uLnR5cGUgPT09IHNBY3Rpb25UeXBlO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBvQWN0aW9uO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uRW5hYmxlZCA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24uZW5hYmxlZCA6IFwidHJ1ZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBmb3IgdGhlIERlbGV0ZSBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXREZWxldGVDb21tYW5kRXhlY3V0aW9uVmlzaWJsZSA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IG9EZWxldGVBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiU2Vjb25kYXJ5XCIpO1xuXHRyZXR1cm4gb0RlbGV0ZUFjdGlvbiA/IG9EZWxldGVBY3Rpb24udmlzaWJsZSA6IFwidHJ1ZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICd2aXNpYmxlJyBwcm9wZXJ0eSBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogYW55W10pIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24udmlzaWJsZSA6IFwidHJ1ZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmb3JtYXQgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBmb3IgdGhlIEVkaXQgYnV0dG9uIG9uIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGEgQ29tbWFuZCBFeGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBvbiB0aGUgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgZnJvbSB0aGUgY29udmVydGVyIG91dHB1dFxuICovXG5leHBvcnQgY29uc3QgZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25FbmFibGVkID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogYW55W10pIHtcblx0Y29uc3Qgb0VkaXRBY3Rpb24gPSBfZmluZEFjdGlvbihhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMsIFwiUHJpbWFyeVwiKTtcblx0cmV0dXJuIG9FZGl0QWN0aW9uID8gb0VkaXRBY3Rpb24uZW5hYmxlZCA6IFwidHJ1ZVwiO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIEVkaXRBY3Rpb24gZnJvbSB0aGUgRW50aXR5c2V0IGJhc2VkIG9uIERyYWZ0IG9yIHN0aWNreSBiYXNlZCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gW29FbnRpdHlTZXRdIFRoZSB2YWx1ZSBmcm9tIHRoZSBleHByZXNzaW9uLlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgYm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB2UmF3VmFsdWUgJiBvRHJhZnROb2RlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0QWN0aW9uID0gZnVuY3Rpb24gKG9FbnRpdHlTZXQ6IENvbnRleHQpIHtcblx0Y29uc3Qgc1BhdGggPSBvRW50aXR5U2V0LmdldFBhdGgoKSxcblx0XHRvQW5ub3RhdGlvbnMgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtzUGF0aH1AYCk7XG5cdGNvbnN0IGJEcmFmdFJvb3QgPSBvQW5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiKTtcblx0Y29uc3QgYlN0aWNreVNlc3Npb24gPSBvQW5ub3RhdGlvbnMuaGFzT3duUHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCIpO1xuXHRsZXQgc0FjdGlvbk5hbWU7XG5cdGlmIChiRHJhZnRSb290KSB7XG5cdFx0c0FjdGlvbk5hbWUgPSBvRW50aXR5U2V0LmdldE9iamVjdChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdC9FZGl0QWN0aW9uYCk7XG5cdH0gZWxzZSBpZiAoYlN0aWNreVNlc3Npb24pIHtcblx0XHRzQWN0aW9uTmFtZSA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWQvRWRpdEFjdGlvbmApO1xuXHR9XG5cdHJldHVybiAhc0FjdGlvbk5hbWUgPyBzQWN0aW9uTmFtZSA6IGAke3NQYXRofS8ke3NBY3Rpb25OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSwgb0ZpZWxkQ29udHJvbDogYW55KSB7XG5cdGxldCBiQ29tcHV0ZWQsIGJJbW11dGFibGUsIGJSZWFkT25seTtcblx0aWYgKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSkge1xuXHRcdGJDb21wdXRlZCA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXS5Cb29sID8gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdLkJvb2wgPT0gXCJ0cnVlXCIgOiB0cnVlO1xuXHR9XG5cdGlmIChvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdKSB7XG5cdFx0YkltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0uQm9vbCA/IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0uQm9vbCA9PSBcInRydWVcIiA6IHRydWU7XG5cdH1cblx0YlJlYWRPbmx5ID0gYkNvbXB1dGVkIHx8IGJJbW11dGFibGU7XG5cblx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRiUmVhZE9ubHkgPSBiUmVhZE9ubHkgfHwgb0ZpZWxkQ29udHJvbCA9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlL1JlYWRPbmx5XCI7XG5cdH1cblx0aWYgKGJSZWFkT25seSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMgPSBmdW5jdGlvbiAob0ZpZWxkQ29udHJvbDogYW55KSB7XG5cdGxldCBzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHk7XG5cdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0aWYgKChNYW5hZ2VkT2JqZWN0IGFzIGFueSkuYmluZGluZ1BhcnNlcihvRmllbGRDb250cm9sKSkge1xuXHRcdFx0c0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5ID0gXCIlXCIgKyBvRmllbGRDb250cm9sICsgXCIgPT09IDEgXCI7XG5cdFx0fVxuXHR9XG5cdGlmIChzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkpIHtcblx0XHRyZXR1cm4gXCJ7PSBcIiArIHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSArIFwiPyBmYWxzZSA6IHRydWUgfVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn07XG5cbi8qXG4gKiBGdW5jdGlvbiB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIGNoYXJ0IFRpdGxlIFByZXNzXG4gKlxuICogQGZ1bmN0aW9ud1xuICogQHBhcmFtIHtvQ29uZmlndXJhdGlvbn0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqICBAcGFyYW0ge29NYW5pZmVzdH0gW29NYW5pZmVzdF0gT3V0Ym91bmRzIGZyb20gbWFuaWZlc3RcbiAqIHJldHVybnMge1N0cmluZ30gW3NDb2xsZWN0aW9uTmFtZV0gQ29sbGVjdGlvbiBOYW1lIG9mIHRoZSBNaWNybyBDaGFydFxuICpcbiAqIHJldHVybnMge1N0cmluZ30gW0V4cHJlc3Npb25dIEhhbmRsZXIgRXhwcmVzc2lvbiBmb3IgdGhlIHRpdGxlIHByZXNzXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvck1pY3JvQ2hhcnRUaXRsZVByZXNzID0gZnVuY3Rpb24gKG9Db25maWd1cmF0aW9uOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb2xsZWN0aW9uTmFtZTogYW55KSB7XG5cdGlmIChvQ29uZmlndXJhdGlvbikge1xuXHRcdGlmIChcblx0XHRcdChvQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdICYmIG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSkgfHxcblx0XHRcdChvQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdICYmIG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSAmJiBvQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XCIuaGFuZGxlcnMub25EYXRhUG9pbnRUaXRsZVByZXNzZWQoJGNvbnRyb2xsZXIsICR7JHNvdXJjZT4vfSwnXCIgK1xuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShvTWFuaWZlc3RPdXRib3VuZCkgK1xuXHRcdFx0XHRcIicsJ1wiICtcblx0XHRcdFx0b0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdICtcblx0XHRcdFx0XCInLCdcIiArXG5cdFx0XHRcdHNDb2xsZWN0aW9uTmFtZSArXG5cdFx0XHRcdFwiJyApXCJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChvQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSB7XG5cdFx0XHRyZXR1cm4gXCIuaGFuZGxlcnMubmF2aWdhdGVUb1N1YlNlY3Rpb24oJGNvbnRyb2xsZXIsICdcIiArIEpTT04uc3RyaW5naWZ5KG9Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pICsgXCInKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcblxuLypcbiAqIEZ1bmN0aW9uIHRvIHJlbmRlciBDaGFydCBUaXRsZSBhcyBMaW5rXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29Db250cm9sQ29uZmlndXJhdGlvbn0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIHJldHVybnMge1N0cmluZ30gW3NLZXldIEZvciB0aGUgVGFyZ2V0T3V0Ym91bmQgYW5kIFRhcmdldFNlY3Rpb25cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNaWNyb0NoYXJ0VGl0bGVBc0xpbmsgPSBmdW5jdGlvbiAob0NvbnRyb2xDb25maWd1cmF0aW9uOiBhbnkpIHtcblx0aWYgKFxuXHRcdG9Db250cm9sQ29uZmlndXJhdGlvbiAmJlxuXHRcdChvQ29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSB8fCAob0NvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgb0NvbnRyb2xDb25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pKVxuXHQpIHtcblx0XHRyZXR1cm4gXCJFeHRlcm5hbFwiO1xuXHR9IGVsc2UgaWYgKG9Db250cm9sQ29uZmlndXJhdGlvbiAmJiBvQ29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkge1xuXHRcdHJldHVybiBcIkluUGFnZVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxufTtcblxuLyogR2V0IGdyb3VwSWQgZnJvbSBjb250cm9sIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogQHBhcmFtIHtTdHJpbmd9IFtzQW5ub3RhdGlvblBhdGhdIEFubm90YXRpb24gUGF0aCBmb3IgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGdldCB0aGUgZ3JvdXBJZCBmb3IgRGF0YVBvaW50cyBhbmQgTWljcm9DaGFydHMgaW4gdGhlIEhlYWRlci5cbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRHcm91cElkRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChvQ29uZmlndXJhdGlvbnM6IGFueSwgc0Fubm90YXRpb25QYXRoOiBhbnksIHNEZWZhdWx0R3JvdXBJZD86IGFueSkge1xuXHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzQW5ub3RhdGlvblBhdGhdLFxuXHRcdGFBdXRvUGF0dGVybnMgPSBbXCJIZXJvZXNcIiwgXCJEZWNvcmF0aW9uXCIsIFwiV29ya2Vyc1wiLCBcIkxvbmdSdW5uZXJzXCJdO1xuXHRsZXQgc0dyb3VwSWQgPSBzRGVmYXVsdEdyb3VwSWQ7XG5cdGlmIChcblx0XHRvQ29uZmlndXJhdGlvbiAmJlxuXHRcdG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkICYmXG5cdFx0YUF1dG9QYXR0ZXJucy5zb21lKGZ1bmN0aW9uIChhdXRvUGF0dGVybjogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gYXV0b1BhdHRlcm4gPT09IG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkO1xuXHRcdH0pXG5cdCkge1xuXHRcdHNHcm91cElkID0gXCIkYXV0by5cIiArIG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkO1xuXHR9XG5cdHJldHVybiBzR3JvdXBJZDtcbn07XG5cbi8qXG4gKiBHZXQgQ29udGV4dCBCaW5kaW5nIHdpdGggZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gW3NLZXldIEFubm90YXRpb24gUGF0aCBmb3Igb2YgdGhlIGNvbmZpZ3VyYXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVc2VkIHRvIGdldCB0aGUgYmluZGluZyBmb3IgRGF0YVBvaW50cyBpbiB0aGUgSGVhZGVyLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgPSBmdW5jdGlvbiAob0NvbmZpZ3VyYXRpb25zOiBhbnksIHNLZXk6IGFueSkge1xuXHRjb25zdCBzR3JvdXBJZCA9IGdldEdyb3VwSWRGcm9tQ29uZmlnKG9Db25maWd1cmF0aW9ucywgc0tleSk7XG5cdGxldCBzQmluZGluZztcblx0aWYgKHNHcm91cElkKSB7XG5cdFx0c0JpbmRpbmcgPSBcInsgcGF0aCA6ICcnLCBwYXJhbWV0ZXJzIDogeyAkJGdyb3VwSWQgOiAnXCIgKyBzR3JvdXBJZCArIFwiJyB9IH1cIjtcblx0fVxuXHRyZXR1cm4gc0JpbmRpbmc7XG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGEgRmllbGRHcm91cCBjb25zaXN0cyBvZiBvbmx5IDEgRGF0YUZpZWxkIHdpdGggTXVsdGlMaW5lIFRleHQgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gYUZvcm1FbGVtZW50cyBBIGNvbGxlY3Rpb24gb2YgZm9ybSBlbGVtZW50cyB1c2VkIGluIHRoZSBjdXJyZW50IGZpZWxkIGdyb3VwXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgb25seSAxIGRhdGEgZmllbGQgd2l0aCBNdWx0aWxpbmUgVGV4dCBhbm5vdGF0aW9uIGV4aXN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGRvZXNGaWVsZEdyb3VwQ29udGFpbk9ubHlPbmVNdWx0aUxpbmVEYXRhRmllbGQgPSBmdW5jdGlvbiAoYUZvcm1FbGVtZW50czogYW55W10pIHtcblx0cmV0dXJuIGFGb3JtRWxlbWVudHMgJiYgYUZvcm1FbGVtZW50cy5sZW5ndGggPT09IDEgJiYgISFhRm9ybUVsZW1lbnRzWzBdLmlzVmFsdWVNdWx0aWxpbmVUZXh0O1xufTtcblxuLypcbiAqIEdldCBWaXNpYmxpdHkgb2YgYnJlYWRjcnVtYnMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29WaWV3RGF0YV0gVmlld0RhdGEgbW9kZWxcbiAqIHJldHVybnMgeyp9IEV4cHJlc3Npb24gb3IgYm9vbGVhblxuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsZUV4cHJlc3Npb25Gb3JCcmVhZGNydW1icyA9IGZ1bmN0aW9uIChvVmlld0RhdGE6IGFueSkge1xuXHRyZXR1cm4gb1ZpZXdEYXRhLnNob3dCcmVhZENydW1icyAmJiBvVmlld0RhdGEuZmNsRW5hYmxlZCAhPT0gdW5kZWZpbmVkID8gXCJ7ZmNsaGVscGVyPi9icmVhZENydW1iSXNWaXNpYmxlfVwiIDogb1ZpZXdEYXRhLnNob3dCcmVhZENydW1icztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkgPSBmdW5jdGlvbiAodmlld0RhdGE6IGFueSkge1xuXHRsZXQgc1NoYXJlQnV0dG9uVmlzaWJpbGl0eUV4cCA9IFwiISR7dWk+Y3JlYXRlTW9kZX1cIjtcblx0aWYgKHZpZXdEYXRhLmZjbEVuYWJsZWQpIHtcblx0XHRzU2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwID0gXCIke2ZjbGhlbHBlcj4vc2hvd1NoYXJlSWNvbn0gJiYgXCIgKyBzU2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwO1xuXHR9XG5cdHJldHVybiBcIns9IFwiICsgc1NoYXJlQnV0dG9uVmlzaWJpbGl0eUV4cCArIFwiIH1cIjtcbn07XG5cbi8qXG4gKiBHZXQgdmlzaWJsaXR5IGZvciBlZGl0YWJsZSBoZWFkZXIgZmFjZXQuXG4gKlxuICogSWYgZWl0aGVyIHRoZSB0aXRsZSBvciBkZXNjcmlwdGlvbiBmaWVsZCBmcm9tIHRoZSBoZWFkZXIgYW5ub3RhdGlvbnMgYXJlIGVkaXRhYmxlLCB0aGVuIHRoZVxuICogZWRpdGFibGUgaGVhZGVyIGZhY2V0IGlzIHZpc2libGUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Bbm5vdGF0aW9uc10gQW5ub3RhdGlvbnMgb2JqZWN0IGZvciBnaXZlbiBlbnRpdHkgc2V0XG4gKiBAcGFyYW0ge29iamVjdH0gW29GaWVsZENvbnRyb2xdIGZpZWxkIGNvbnRyb2xcbiAqIHJldHVybnMgeyp9ICBiaW5kaW5nIGV4cHJlc3Npb24gb3IgYm9vbGVhbiB2YWx1ZSByZXNvbHZlZCBmb3JtIGZ1bmNpdG9ucyBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zIGFuZCBpc1JlYWRPbmx5RnJvbUR5bmFtaWNBbm5vdGF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgZ2V0VmlzaWJsaXR5T2ZIZWFkZXJGYWNldCA9IGZ1bmN0aW9uIChcblx0b1RpdGxlQW5ub3RhdGlvbnM6IGFueSxcblx0b0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnM6IGFueSxcblx0b0ZpZWxkVGl0bGVGaWVsZENvbnRyb2w6IGFueSxcblx0b0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2w6IGFueVxuKSB7XG5cdC8vIENoZWNrIEFubm90YXRpb25zIGZvciBUaXRsZSBGaWVsZFxuXHRjb25zdCBiSXNUaXRsZVJlYWRPbmx5ID0gaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyhvVGl0bGVBbm5vdGF0aW9ucywgb0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpO1xuXHRjb25zdCB0aXRsZUV4cHJlc3Npb24gPSByZWFkT25seUV4cHJlc3Npb25Gcm9tRHluYW1pY0Fubm90YXRpb25zKG9GaWVsZFRpdGxlRmllbGRDb250cm9sKTtcblx0Ly8gVGhlcmUgaXMgbm8gZXhwcmVzc2lvbiBhbmQgdGhlIHRpdGxlIGlzIG5vdCByZWFkeSBvbmx5LCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGFuIGVkaXRhYmxlIGhlYWRlclxuXHRpZiAoIWJJc1RpdGxlUmVhZE9ubHkgJiYgIXRpdGxlRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gQ2hlY2sgQW5ub3RhdGlvbnMgZm9yIERlc2NyaXB0aW9uIEZpZWxkXG5cdGNvbnN0IGJJc0Rlc2NyaXB0aW9uUmVhZE9ubHkgPSBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zKG9EZXNjcmlwdGlvbkFubm90YXRpb25zLCBvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbCk7XG5cdGNvbnN0IGRlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgZGVzY3JpcHRpb24gaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzRGVzY3JpcHRpb25SZWFkT25seSAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBCb3RoIHRpdGxlIGFuZCBkZXNjcmlwdGlvbiBhcmUgbm90IGVkaXRhYmxlIGFuZCB0aGVyZSBhcmUgbm8gZHluYW1pYyBhbm5vdGF0aW9uc1xuXHRpZiAoYklzVGl0bGVSZWFkT25seSAmJiBiSXNEZXNjcmlwdGlvblJlYWRPbmx5ICYmICF0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8vIE5vdyBjb21iaW5lIGV4cHJlc3Npb25zXG5cdGlmICh0aXRsZUV4cHJlc3Npb24gJiYgIWRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiB0aXRsZUV4cHJlc3Npb247XG5cdH0gZWxzZSBpZiAoIXRpdGxlRXhwcmVzc2lvbiAmJiBkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gZGVzY3JpcHRpb25FeHByZXNzaW9uO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjb21iaW5lVGl0bGVBbmREZXNjcmlwdGlvbkV4cHJlc3Npb24ob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wsIG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChvVGl0bGVGaWVsZENvbnRyb2w6IGFueSwgb0Rlc2NyaXB0aW9uRmllbGRDb250cm9sOiBhbnkpIHtcblx0Ly8gSWYgYm90aCBoZWFkZXIgYW5kIHRpdGxlIGZpZWxkIGFyZSBiYXNlZCBvbiBkeW5tYWljIGZpZWxkIGNvbnRyb2wsIHRoZSBlZGl0YWJsZSBoZWFkZXJcblx0Ly8gaXMgdmlzaWJsZSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgaXMgbm90IHJlYWR5IG9ubHlcblx0cmV0dXJuIFwiez0gJVwiICsgb1RpdGxlRmllbGRDb250cm9sICsgXCIgPT09IDEgPyAoICVcIiArIG9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbCArIFwiID09PSAxID8gZmFsc2UgOiB0cnVlICkgOiB0cnVlIH1cIjtcbn07XG5cbi8qXG4gKiBHZXQgRXhwcmVzc2lvbiBvZiBwcmVzcyBldmVudCBvZiBkZWxldGUgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRGVsZXRlID0gZnVuY3Rpb24gKHNFbnRpdHlTZXROYW1lOiBhbnkpIHtcblx0Y29uc3Qgc0RlbGV0YWJsZUNvbnRleHRzID0gXCIkeyR2aWV3Pi9nZXRCaW5kaW5nQ29udGV4dH1cIixcblx0XHRzVGl0bGUgPSBcIiR7JHZpZXc+LyNmZTo6T2JqZWN0UGFnZS9nZXRIZWFkZXJUaXRsZS9nZXRFeHBhbmRlZEhlYWRpbmcvZ2V0SXRlbXMvMS9nZXRUZXh0fVwiLFxuXHRcdHNEZXNjcmlwdGlvbiA9IFwiJHskdmlldz4vI2ZlOjpPYmplY3RQYWdlL2dldEhlYWRlclRpdGxlL2dldEV4cGFuZGVkQ29udGVudC8wL2dldEl0ZW1zLzAvZ2V0VGV4dH1cIjtcblx0Y29uc3Qgb1BhcmFtcyA9IHtcblx0XHR0aXRsZTogc1RpdGxlLFxuXHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpLFxuXHRcdGRlc2NyaXB0aW9uOiBzRGVzY3JpcHRpb25cblx0fTtcblx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFwiLmVkaXRGbG93LmRlbGV0ZURvY3VtZW50XCIsIHNEZWxldGFibGVDb250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpKTtcbn07XG5cbi8qXG4gKiBHZXQgRXhwcmVzc2lvbiBvZiBwcmVzcyBldmVudCBvZiBFZGl0IGJ1dHRvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0RhdGFGaWVsZF0gRGF0YSBmaWVsZCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc0VudGl0eVNldE5hbWVdIEVudGl0eSBzZXQgbmFtZVxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyQWN0aW9uXSBIZWFkZXIgYWN0aW9uIG9iamVjdFxuICogcmV0dXJucyB7c3RyaW5nfSAgYmluZGluZyBleHByZXNzaW9uIC8gZnVuY3Rpb24gc3RyaW5nIGdlbmVyYXRlZCBmcm9tIGNvbW1hbmhlbHBlcidzIGZ1bmN0aW9uIGdlbmVyYXRlRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByZXNzRXhwcmVzc2lvbkZvckVkaXQgPSBmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55LCBzRW50aXR5U2V0TmFtZTogYW55LCBvSGVhZGVyQWN0aW9uOiBhbnkpIHtcblx0Y29uc3Qgc0VkaXRhYmxlQ29udGV4dHMgPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdHNEYXRhRmllbGRFbnVtTWVtYmVyID0gb0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJiBvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZ1tcIiRFbnVtTWVtYmVyXCJdLFxuXHRcdHNJbnZvY2F0aW9uR3JvdXAgPSBzRGF0YUZpZWxkRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiO1xuXHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdGNvbnRleHRzOiBcIiR7JHZpZXc+L2dldEJpbmRpbmdDb250ZXh0fVwiLFxuXHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpLFxuXHRcdGludm9jYXRpb25Hcm91cGluZzogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzSW52b2NhdGlvbkdyb3VwKSxcblx0XHRtb2RlbDogXCIkeyRzb3VyY2U+L30uZ2V0TW9kZWwoKVwiLFxuXHRcdGxhYmVsOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246XG5cdFx0XHRvSGVhZGVyQWN0aW9uICYmIG9IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uID8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIHNFZGl0YWJsZUNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLypcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGV4cHJlc3Npb24gZm9yIHRoZSAncHJlc3MnIGV2ZW50IGZvciBmb290ZXIgYW5ub3RhdGlvbiBhY3Rpb25zXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29EYXRhRmllbGRdIERhdGEgZmllbGQgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW3NFbnRpdHlTZXROYW1lXSBFbnRpdHkgc2V0IG5hbWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0hlYWRlckFjdGlvbl0gSGVhZGVyIGFjdGlvbiBvYmplY3RcbiAqIHJldHVybnMge3N0cmluZ30gIEJpbmRpbmcgZXhwcmVzc2lvbiBvciBmdW5jdGlvbiBzdHJpbmcgdGhhdCBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgQ29tbW9uaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRm9vdGVyQW5ub3RhdGlvbkFjdGlvbiA9IGZ1bmN0aW9uIChvRGF0YUZpZWxkOiBhbnksIHNFbnRpdHlTZXROYW1lOiBhbnksIG9IZWFkZXJBY3Rpb246IGFueSkge1xuXHRjb25zdCBzQWN0aW9uQ29udGV4dHMgPSBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5BY3Rpb24pLFxuXHRcdHNEYXRhRmllbGRFbnVtTWVtYmVyID0gb0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZyAmJiBvRGF0YUZpZWxkLkludm9jYXRpb25Hcm91cGluZ1tcIiRFbnVtTWVtYmVyXCJdLFxuXHRcdHNJbnZvY2F0aW9uR3JvdXAgPSBzRGF0YUZpZWxkRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5PcGVyYXRpb25Hcm91cGluZ1R5cGUvQ2hhbmdlU2V0XCIgPyBcIkNoYW5nZVNldFwiIDogXCJJc29sYXRlZFwiO1xuXHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdGNvbnRleHRzOiBcIiR7JHZpZXc+LyNmZTo6T2JqZWN0UGFnZS99LmdldEJpbmRpbmdDb250ZXh0KClcIixcblx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNFbnRpdHlTZXROYW1lKSxcblx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0ludm9jYXRpb25Hcm91cCksXG5cdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRsYWJlbDogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuTGFiZWwsIHRydWUpLFxuXHRcdGlzTmF2aWdhYmxlOiBvSGVhZGVyQWN0aW9uICYmIG9IZWFkZXJBY3Rpb24uaXNOYXZpZ2FibGUsXG5cdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOlxuXHRcdFx0b0hlYWRlckFjdGlvbiAmJiBvSGVhZGVyQWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiA/IGAnJHtvSGVhZGVyQWN0aW9uLmRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbn0nYCA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXCIuaGFuZGxlcnMub25DYWxsQWN0aW9uXCIsIFwiJHskdmlldz4vfVwiLCBzQWN0aW9uQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSk7XG59O1xuXG4vKlxuICogR2V0cyB0aGUgYmluZGluZyBvZiB0aGUgY29udGFpbmVyIEhCb3ggZm9yIHRoZSBoZWFkZXIgZmFjZXQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge29iamVjdH0gW29Db250cm9sQ29uZmlndXJhdGlvbl0gVGhlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3JtIG9mIHRoZSB2aWV3RGF0YSBtb2RlbFxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyRmFjZXRdIFRoZSBvYmplY3Qgb2YgdGhlIGhlYWRlciBmYWNldFxuICogcmV0dXJucyB7Kn0gIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZnJvbSBmdW5jdGlvbiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0YXNoYWJsZUhCb3hCaW5kaW5nID0gZnVuY3Rpb24gKG9Db250cm9sQ29uZmlndXJhdGlvbjogYW55LCBvSGVhZGVyRmFjZXQ6IGFueSkge1xuXHRpZiAob0hlYWRlckZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldCAmJiBvSGVhZGVyRmFjZXQuRmFjZXQudGFyZ2V0QW5ub3RhdGlvblR5cGUgPT09IFwiRGF0YVBvaW50XCIpIHtcblx0XHRyZXR1cm4gZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyhvQ29udHJvbENvbmZpZ3VyYXRpb24sIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVmFsdWUpO1xuXHR9XG59O1xuXG4vKlxuICogR2V0cyB0aGUgJ1ByZXNzJyBldmVudCBleHByZXNzaW9uIGZvciB0aGUgZXh0ZXJuYWwgYW5kIGludGVybmFsIGRhdGEgcG9pbnQgbGluay5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0NvbmZpZ3VyYXRpb25dIENvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29NYW5pZmVzdE91dGJvdW5kXSBPdXRib3VuZHMgZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7c3RyaW5nfSBUaGUgcnVudGltZSBiaW5kaW5nIG9mIHRoZSAnUHJlc3MnIGV2ZW50XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JMaW5rID0gZnVuY3Rpb24gKG9Db25maWd1cmF0aW9uOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnkpIHtcblx0aWYgKG9Db25maWd1cmF0aW9uKSB7XG5cdFx0aWYgKG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgb0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkRhdGFQb2ludFRpdGxlUHJlc3NlZCgkY29udHJvbGxlciwgJHskc291cmNlPn0sIFwiICtcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkob01hbmlmZXN0T3V0Ym91bmQpICtcblx0XHRcdFx0XCIsXCIgK1xuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShvQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0pICtcblx0XHRcdFx0XCIpXCJcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChvQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSB7XG5cdFx0XHRyZXR1cm4gXCIuaGFuZGxlcnMubmF2aWdhdGVUb1N1YlNlY3Rpb24oJGNvbnRyb2xsZXIsICdcIiArIEpTT04uc3RyaW5naWZ5KG9Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pICsgXCInKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufTtcbiJdfQ==
|
|
873
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibUxpYnJhcnkiLCJnZXRFeHByZXNzaW9uRm9yVGl0bGUiLCJvSGVhZGVySW5mbyIsIm9WaWV3RGF0YSIsImZ1bGxDb250ZXh0UGF0aCIsIm9EcmFmdFJvb3QiLCJ0aXRsZU5vSGVhZGVySW5mbyIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJyZXNvdXJjZUJ1bmRsZSIsInVuZGVmaW5lZCIsImVudGl0eVNldCIsInRpdGxlV2l0aEhlYWRlckluZm8iLCJvRW1wdHlIZWFkZXJJbmZvVGl0bGUiLCJUaXRsZSIsIlZhbHVlIiwidGl0bGVGb3JBY3RpdmVIZWFkZXJOb0hlYWRlckluZm8iLCJ0aXRsZVZhbHVlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIlRleHQiLCJVSSIsIlRleHRBcnJhbmdlbWVudCIsImFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24iLCJmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5IiwiY3JlYXRlTW9kZVRpdGxlIiwiVHlwZU5hbWUiLCJjb25jYXQiLCJ0b1N0cmluZyIsImFjdGl2ZUV4cHJlc3Npb24iLCJFbnRpdHkiLCJJc0FjdGl2ZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwiYW5kIiwib3IiLCJJc0NyZWF0ZU1vZGVTdGlja3kiLCJJc0NyZWF0ZU1vZGUiLCJpc0VtcHR5IiwiZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uIiwicGF0aEluTW9kZWwiLCJEZXNjcmlwdGlvbiIsImdldEV4cHJlc3Npb25Gb3JTYXZlQnV0dG9uIiwic2F2ZUJ1dHRvblRleHQiLCJjcmVhdGVCdXR0b25UZXh0Iiwic2F2ZUV4cHJlc3Npb24iLCJzdGFydGluZ0VudGl0eVNldCIsIlNlc3Npb24iLCJTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiRHJhZnQiLCJJc05ld09iamVjdCIsImdldEZvb3RlclZpc2libGUiLCJmb290ZXJBY3Rpb25zIiwiZGF0YUZpZWxkcyIsIm1hbmlmZXN0QWN0aW9ucyIsImZpbHRlciIsImFjdGlvbiIsImlzTWFuaWZlc3RBY3Rpb24iLCJjdXN0b21BY3Rpb25WaXNpYmlsaXR5IiwibGVuZ3RoIiwiY3VzdG9tQWN0aW9uSW5kaXZpZHVhbFZpc2liaWxpdHkiLCJtYXAiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsInZpc2libGUiLCJhbm5vdGF0aW9uQWN0aW9uVmlzaWJpbGl0eSIsImdldERhdGFGaWVsZEJhc2VkRm9vdGVyVmlzaWJpbGl0eSIsImFEYXRhRmllbGRzIiwiYkNvbnNpZGVyRWRpdGFibGUiLCJzSGlkZGVuRXhwcmVzc2lvbiIsInNTZW1pSGlkZGVuRXhwcmVzc2lvbiIsImFIaWRkZW5BY3Rpb25QYXRoIiwiaSIsIm9EYXRhRmllbGQiLCIkVHlwZSIsIkRldGVybWluaW5nIiwiaGlkZGVuRXhwcmVzc2lvbiIsIiRQYXRoIiwiaW5kZXhPZiIsInB1c2giLCJpbmRleCIsIm9BY3Rpb24iLCJhQWN0aW9ucyIsInR5cGUiLCJidWlsZEVtcGhhc2l6ZWRCdXR0b25FeHByZXNzaW9uIiwiYUlkZW50aWZpY2F0aW9uIiwiRW1waGFzaXplZCIsInNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiIsImJJc0Fsd2F5c0RlZmF1bHQiLCJzSGlkZGVuU2ltcGxlUGF0aCIsImZvckVhY2giLCJvQ3JpdGljYWxpdHlQcm9wZXJ0eSIsIkNyaXRpY2FsaXR5Iiwib0RhdGFGaWVsZEhpZGRlbiIsIiRFbnVtTWVtYmVyIiwiRGVmYXVsdCIsInNDb21iaW5lZEhpZGRlbkV4cHJlc3Npb24iLCJnZXRFbGVtZW50QmluZGluZyIsInNQYXRoIiwic05hdmlnYXRpb25QYXRoIiwiT0RhdGFNb2RlbEFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImNoZWNrRHJhZnRTdGF0ZSIsIm9Bbm5vdGF0aW9ucyIsImdldFN3aXRjaFRvQWN0aXZlVmlzaWJpbGl0eSIsImdldFN3aXRjaFRvRHJhZnRWaXNpYmlsaXR5IiwiZ2V0U3dpdGNoRHJhZnRBbmRBY3RpdmVWaXNpYmlsaXR5IiwiX2ZpbmRBY3Rpb24iLCJhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMiLCJzQWN0aW9uVHlwZSIsImZpbmQiLCJvSGVhZGVyQWN0aW9uIiwiZ2V0RGVsZXRlQ29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJvRGVsZXRlQWN0aW9uIiwiZW5hYmxlZCIsImdldERlbGV0ZUNvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwiZ2V0RWRpdENvbW1hbmRFeGVjdXRpb25WaXNpYmxlIiwib0VkaXRBY3Rpb24iLCJnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQiLCJnZXRFZGl0QWN0aW9uIiwib0VudGl0eVNldCIsImdldFBhdGgiLCJnZXRPYmplY3QiLCJiRHJhZnRSb290IiwiaGFzT3duUHJvcGVydHkiLCJiU3RpY2t5U2Vzc2lvbiIsInNBY3Rpb25OYW1lIiwiaXNSZWFkT25seUZyb21TdGF0aWNBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJiQ29tcHV0ZWQiLCJiSW1tdXRhYmxlIiwiYlJlYWRPbmx5IiwiQm9vbCIsInJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMiLCJzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkiLCJNYW5hZ2VkT2JqZWN0IiwiYmluZGluZ1BhcnNlciIsImdldEV4cHJlc3Npb25Gb3JNaWNyb0NoYXJ0VGl0bGVQcmVzcyIsIm9Db25maWd1cmF0aW9uIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29sbGVjdGlvbk5hbWUiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0TWljcm9DaGFydFRpdGxlQXNMaW5rIiwib0NvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0R3JvdXBJZEZyb21Db25maWciLCJvQ29uZmlndXJhdGlvbnMiLCJzQW5ub3RhdGlvblBhdGgiLCJzRGVmYXVsdEdyb3VwSWQiLCJhQXV0b1BhdHRlcm5zIiwic0dyb3VwSWQiLCJyZXF1ZXN0R3JvdXBJZCIsInNvbWUiLCJhdXRvUGF0dGVybiIsImdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWciLCJzS2V5Iiwic0JpbmRpbmciLCJkb2VzRmllbGRHcm91cENvbnRhaW5Pbmx5T25lTXVsdGlMaW5lRGF0YUZpZWxkIiwiYUZvcm1FbGVtZW50cyIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiZ2V0VmlzaWJsZUV4cHJlc3Npb25Gb3JCcmVhZGNydW1icyIsInNob3dCcmVhZENydW1icyIsImZjbEVuYWJsZWQiLCJnZXRTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3RGF0YSIsInNTaGFyZUJ1dHRvblZpc2liaWxpdHlFeHAiLCJnZXRWaXNpYmxpdHlPZkhlYWRlckZhY2V0Iiwib1RpdGxlQW5ub3RhdGlvbnMiLCJvRGVzY3JpcHRpb25Bbm5vdGF0aW9ucyIsIm9GaWVsZFRpdGxlRmllbGRDb250cm9sIiwib0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wiLCJiSXNUaXRsZVJlYWRPbmx5IiwidGl0bGVFeHByZXNzaW9uIiwiYklzRGVzY3JpcHRpb25SZWFkT25seSIsImRlc2NyaXB0aW9uRXhwcmVzc2lvbiIsImNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbiIsIm9UaXRsZUZpZWxkQ29udHJvbCIsIm9EZXNjcmlwdGlvbkZpZWxkQ29udHJvbCIsImdldFByZXNzRXhwcmVzc2lvbkZvckRlbGV0ZSIsInNFbnRpdHlTZXROYW1lIiwic0RlbGV0YWJsZUNvbnRleHRzIiwic1RpdGxlIiwic0Rlc2NyaXB0aW9uIiwib1BhcmFtcyIsInRpdGxlIiwiZW50aXR5U2V0TmFtZSIsIkNvbW1vbkhlbHBlciIsImFkZFNpbmdsZVF1b3RlcyIsImRlc2NyaXB0aW9uIiwiZ2VuZXJhdGVGdW5jdGlvbiIsIm9iamVjdFRvU3RyaW5nIiwiZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCIsInNFZGl0YWJsZUNvbnRleHRzIiwiQWN0aW9uIiwic0RhdGFGaWVsZEVudW1NZW1iZXIiLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJzSW52b2NhdGlvbkdyb3VwIiwiY29udGV4dHMiLCJpbnZvY2F0aW9uR3JvdXBpbmciLCJtb2RlbCIsImxhYmVsIiwiTGFiZWwiLCJpc05hdmlnYWJsZSIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImdldFByZXNzRXhwcmVzc2lvbkZvckZvb3RlckFubm90YXRpb25BY3Rpb24iLCJzQWN0aW9uQ29udGV4dHMiLCJnZXRTdGFzaGFibGVIQm94QmluZGluZyIsIm9IZWFkZXJGYWNldCIsIkZhY2V0IiwidGFyZ2V0QW5ub3RhdGlvblR5cGUiLCJ0YXJnZXRBbm5vdGF0aW9uVmFsdWUiLCJnZXRQcmVzc0V4cHJlc3Npb25Gb3JMaW5rIiwiZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlIiwiZGF0YUZpZWxkIiwidGFyZ2V0T2JqZWN0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlVGVtcGxhdGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGb3JtYXR0ZXJzIGZvciB0aGUgT2JqZWN0IFBhZ2VcbmltcG9ydCB7IEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZFR5cGVzLCBIZWFkZXJJbmZvVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zLCBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbnZlcnRlckFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IERyYWZ0LCBFbnRpdHksIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbmNhdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzRW1wdHksXG5cdG9yLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZ1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGFkZFRleHRBcnJhbmdlbWVudFRvQmluZGluZ0V4cHJlc3Npb24sIGZvcm1hdFZhbHVlUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBtTGlicmFyeSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBPRGF0YU1vZGVsQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5cbmNvbnN0IEJ1dHRvblR5cGUgPSBtTGlicmFyeS5CdXR0b25UeXBlO1xuXG50eXBlIFZpZXdEYXRhID0ge1xuXHRyZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGU7XG5cdGVudGl0eVNldDogc3RyaW5nO1xufTtcblxuLy9gYGBtZXJtYWlkXG4vLyBncmFwaCBURFxuLy8gQVtPYmplY3QgUGFnZSBUaXRsZV0gLS0+fEdldCBEYXRhRmllbGQgVmFsdWV8IEN7RXZhbHVhdGUgQ3JlYXRlIE1vZGV9XG4vLyBDIC0tPnxJbiBDcmVhdGUgTW9kZXwgRHtJcyBEYXRhRmllbGQgVmFsdWUgZW1wdHl9XG4vLyBEIC0tPnxZZXN8IEZ7SXMgdGhlcmUgYSBUeXBlTmFtZX1cbi8vIEYgLS0+fFllc3wgR1tJcyB0aGVyZSBhbiBjdXN0b20gdGl0bGVdXG4vLyBHIC0tPnxZZXN8IEcxW1Nob3cgdGhlIGN1c3RvbSB0aXRsZSArICdUeXBlTmFtZSddXG4vLyBHIC0tPnxOb3wgRzJbRGlzcGxheSB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnXVxuLy8gRiAtLT58Tm98IEhbSXMgdGhlcmUgYSBjdXN0b20gdGl0bGVdXG4vLyBIIC0tPnxZZXN8IElbU2hvdyB0aGUgY3VzdG9tIHRpdGxlXVxuLy8gSCAtLT58Tm98IEpbU2hvdyB0aGUgZGVmYXVsdCAnVW5hbW5lZCBPYmplY3QnXVxuLy8gRCAtLT58Tm98IEVcbi8vIEMgLS0+fE5vdCBpbiBjcmVhdGUgbW9kZXwgRVtTaG93IERhdGFGaWVsZCBWYWx1ZV1cbi8vIGBgYFxuLyoqXG4gKiBDb21wdXRlIHRoZSB0aXRsZSBmb3IgdGhlIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gb1ZpZXdEYXRhIFRoZSB2aWV3IGRhdGEgb2JqZWN0IHdlJ3JlIGN1cnJlbnRseSBvblxuICogQHBhcmFtIGZ1bGxDb250ZXh0UGF0aCBUaGUgZnVsbCBjb250ZXh0IHBhdGggdXNlZCB0byByZWFjaCB0aGF0IG9iamVjdCBwYWdlXG4gKiBAcGFyYW0gb0RyYWZ0Um9vdFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIG9iamVjdCBwYWdlIHRpdGxlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yVGl0bGUgPSBmdW5jdGlvbiAoXG5cdG9IZWFkZXJJbmZvOiBIZWFkZXJJbmZvVHlwZSB8IHVuZGVmaW5lZCxcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0ZnVsbENvbnRleHRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRvRHJhZnRSb290OiBPYmplY3QgfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgdGl0bGVOb0hlYWRlckluZm8gPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfTkVXX09CSkVDVFwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUsIHVuZGVmaW5lZCwgb1ZpZXdEYXRhLmVudGl0eVNldCk7XG5cblx0Y29uc3QgdGl0bGVXaXRoSGVhZGVySW5mbyA9IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFxuXHRcdFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRVwiLFxuXHRcdG9WaWV3RGF0YS5yZXNvdXJjZUJ1bmRsZSxcblx0XHR1bmRlZmluZWQsXG5cdFx0b1ZpZXdEYXRhLmVudGl0eVNldFxuXHQpO1xuXG5cdGNvbnN0IG9FbXB0eUhlYWRlckluZm9UaXRsZSA9XG5cdFx0b0hlYWRlckluZm8/LlRpdGxlID09PSB1bmRlZmluZWQgfHwgKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBhbnkpID09PSBcIlwiIHx8IChvSGVhZGVySW5mbz8uVGl0bGUgYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZSA9PT0gXCJcIjtcblxuXHRjb25zdCB0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyA9ICFvRW1wdHlIZWFkZXJJbmZvVGl0bGVcblx0XHQ/IENvbW1vblV0aWxzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9BTk5PVEFUSU9OX0hFTFBFUl9ERUZBVUxUX09CSkVDVF9QQUdFX0hFQURFUl9USVRMRV9OT19IRUFERVJfSU5GT1wiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpXG5cdFx0OiBcIlwiO1xuXG5cdGxldCB0aXRsZVZhbHVlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbigob0hlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZFR5cGVzKT8uVmFsdWUpO1xuXHRpZiAoKG9IZWFkZXJJbmZvPy5UaXRsZSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkge1xuXHRcdC8vIEluIGNhc2UgYW4gZXhwbGljaXQgdGV4dCBhcnJhbmdlbWVudCB3YXMgc2V0IHdlIG1ha2UgdXNlIG9mIGl0IGluIHRoZSBkZXNjcmlwdGlvbiBhcyB3ZWxsXG5cdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBhZGRUZXh0QXJyYW5nZW1lbnRUb0JpbmRpbmdFeHByZXNzaW9uKHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXHR9XG5cblx0dGl0bGVWYWx1ZUV4cHJlc3Npb24gPSBmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHRpdGxlVmFsdWVFeHByZXNzaW9uLCBmdWxsQ29udGV4dFBhdGgpO1xuXG5cdC8vIElmIHRoZXJlIGlzIGEgVHlwZU5hbWUgZGVmaW5lZCwgc2hvdyB0aGUgZGVmYXVsdCB0aXRsZSAnTmV3ICsgVHlwZU5hbWUnLCBvdGhlcndpc2Ugc2hvdyB0aGUgY3VzdG9tIHRpdGxlIG9yIHRoZSBkZWZhdWx0ICdOZXcgb2JqZWN0J1xuXHRjb25zdCBjcmVhdGVNb2RlVGl0bGUgPSBvSGVhZGVySW5mbz8uVHlwZU5hbWVcblx0XHQ/IGNvbmNhdCh0aXRsZVdpdGhIZWFkZXJJbmZvLCBcIjogXCIsIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihvSGVhZGVySW5mby5UeXBlTmFtZS50b1N0cmluZygpKSlcblx0XHQ6IHRpdGxlTm9IZWFkZXJJbmZvO1xuXHRjb25zdCBhY3RpdmVFeHByZXNzaW9uID0gb0RyYWZ0Um9vdCA/IEVudGl0eS5Jc0FjdGl2ZSA6IHRydWU7XG5cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdGlmRWxzZShcblx0XHRcdC8vIElmIENyZWF0ZSBNb2RlICYmIEVtcHR5IGV4cHJlc3Npb25cblx0XHRcdGFuZChvcihVSS5Jc0NyZWF0ZU1vZGVTdGlja3ksIFVJLklzQ3JlYXRlTW9kZSksIHRpdGxlVmFsdWVFeHByZXNzaW9uICYmIGlzRW1wdHkodGl0bGVWYWx1ZUV4cHJlc3Npb24pKSxcblxuXHRcdFx0Y3JlYXRlTW9kZVRpdGxlLFxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHNob3cgdGhlIGRlZmF1bHQgZXhwcmVzc2lvblxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRhbmQoYWN0aXZlRXhwcmVzc2lvbiwgdGl0bGVWYWx1ZUV4cHJlc3Npb24gJiYgaXNFbXB0eSh0aXRsZVZhbHVlRXhwcmVzc2lvbikpLFxuXHRcdFx0XHR0aXRsZUZvckFjdGl2ZUhlYWRlck5vSGVhZGVySW5mbyxcblx0XHRcdFx0dGl0bGVWYWx1ZUV4cHJlc3Npb25cblx0XHRcdClcblx0XHQpXG5cdCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGFuIG9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvSGVhZGVySW5mbyBUaGUgQFVJLkhlYWRlckluZm8gYW5ub3RhdGlvbiBjb250ZW50XG4gKiBAcGFyYW0gZnVsbENvbnRleHRQYXRoIFRoZSBmdWxsIGNvbnRleHQgcGF0aCB1c2VkIHRvIHJlYWNoIHRoYXQgb2JqZWN0IHBhZ2VcbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvYmplY3QgcGFnZSBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwcmVzc2lvbkZvckRlc2NyaXB0aW9uID0gZnVuY3Rpb24gKFxuXHRvSGVhZGVySW5mbzogSGVhZGVySW5mb1R5cGUgfCB1bmRlZmluZWQsXG5cdGZ1bGxDb250ZXh0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRsZXQgcGF0aEluTW9kZWwgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKG9IZWFkZXJJbmZvPy5EZXNjcmlwdGlvbiBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlKTtcblx0aWYgKChvSGVhZGVySW5mbz8uRGVzY3JpcHRpb24gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dD8uYW5ub3RhdGlvbnM/LlVJPy5UZXh0QXJyYW5nZW1lbnQpIHtcblx0XHQvLyBJbiBjYXNlIGFuIGV4cGxpY2l0IHRleHQgYXJyYW5nZW1lbnQgd2FzIHNldCB3ZSBtYWtlIHVzZSBvZiBpdCBpbiB0aGUgZGVzY3JpcHRpb24gYXMgd2VsbFxuXHRcdHBhdGhJbk1vZGVsID0gYWRkVGV4dEFycmFuZ2VtZW50VG9CaW5kaW5nRXhwcmVzc2lvbihwYXRoSW5Nb2RlbCwgZnVsbENvbnRleHRQYXRoKTtcblx0fVxuXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRWYWx1ZVJlY3Vyc2l2ZWx5KHBhdGhJbk1vZGVsLCBmdWxsQ29udGV4dFBhdGgpKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBleHByZXNzaW9uIGZvciB0aGUgc2F2ZSBidXR0b24uXG4gKlxuICogQHBhcmFtIG9WaWV3RGF0YSBUaGUgY3VycmVudCB2aWV3IGRhdGFcbiAqIEBwYXJhbSBmdWxsQ29udGV4dFBhdGggVGhlIHBhdGggdXNlZCB1cCB1bnRpbCBoZXJlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRoYXQgc2hvd3MgdGhlIHJpZ2h0IHNhdmUgYnV0dG9uIHRleHRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEV4cHJlc3Npb25Gb3JTYXZlQnV0dG9uID0gZnVuY3Rpb24gKFxuXHRvVmlld0RhdGE6IFZpZXdEYXRhLFxuXHRmdWxsQ29udGV4dFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgc2F2ZUJ1dHRvblRleHQgPSBDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfT1BfT0JKRUNUX1BBR0VfU0FWRVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRjb25zdCBjcmVhdGVCdXR0b25UZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX09QX09CSkVDVF9QQUdFX0NSRUFURVwiLCBvVmlld0RhdGEucmVzb3VyY2VCdW5kbGUpO1xuXHRsZXQgc2F2ZUV4cHJlc3Npb247XG5cblx0aWYgKChmdWxsQ29udGV4dFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5TZXNzaW9uPy5TdGlja3lTZXNzaW9uU3VwcG9ydGVkKSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gc3RpY2t5IG1vZGUgQU5EIHRoZSB1aSBpcyBpbiBjcmVhdGUgbW9kZSwgc2hvdyBDcmVhdGUsIGVsc2Ugc2hvdyBTYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoVUkuSXNDcmVhdGVNb2RlU3RpY2t5LCBjcmVhdGVCdXR0b25UZXh0LCBzYXZlQnV0dG9uVGV4dCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSWYgd2UncmUgaW4gZHJhZnQgQU5EIHRoZSBkcmFmdCBpcyBhIG5ldyBvYmplY3QgKCFJc0FjdGl2ZUVudGl0eSAmJiAhSGFzQWN0aXZlRW50aXR5KSwgc2hvdyBjcmVhdGUsIGVsc2Ugc2hvdyBzYXZlXG5cdFx0c2F2ZUV4cHJlc3Npb24gPSBpZkVsc2UoRHJhZnQuSXNOZXdPYmplY3QsIGNyZWF0ZUJ1dHRvblRleHQsIHNhdmVCdXR0b25UZXh0KTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc2F2ZUV4cHJlc3Npb24pO1xufTtcblxuLyoqXG4gKiBNZXRob2QgcmV0dXJucyB3aGV0aGVyIGZvb3RlciBpcyB2aXNpYmxlIG9yIG5vdCBvbiBvYmplY3QgLyBzdWJvYmplY3QgcGFnZS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGdldEZvb3RlclZpc2libGVcbiAqIEBwYXJhbSBmb290ZXJBY3Rpb25zIFRoZSBmb290ZXIgYWN0aW9uIG9iamVjdCBjb21pbmcgZnJvbSB0aGUgY29udmVydGVyXG4gKiBAcGFyYW0gZGF0YUZpZWxkcyBEYXRhIGZpZWxkIGFycmF5IGZvciBub3JtYWwgZm9vdGVyIHZpc2liaWxpdHkgcHJvY2Vzc2luZ1xuICogQHJldHVybnMgYHRydWVgIGlmIGFueSBhY3Rpb24gaXMgdHJ1ZSwgb3RoZXJ3aXNlIGNvbXBpbGVkIEJpbmRpbmcgb3IgYGZhbHNlYFxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9vdGVyVmlzaWJsZSA9IGZ1bmN0aW9uIChcblx0Zm9vdGVyQWN0aW9uczogQ29udmVydGVyQWN0aW9uW10sXG5cdGRhdGFGaWVsZHM6IERhdGFGaWVsZFtdXG4pOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBtYW5pZmVzdEFjdGlvbnMgPSBmb290ZXJBY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBpc01hbmlmZXN0QWN0aW9uKGFjdGlvbikpIGFzIE1hbmlmZXN0QWN0aW9uW107XG5cdGxldCBjdXN0b21BY3Rpb25WaXNpYmlsaXR5OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdGlmIChtYW5pZmVzdEFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0Ly8gSWYgd2UgaGF2ZSBtYW5pZmVzdCBhY3Rpb25zXG5cdFx0Y29uc3QgY3VzdG9tQWN0aW9uSW5kaXZpZHVhbFZpc2liaWxpdHkgPSBtYW5pZmVzdEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcblx0XHRcdHJldHVybiByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihhY3Rpb24udmlzaWJsZSBhcyBzdHJpbmcgfCBib29sZWFuLCBcImJvb2xlYW5cIik7XG5cdFx0fSk7XG5cdFx0Ly8gY29uc3RydWN0IHRoZSBmb290ZXIncyB2aXNpYmlsaXR5LWJpbmRpbmcgb3V0IG9mIGFsbCBhY3Rpb25zJyB2aXNpYmlsaXR5LWJpbmRpbmdzLCBmaXJzdCB0aGUgYmluZGluZyBvZiBhbGwgY3VzdG9tIGFjdGlvbnMgLi4uXG5cdFx0Y3VzdG9tQWN0aW9uVmlzaWJpbGl0eSA9IG9yKC4uLmN1c3RvbUFjdGlvbkluZGl2aWR1YWxWaXNpYmlsaXR5KTtcblx0XHQvLyBhbmQgdGhlbiB0aGUgYmluZGluZyBvZiBhbGwgYW5ub3RhdGlvbiBhY3Rpb25zIGluc2lkZSB0aGUgZm9vdGVyIC4uLlxuXHRcdGNvbnN0IGFubm90YXRpb25BY3Rpb25WaXNpYmlsaXR5ID0gZ2V0RGF0YUZpZWxkQmFzZWRGb290ZXJWaXNpYmlsaXR5KGRhdGFGaWVsZHMsIHRydWUpO1xuXHRcdC8vIGZpbmFsbHksIHJldHVybiBldmVyeXRoaW5nLlxuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihjdXN0b21BY3Rpb25WaXNpYmlsaXR5LCByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihhbm5vdGF0aW9uQWN0aW9uVmlzaWJpbGl0eSwgXCJib29sZWFuXCIpKSk7XG5cdH1cblx0cmV0dXJuIGdldERhdGFGaWVsZEJhc2VkRm9vdGVyVmlzaWJpbGl0eShkYXRhRmllbGRzLCB0cnVlKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBmb290ZXIgaXMgdmlzaWJsZSBvciBub3QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAc3RhdGljXG4gKiBAbmFtZSBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZVRlbXBsYXRpbmcuZ2V0RGF0YUZpZWxkQmFzZWRGb290ZXJWaXNpYmlsaXR5XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VUZW1wbGF0aW5nXG4gKiBAcGFyYW0gYURhdGFGaWVsZHMgQXJyYXkgb2YgRGF0YUZpZWxkcyBpbiB0aGUgaWRlbnRpZmljYXRpb25cbiAqIEBwYXJhbSBiQ29uc2lkZXJFZGl0YWJsZSBXaGV0aGVyIHRoZSBlZGl0IG1vZGUgYmluZGluZyBpcyByZXF1aXJlZCBvciBub3RcbiAqIEByZXR1cm5zIEFuIGV4cHJlc3Npb24gaWYgYWxsIHRoZSBhY3Rpb25zIGFyZSB1aS5oaWRkZW4sIHRydWUgb3RoZXJ3aXNlXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhRmllbGRCYXNlZEZvb3RlclZpc2liaWxpdHkgPSBmdW5jdGlvbiAoYURhdGFGaWVsZHM6IGFueVtdLCBiQ29uc2lkZXJFZGl0YWJsZTogYm9vbGVhbikge1xuXHRsZXQgc0hpZGRlbkV4cHJlc3Npb24gPSBcIlwiO1xuXHRsZXQgc1NlbWlIaWRkZW5FeHByZXNzaW9uO1xuXHRjb25zdCBhSGlkZGVuQWN0aW9uUGF0aCA9IFtdO1xuXG5cdGZvciAoY29uc3QgaSBpbiBhRGF0YUZpZWxkcykge1xuXHRcdGNvbnN0IG9EYXRhRmllbGQgPSBhRGF0YUZpZWxkc1tpXTtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uICYmIG9EYXRhRmllbGQuRGV0ZXJtaW5pbmcgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkV4cHJlc3Npb24gPSBvRGF0YUZpZWxkW2BAJHtVSUFubm90YXRpb25UZXJtcy5IaWRkZW59YF07XG5cdFx0XHRpZiAoIWhpZGRlbkV4cHJlc3Npb24pIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKGhpZGRlbkV4cHJlc3Npb24uJFBhdGgpIHtcblx0XHRcdFx0aWYgKGFIaWRkZW5BY3Rpb25QYXRoLmluZGV4T2YoaGlkZGVuRXhwcmVzc2lvbi4kUGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0YUhpZGRlbkFjdGlvblBhdGgucHVzaChoaWRkZW5FeHByZXNzaW9uLiRQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChhSGlkZGVuQWN0aW9uUGF0aC5sZW5ndGgpIHtcblx0XHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYUhpZGRlbkFjdGlvblBhdGgubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAoYUhpZGRlbkFjdGlvblBhdGhbaW5kZXhdKSB7XG5cdFx0XHRcdHNTZW1pSGlkZGVuRXhwcmVzc2lvbiA9IFwiKCV7XCIgKyBhSGlkZGVuQWN0aW9uUGF0aFtpbmRleF0gKyBcIn0gPT09IHRydWUgPyBmYWxzZSA6IHRydWUgKVwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluZGV4ID09IGFIaWRkZW5BY3Rpb25QYXRoLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0c0hpZGRlbkV4cHJlc3Npb24gPSBzSGlkZGVuRXhwcmVzc2lvbiArIHNTZW1pSGlkZGVuRXhwcmVzc2lvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNIaWRkZW5FeHByZXNzaW9uID0gc0hpZGRlbkV4cHJlc3Npb24gKyBzU2VtaUhpZGRlbkV4cHJlc3Npb24gKyBcInx8XCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAoXG5cdFx0XHRcIns9IFwiICtcblx0XHRcdChiQ29uc2lkZXJFZGl0YWJsZSA/IFwiKFwiIDogXCJcIikgK1xuXHRcdFx0c0hpZGRlbkV4cHJlc3Npb24gK1xuXHRcdFx0KGJDb25zaWRlckVkaXRhYmxlID8gXCIgfHwgJHt1aT4vaXNFZGl0YWJsZX0pIFwiIDogXCIgXCIpICtcblx0XHRcdFwiJiYgJHtpbnRlcm5hbD5pc0NyZWF0ZURpYWxvZ09wZW59ICE9PSB0cnVlfVwiXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCJ7PSBcIiArIChiQ29uc2lkZXJFZGl0YWJsZSA/IFwiJHt1aT4vaXNFZGl0YWJsZX0gJiYgXCIgOiBcIlwiKSArIFwiJHtpbnRlcm5hbD5pc0NyZWF0ZURpYWxvZ09wZW59ICE9PSB0cnVlfVwiO1xuXHR9XG59O1xuXG4vKipcbiAqIE1ldGhvZCByZXR1cm5zIFdoZXRoZXIgdGhlIGFjdGlvbiB0eXBlIGlzIG1hbmlmZXN0IG9yIG5vdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGlzTWFuaWZlc3RBY3Rpb25WaXNpYmxlXG4gKiBAcGFyYW0gb0FjdGlvbiBUaGUgYWN0aW9uIG9iamVjdFxuICogQHJldHVybnMgYHRydWVgIGlmIGFjdGlvbiBpcyBjb21pbmcgZnJvbSBtYW5pZmVzdCwgYGZhbHNlYCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzTWFuaWZlc3RBY3Rpb24gPSBmdW5jdGlvbiAob0FjdGlvbjogYW55KSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gW1xuXHRcdFwiUHJpbWFyeVwiLFxuXHRcdFwiRGVmYXVsdEFwcGx5XCIsXG5cdFx0XCJTZWNvbmRhcnlcIixcblx0XHRcIkZvckFjdGlvblwiLFxuXHRcdFwiRm9yTmF2aWdhdGlvblwiLFxuXHRcdFwiU3dpdGNoVG9BY3RpdmVPYmplY3RcIixcblx0XHRcIlN3aXRjaFRvRHJhZnRPYmplY3RcIixcblx0XHRcIkRyYWZ0QWN0aW9uc1wiXG5cdF07XG5cdHJldHVybiBhQWN0aW9ucy5pbmRleE9mKG9BY3Rpb24udHlwZSkgPCAwO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIGV4cHJlc3Npb24gdG8gZGV0ZXJtaW5lIEVtcGhhc2l6ZWQgIGJ1dHRvbiB0eXBlIGJhc2VkIG9uIENyaXRpY2FsaXR5IGFjcm9zcyBhbGwgYWN0aW9uc1xuICogSWYgY3JpdGljYWwgYWN0aW9uIGlzIHJlbmRlcmVkLCBpdHMgY29uc2lkZXJlZCB0byBiZSB0aGUgcHJpbWFyeSBhY3Rpb24uIEhlbmNlIHRlbXBsYXRlJ3MgZGVmYXVsdCBwcmltYXJ5IGFjdGlvbiBpcyBzZXQgYmFjayB0byBEZWZhdWx0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQG5hbWUgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VUZW1wbGF0aW5nLmJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb25cbiAqIEBtZW1iZXJvZiBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZVRlbXBsYXRpbmdcbiAqIEBwYXJhbSBhSWRlbnRpZmljYXRpb24gQXJyYXkgb2YgYWxsIHRoZSBEYXRhRmllbGRzIGluIElkZW50aWZpY2F0aW9uXG4gKiBAcmV0dXJucyBBbiBleHByZXNzaW9uIHRvIGRlZHVjZSBpZiBidXR0b24gdHlwZSBpcyBEZWZhdWx0IG9yIEVtcGhhc2l6ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkRW1waGFzaXplZEJ1dHRvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUlkZW50aWZpY2F0aW9uPzogYW55W10pIHtcblx0aWYgKCFhSWRlbnRpZmljYXRpb24pIHtcblx0XHRyZXR1cm4gQnV0dG9uVHlwZS5FbXBoYXNpemVkO1xuXHR9XG5cdGxldCBzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb246IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0bGV0IGJJc0Fsd2F5c0RlZmF1bHQ6IGJvb2xlYW4sXG5cdFx0c0hpZGRlblNpbXBsZVBhdGgsXG5cdFx0c0hpZGRlbkV4cHJlc3Npb24gPSBcIlwiO1xuXHRhSWRlbnRpZmljYXRpb24uZm9yRWFjaChmdW5jdGlvbiAob0RhdGFGaWVsZDogYW55KSB7XG5cdFx0Y29uc3Qgb0NyaXRpY2FsaXR5UHJvcGVydHkgPSBvRGF0YUZpZWxkLkNyaXRpY2FsaXR5O1xuXHRcdGNvbnN0IG9EYXRhRmllbGRIaWRkZW4gPSBvRGF0YUZpZWxkW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXTtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiAmJiAhYklzQWx3YXlzRGVmYXVsdCAmJiBvQ3JpdGljYWxpdHlQcm9wZXJ0eSkge1xuXHRcdFx0aWYgKCFzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb24gJiYgb0RhdGFGaWVsZEhpZGRlbiA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBpZiBEYXRhRmllbGQgaXMgc2V0IHRvIGhpZGRlbiwgd2UgY2FuIHNraXAgb3RoZXIgY2hlY2tzIGFuZCByZXR1cm4gRGVmYXVsdCBidXR0b24gdHlwZVxuXHRcdFx0XHRzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb24gPSBCdXR0b25UeXBlLkVtcGhhc2l6ZWQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChvRGF0YUZpZWxkSGlkZGVuICYmIG9EYXRhRmllbGRIaWRkZW4uJFBhdGgpIHtcblx0XHRcdFx0Ly8gd2hlbiB2aXNpYmlsaXR5IG9mIGNyaXRpY2FsIGJ1dHRvbiBpcyBiYXNlZCBvbiBwYXRoLCBjb2xsZWN0IGFsbCBwYXRocyBmb3IgZXhwcmVzc2lvblxuXHRcdFx0XHRzSGlkZGVuU2ltcGxlUGF0aCA9IG9EYXRhRmllbGRIaWRkZW4uJFBhdGg7XG5cdFx0XHRcdGlmIChzSGlkZGVuRXhwcmVzc2lvbikge1xuXHRcdFx0XHRcdHNIaWRkZW5FeHByZXNzaW9uID0gc0hpZGRlbkV4cHJlc3Npb24gKyBcIiAmJiBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzSGlkZGVuRXhwcmVzc2lvbiA9IHNIaWRkZW5FeHByZXNzaW9uICsgXCIle1wiICsgc0hpZGRlblNpbXBsZVBhdGggKyBcIn0gPT09IHRydWVcIjtcblx0XHRcdFx0c0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uID0gXCJ7PSAoXCIgKyBzSGlkZGVuRXhwcmVzc2lvbiArIFwiKSA/ICdFbXBoYXNpemVkJyA6ICdEZWZhdWx0JyB9XCI7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKG9Dcml0aWNhbGl0eVByb3BlcnR5LiRFbnVtTWVtYmVyKSB7XG5cdFx0XHRcdC8vIHN1cHBvcnRlZCBjcml0aWNhbGl0eSBhcmUgW1Bvc2l0aXZlLzMvJzMnXSBhbmQgW05lZ2F0aXZlLzEvJzEnXVxuXHRcdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlUeXBlL05lZ2F0aXZlXCI6XG5cdFx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmVcIjpcblx0XHRcdFx0Y2FzZSBcIjFcIjpcblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRjYXNlIFwiM1wiOlxuXHRcdFx0XHRjYXNlIDM6XG5cdFx0XHRcdFx0aWYgKCFvRGF0YUZpZWxkSGlkZGVuKSB7XG5cdFx0XHRcdFx0XHRzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb24gPSBCdXR0b25UeXBlLkRlZmF1bHQ7XG5cdFx0XHRcdFx0XHRiSXNBbHdheXNEZWZhdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uID0gc0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uIHx8IEJ1dHRvblR5cGUuRGVmYXVsdDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRzRm9ybWF0RW1waGFzaXplZEV4cHJlc3Npb24gPSBCdXR0b25UeXBlLkVtcGhhc2l6ZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0NyaXRpY2FsaXR5UHJvcGVydHkuJFBhdGgpIHtcblx0XHRcdFx0Ly8gd2hlbiBDcml0aWNhbGl0eSBpcyBzZXQgdXNpbmcgYSBwYXRoLCB1c2UgdGhlIHBhdGggZm9yIGRlZHVjaW5nIHRoZSBFbXBoc2l6ZWQgdHlwZSBmb3IgZGVmYXVsdCBQcmltYXJ5IEFjdGlvblxuXHRcdFx0XHRjb25zdCBzQ29tYmluZWRIaWRkZW5FeHByZXNzaW9uID0gc0hpZGRlbkV4cHJlc3Npb24gPyBcIiEoXCIgKyBzSGlkZGVuRXhwcmVzc2lvbiArIFwiKSAmJiBcIiA6IFwiXCI7XG5cdFx0XHRcdHNGb3JtYXRFbXBoYXNpemVkRXhwcmVzc2lvbiA9XG5cdFx0XHRcdFx0XCJ7PSBcIiArXG5cdFx0XHRcdFx0c0NvbWJpbmVkSGlkZGVuRXhwcmVzc2lvbiArXG5cdFx0XHRcdFx0XCIoKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvTmVnYXRpdmUnKSB8fCAoJHtcIiArXG5cdFx0XHRcdFx0b0NyaXRpY2FsaXR5UHJvcGVydHkuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA9PT0gJzEnKSB8fCAoJHtcIiArXG5cdFx0XHRcdFx0b0NyaXRpY2FsaXR5UHJvcGVydHkuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA9PT0gMSkgXCIgK1xuXHRcdFx0XHRcdFwifHwgKCR7XCIgK1xuXHRcdFx0XHRcdG9Dcml0aWNhbGl0eVByb3BlcnR5LiRQYXRoICtcblx0XHRcdFx0XHRcIn0gPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGUvUG9zaXRpdmUnKSB8fCAoJHtcIiArXG5cdFx0XHRcdFx0b0NyaXRpY2FsaXR5UHJvcGVydHkuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA9PT0gJzMnKSB8fCAoJHtcIiArXG5cdFx0XHRcdFx0b0NyaXRpY2FsaXR5UHJvcGVydHkuJFBhdGggK1xuXHRcdFx0XHRcdFwifSA9PT0gMykpID8gXCIgK1xuXHRcdFx0XHRcdFwiJ0RlZmF1bHQnXCIgK1xuXHRcdFx0XHRcdFwiIDogXCIgK1xuXHRcdFx0XHRcdFwiJ0VtcGhhc2l6ZWQnXCIgK1xuXHRcdFx0XHRcdFwiIH1cIjtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gc0Zvcm1hdEVtcGhhc2l6ZWRFeHByZXNzaW9uIHx8IEJ1dHRvblR5cGUuRW1waGFzaXplZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50QmluZGluZyA9IGZ1bmN0aW9uIChzUGF0aDogYW55KSB7XG5cdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IE9EYXRhTW9kZWxBbm5vdGF0aW9uSGVscGVyLmdldE5hdmlnYXRpb25QYXRoKHNQYXRoKTtcblx0aWYgKHNOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBcIntwYXRoOidcIiArIHNOYXZpZ2F0aW9uUGF0aCArIFwiJ31cIjtcblx0fSBlbHNlIHtcblx0XHQvL25vIG5hdmlnYXRpb24gcHJvcGVydHkgbmVlZHMgZW1wdHkgb2JqZWN0XG5cdFx0cmV0dXJuIFwie3BhdGg6ICcnfVwiO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIGRyYWZ0IHBhdHRlcm4gaXMgc3VwcG9ydGVkLlxuICpcbiAqIEBwYXJhbSBvQW5ub3RhdGlvbnMgQW5ub3RhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGNoZWNrRHJhZnRTdGF0ZSA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSkge1xuXHRpZiAoXG5cdFx0b0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gJiZcblx0XHRvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXVtcIkVkaXRBY3Rpb25cIl1cblx0KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgdmlzaWJpbGl0eSBmb3IgdGhlIFN3aXRjaFRvQWN0aXZlIGJ1dHRvbiBpbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIG9Bbm5vdGF0aW9ucyBBbm5vdGF0aW9ucyBvZiB0aGUgY3VycmVudCBlbnRpdHkgc2V0LlxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBiYXNlZCBvbiB0aGUgZHJhZnQgc3RhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN3aXRjaFRvQWN0aXZlVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSk6IGFueSB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUob0Fubm90YXRpb25zKSkge1xuXHRcdHJldHVybiBcIns9ICgle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0pID8gKCAke3VpPi9pc0VkaXRhYmxlfSAmJiAhJHt1aT5jcmVhdGVNb2RlfSAmJiAle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0gKSA6IGZhbHNlIH1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgU3dpdGNoVG9EcmFmdCBidXR0b24gaW4gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlLlxuICpcbiAqIEBwYXJhbSBvQW5ub3RhdGlvbnMgQW5ub3RhdGlvbnMgb2YgdGhlIGN1cnJlbnQgZW50aXR5IHNldC5cbiAqIEByZXR1cm5zIFJldHVybnMgZXhwcmVzc2lvbiBiaW5kaW5nIG9yIEJvb2xlYW4gdmFsdWUgYmFzZWQgb24gdGhlIGRyYWZ0IHN0YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTd2l0Y2hUb0RyYWZ0VmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChvQW5ub3RhdGlvbnM6IGFueSk6IGFueSB7XG5cdGlmIChjaGVja0RyYWZ0U3RhdGUob0Fubm90YXRpb25zKSkge1xuXHRcdHJldHVybiBcIns9ICgle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0pID8gKCAhKCR7dWk+L2lzRWRpdGFibGV9KSAmJiAhJHt1aT5jcmVhdGVNb2RlfSAmJiAke0hhc0RyYWZ0RW50aXR5fSAmJiAle0RyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZX0gKSA6IGZhbHNlIH1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IHRoZSB2aXNpYmlsaXR5IGZvciB0aGUgU3dpdGNoRHJhZnRBbmRBY3RpdmUgYnV0dG9uIGluIHRoZSBvYmplY3QgcGFnZSBvciBzdWJvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gb0Fubm90YXRpb25zIEFubm90YXRpb25zIG9mIHRoZSBjdXJyZW50IGVudGl0eSBzZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGJhc2VkIG9uIHRoZSBkcmFmdCBzdGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0U3dpdGNoRHJhZnRBbmRBY3RpdmVWaXNpYmlsaXR5ID0gZnVuY3Rpb24gKG9Bbm5vdGF0aW9uczogYW55KTogYW55IHtcblx0aWYgKGNoZWNrRHJhZnRTdGF0ZShvQW5ub3RhdGlvbnMpKSB7XG5cdFx0cmV0dXJuIFwiez0gKCV7RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lfSkgPyAoICEke3VpPmNyZWF0ZU1vZGV9ICYmICV7RHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lfSApIDogZmFsc2UgfVwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBmaW5kIGFuIGFjdGlvbiBmcm9tIHRoZSBhcnJheSBvZiBoZWFkZXIgYWN0aW9ucyBpbiB0aGUgY29udmVydGVyIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucyBBcnJheSBvZiAnaGVhZGVyJyBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZS5cbiAqIEBwYXJhbSBzQWN0aW9uVHlwZSBUaGUgYWN0aW9uIHR5cGVcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb24gd2l0aCB0aGUgbWF0Y2hpbmcgYWN0aW9uIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBfZmluZEFjdGlvbiA9IGZ1bmN0aW9uIChhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnM6IGFueVtdLCBzQWN0aW9uVHlwZTogc3RyaW5nKSB7XG5cdGxldCBvQWN0aW9uO1xuXHRpZiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zICYmIGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRvQWN0aW9uID0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9IZWFkZXJBY3Rpb246IGFueSkge1xuXHRcdFx0cmV0dXJuIG9IZWFkZXJBY3Rpb24udHlwZSA9PT0gc0FjdGlvblR5cGU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9BY3Rpb247XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlbGV0ZUNvbW1hbmRFeGVjdXRpb25FbmFibGVkID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogYW55W10pIHtcblx0Y29uc3Qgb0RlbGV0ZUFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJTZWNvbmRhcnlcIik7XG5cdHJldHVybiBvRGVsZXRlQWN0aW9uID8gb0RlbGV0ZUFjdGlvbi5lbmFibGVkIDogXCJ0cnVlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGZvciB0aGUgRGVsZXRlIGJ1dHRvbiBvbiB0aGUgb2JqZWN0IHBhZ2Ugb3Igc3Vib2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBhIENvbW1hbmQgRXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSBhQ29udmVydGVyQ29udGV4dEhlYWRlckFjdGlvbnMgQXJyYXkgb2YgaGVhZGVyIGFjdGlvbnMgb24gdGhlIG9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBCb29sZWFuIHZhbHVlIGZyb20gdGhlIGNvbnZlcnRlciBvdXRwdXRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlbGV0ZUNvbW1hbmRFeGVjdXRpb25WaXNpYmxlID0gZnVuY3Rpb24gKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9uczogYW55W10pIHtcblx0Y29uc3Qgb0RlbGV0ZUFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJTZWNvbmRhcnlcIik7XG5cdHJldHVybiBvRGVsZXRlQWN0aW9uID8gb0RlbGV0ZUFjdGlvbi52aXNpYmxlIDogXCJ0cnVlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ3Zpc2libGUnIHByb3BlcnR5IGZvciB0aGUgRWRpdCBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvblZpc2libGUgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBhbnlbXSkge1xuXHRjb25zdCBvRWRpdEFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJQcmltYXJ5XCIpO1xuXHRyZXR1cm4gb0VkaXRBY3Rpb24gPyBvRWRpdEFjdGlvbi52aXNpYmxlIDogXCJ0cnVlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IGZvciB0aGUgRWRpdCBidXR0b24gb24gdGhlIG9iamVjdCBwYWdlIG9yIHN1Ym9iamVjdCBwYWdlIGluIGNhc2Ugb2YgYSBDb21tYW5kIEV4ZWN1dGlvbi5cbiAqXG4gKiBAcGFyYW0gYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zIEFycmF5IG9mIGhlYWRlciBhY3Rpb25zIG9uIHRoZSBvYmplY3QgcGFnZVxuICogQHJldHVybnMgUmV0dXJucyBleHByZXNzaW9uIGJpbmRpbmcgb3IgQm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBjb252ZXJ0ZXIgb3V0cHV0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0Q29tbWFuZEV4ZWN1dGlvbkVuYWJsZWQgPSBmdW5jdGlvbiAoYUNvbnZlcnRlckNvbnRleHRIZWFkZXJBY3Rpb25zOiBhbnlbXSkge1xuXHRjb25zdCBvRWRpdEFjdGlvbiA9IF9maW5kQWN0aW9uKGFDb252ZXJ0ZXJDb250ZXh0SGVhZGVyQWN0aW9ucywgXCJQcmltYXJ5XCIpO1xuXHRyZXR1cm4gb0VkaXRBY3Rpb24gPyBvRWRpdEFjdGlvbi5lbmFibGVkIDogXCJ0cnVlXCI7XG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgRWRpdEFjdGlvbiBmcm9tIHRoZSBFbnRpdHlzZXQgYmFzZWQgb24gRHJhZnQgb3Igc3RpY2t5IGJhc2VkIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBbb0VudGl0eVNldF0gVGhlIHZhbHVlIGZyb20gdGhlIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGV4cHJlc3Npb24gYmluZGluZyBvciBib29sZWFuIHZhbHVlIGJhc2VkIG9uIHZSYXdWYWx1ZSAmIG9EcmFmdE5vZGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRBY3Rpb24gPSBmdW5jdGlvbiAob0VudGl0eVNldDogQ29udGV4dCkge1xuXHRjb25zdCBzUGF0aCA9IG9FbnRpdHlTZXQuZ2V0UGF0aCgpLFxuXHRcdG9Bbm5vdGF0aW9ucyA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3NQYXRofUBgKTtcblx0Y29uc3QgYkRyYWZ0Um9vdCA9IG9Bbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCIpO1xuXHRjb25zdCBiU3RpY2t5U2Vzc2lvbiA9IG9Bbm5vdGF0aW9ucy5oYXNPd25Qcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIik7XG5cdGxldCBzQWN0aW9uTmFtZTtcblx0aWYgKGJEcmFmdFJvb3QpIHtcblx0XHRzQWN0aW9uTmFtZSA9IG9FbnRpdHlTZXQuZ2V0T2JqZWN0KGAke3NQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290L0VkaXRBY3Rpb25gKTtcblx0fSBlbHNlIGlmIChiU3RpY2t5U2Vzc2lvbikge1xuXHRcdHNBY3Rpb25OYW1lID0gb0VudGl0eVNldC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZC9FZGl0QWN0aW9uYCk7XG5cdH1cblx0cmV0dXJuICFzQWN0aW9uTmFtZSA/IHNBY3Rpb25OYW1lIDogYCR7c1BhdGh9LyR7c0FjdGlvbk5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zID0gZnVuY3Rpb24gKG9Bbm5vdGF0aW9uczogYW55LCBvRmllbGRDb250cm9sOiBhbnkpIHtcblx0bGV0IGJDb21wdXRlZCwgYkltbXV0YWJsZSwgYlJlYWRPbmx5O1xuXHRpZiAob0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdKSB7XG5cdFx0YkNvbXB1dGVkID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdLkJvb2wgPyBvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNvcmUuVjEuQ29tcHV0ZWRcIl0uQm9vbCA9PSBcInRydWVcIiA6IHRydWU7XG5cdH1cblx0aWYgKG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0pIHtcblx0XHRiSW1tdXRhYmxlID0gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXS5Cb29sID8gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5Db3JlLlYxLkltbXV0YWJsZVwiXS5Cb29sID09IFwidHJ1ZVwiIDogdHJ1ZTtcblx0fVxuXHRiUmVhZE9ubHkgPSBiQ29tcHV0ZWQgfHwgYkltbXV0YWJsZTtcblxuXHRpZiAob0ZpZWxkQ29udHJvbCkge1xuXHRcdGJSZWFkT25seSA9IGJSZWFkT25seSB8fCBvRmllbGRDb250cm9sID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIjtcblx0fVxuXHRpZiAoYlJlYWRPbmx5KSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uIChvRmllbGRDb250cm9sOiBhbnkpIHtcblx0bGV0IHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seTtcblx0aWYgKG9GaWVsZENvbnRyb2wpIHtcblx0XHRpZiAoKE1hbmFnZWRPYmplY3QgYXMgYW55KS5iaW5kaW5nUGFyc2VyKG9GaWVsZENvbnRyb2wpKSB7XG5cdFx0XHRzSXNGaWVsZENvbnRyb2xQYXRoUmVhZE9ubHkgPSBcIiVcIiArIG9GaWVsZENvbnRyb2wgKyBcIiA9PT0gMSBcIjtcblx0XHR9XG5cdH1cblx0aWYgKHNJc0ZpZWxkQ29udHJvbFBhdGhSZWFkT25seSkge1xuXHRcdHJldHVybiBcIns9IFwiICsgc0lzRmllbGRDb250cm9sUGF0aFJlYWRPbmx5ICsgXCI/IGZhbHNlIDogdHJ1ZSB9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufTtcblxuLypcbiAqIEZ1bmN0aW9uIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgY2hhcnQgVGl0bGUgUHJlc3NcbiAqXG4gKiBAZnVuY3Rpb253XG4gKiBAcGFyYW0ge29Db25maWd1cmF0aW9ufSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogIEBwYXJhbSB7b01hbmlmZXN0fSBbb01hbmlmZXN0XSBPdXRib3VuZHMgZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7U3RyaW5nfSBbc0NvbGxlY3Rpb25OYW1lXSBDb2xsZWN0aW9uIE5hbWUgb2YgdGhlIE1pY3JvIENoYXJ0XG4gKlxuICogcmV0dXJucyB7U3RyaW5nfSBbRXhwcmVzc2lvbl0gSGFuZGxlciBFeHByZXNzaW9uIGZvciB0aGUgdGl0bGUgcHJlc3NcbiAqXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHByZXNzaW9uRm9yTWljcm9DaGFydFRpdGxlUHJlc3MgPSBmdW5jdGlvbiAob0NvbmZpZ3VyYXRpb246IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbGxlY3Rpb25OYW1lOiBhbnkpIHtcblx0aWYgKG9Db25maWd1cmF0aW9uKSB7XG5cdFx0aWYgKFxuXHRcdFx0KG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgb0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdKSB8fFxuXHRcdFx0KG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl0gJiYgb0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXVtcIm91dGJvdW5kXCJdICYmIG9Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcIi5oYW5kbGVycy5vbkRhdGFQb2ludFRpdGxlUHJlc3NlZCgkY29udHJvbGxlciwgJHskc291cmNlPi99LCdcIiArXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KG9NYW5pZmVzdE91dGJvdW5kKSArXG5cdFx0XHRcdFwiJywnXCIgK1xuXHRcdFx0XHRvQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0gK1xuXHRcdFx0XHRcIicsJ1wiICtcblx0XHRcdFx0c0NvbGxlY3Rpb25OYW1lICtcblx0XHRcdFx0XCInIClcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG9Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBcIi5oYW5kbGVycy5uYXZpZ2F0ZVRvU3ViU2VjdGlvbigkY29udHJvbGxlciwgJ1wiICsgSlNPTi5zdHJpbmdpZnkob0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkgKyBcIicpXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuXG4vKlxuICogRnVuY3Rpb24gdG8gcmVuZGVyIENoYXJ0IFRpdGxlIGFzIExpbmtcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b0NvbnRyb2xDb25maWd1cmF0aW9ufSBbb0NvbmZpZ3VyYXRpb25zXSBjb250cm9sIGNvbmZpZ3VyYXRpb24gZnJvbSBtYW5pZmVzdFxuICogcmV0dXJucyB7U3RyaW5nfSBbc0tleV0gRm9yIHRoZSBUYXJnZXRPdXRib3VuZCBhbmQgVGFyZ2V0U2VjdGlvblxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldE1pY3JvQ2hhcnRUaXRsZUFzTGluayA9IGZ1bmN0aW9uIChvQ29udHJvbENvbmZpZ3VyYXRpb246IGFueSkge1xuXHRpZiAoXG5cdFx0b0NvbnRyb2xDb25maWd1cmF0aW9uICYmXG5cdFx0KG9Db250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdIHx8IChvQ29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSAmJiBvQ29udHJvbENvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkpXG5cdCkge1xuXHRcdHJldHVybiBcIkV4dGVybmFsXCI7XG5cdH0gZWxzZSBpZiAob0NvbnRyb2xDb25maWd1cmF0aW9uICYmIG9Db250cm9sQ29uZmlndXJhdGlvbltcInRhcmdldFNlY3Rpb25zXCJdKSB7XG5cdFx0cmV0dXJuIFwiSW5QYWdlXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiTm9uZVwiO1xuXHR9XG59O1xuXG4vKiBHZXQgZ3JvdXBJZCBmcm9tIGNvbnRyb2wgY29uZmlndXJhdGlvblxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IFtvQ29uZmlndXJhdGlvbnNdIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmcm9tIG1hbmlmZXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gW3NBbm5vdGF0aW9uUGF0aF0gQW5ub3RhdGlvbiBQYXRoIGZvciB0aGUgY29uZmlndXJhdGlvblxuICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IHRoZSBncm91cElkIGZvciBEYXRhUG9pbnRzIGFuZCBNaWNyb0NoYXJ0cyBpbiB0aGUgSGVhZGVyLlxuICpcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEdyb3VwSWRGcm9tQ29uZmlnID0gZnVuY3Rpb24gKG9Db25maWd1cmF0aW9uczogYW55LCBzQW5ub3RhdGlvblBhdGg6IGFueSwgc0RlZmF1bHRHcm91cElkPzogYW55KSB7XG5cdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NBbm5vdGF0aW9uUGF0aF0sXG5cdFx0YUF1dG9QYXR0ZXJucyA9IFtcIkhlcm9lc1wiLCBcIkRlY29yYXRpb25cIiwgXCJXb3JrZXJzXCIsIFwiTG9uZ1J1bm5lcnNcIl07XG5cdGxldCBzR3JvdXBJZCA9IHNEZWZhdWx0R3JvdXBJZDtcblx0aWYgKFxuXHRcdG9Db25maWd1cmF0aW9uICYmXG5cdFx0b0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgJiZcblx0XHRhQXV0b1BhdHRlcm5zLnNvbWUoZnVuY3Rpb24gKGF1dG9QYXR0ZXJuOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBhdXRvUGF0dGVybiA9PT0gb0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQ7XG5cdFx0fSlcblx0KSB7XG5cdFx0c0dyb3VwSWQgPSBcIiRhdXRvLlwiICsgb0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQ7XG5cdH1cblx0cmV0dXJuIHNHcm91cElkO1xufTtcblxuLypcbiAqIEdldCBDb250ZXh0IEJpbmRpbmcgd2l0aCBncm91cElkIGZyb20gY29udHJvbCBjb25maWd1cmF0aW9uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gW29Db25maWd1cmF0aW9uc10gY29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBbc0tleV0gQW5ub3RhdGlvbiBQYXRoIGZvciBvZiB0aGUgY29uZmlndXJhdGlvblxuICogQGRlc2NyaXB0aW9uIFVzZWQgdG8gZ2V0IHRoZSBiaW5kaW5nIGZvciBEYXRhUG9pbnRzIGluIHRoZSBIZWFkZXIuXG4gKlxuICovXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhHcm91cElkRnJvbUNvbmZpZyA9IGZ1bmN0aW9uIChvQ29uZmlndXJhdGlvbnM6IGFueSwgc0tleTogYW55KSB7XG5cdGNvbnN0IHNHcm91cElkID0gZ2V0R3JvdXBJZEZyb21Db25maWcob0NvbmZpZ3VyYXRpb25zLCBzS2V5KTtcblx0bGV0IHNCaW5kaW5nO1xuXHRpZiAoc0dyb3VwSWQpIHtcblx0XHRzQmluZGluZyA9IFwieyBwYXRoIDogJycsIHBhcmFtZXRlcnMgOiB7ICQkZ3JvdXBJZCA6ICdcIiArIHNHcm91cElkICsgXCInIH0gfVwiO1xuXHR9XG5cdHJldHVybiBzQmluZGluZztcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgYSBGaWVsZEdyb3VwIGNvbnNpc3RzIG9mIG9ubHkgMSBEYXRhRmllbGQgd2l0aCBNdWx0aUxpbmUgVGV4dCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm9ybUVsZW1lbnRzIEEgY29sbGVjdGlvbiBvZiBmb3JtIGVsZW1lbnRzIHVzZWQgaW4gdGhlIGN1cnJlbnQgZmllbGQgZ3JvdXBcbiAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiBvbmx5IDEgZGF0YSBmaWVsZCB3aXRoIE11bHRpbGluZSBUZXh0IGFubm90YXRpb24gZXhpc3RzLlxuICovXG5leHBvcnQgY29uc3QgZG9lc0ZpZWxkR3JvdXBDb250YWluT25seU9uZU11bHRpTGluZURhdGFGaWVsZCA9IGZ1bmN0aW9uIChhRm9ybUVsZW1lbnRzOiBhbnlbXSkge1xuXHRyZXR1cm4gYUZvcm1FbGVtZW50cyAmJiBhRm9ybUVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhIWFGb3JtRWxlbWVudHNbMF0uaXNWYWx1ZU11bHRpbGluZVRleHQ7XG59O1xuXG4vKlxuICogR2V0IFZpc2libGl0eSBvZiBicmVhZGNydW1icy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb1ZpZXdEYXRhXSBWaWV3RGF0YSBtb2RlbFxuICogcmV0dXJucyB7Kn0gRXhwcmVzc2lvbiBvciBib29sZWFuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxlRXhwcmVzc2lvbkZvckJyZWFkY3J1bWJzID0gZnVuY3Rpb24gKG9WaWV3RGF0YTogYW55KSB7XG5cdHJldHVybiBvVmlld0RhdGEuc2hvd0JyZWFkQ3J1bWJzICYmIG9WaWV3RGF0YS5mY2xFbmFibGVkICE9PSB1bmRlZmluZWQgPyBcIntmY2xoZWxwZXI+L2JyZWFkQ3J1bWJJc1Zpc2libGV9XCIgOiBvVmlld0RhdGEuc2hvd0JyZWFkQ3J1bWJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJlQnV0dG9uVmlzaWJpbGl0eSA9IGZ1bmN0aW9uICh2aWV3RGF0YTogYW55KSB7XG5cdGxldCBzU2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwID0gXCIhJHt1aT5jcmVhdGVNb2RlfVwiO1xuXHRpZiAodmlld0RhdGEuZmNsRW5hYmxlZCkge1xuXHRcdHNTaGFyZUJ1dHRvblZpc2liaWxpdHlFeHAgPSBcIiR7ZmNsaGVscGVyPi9zaG93U2hhcmVJY29ufSAmJiBcIiArIHNTaGFyZUJ1dHRvblZpc2liaWxpdHlFeHA7XG5cdH1cblx0cmV0dXJuIFwiez0gXCIgKyBzU2hhcmVCdXR0b25WaXNpYmlsaXR5RXhwICsgXCIgfVwiO1xufTtcblxuLypcbiAqIEdldCB2aXNpYmxpdHkgZm9yIGVkaXRhYmxlIGhlYWRlciBmYWNldC5cbiAqXG4gKiBJZiBlaXRoZXIgdGhlIHRpdGxlIG9yIGRlc2NyaXB0aW9uIGZpZWxkIGZyb20gdGhlIGhlYWRlciBhbm5vdGF0aW9ucyBhcmUgZWRpdGFibGUsIHRoZW4gdGhlXG4gKiBlZGl0YWJsZSBoZWFkZXIgZmFjZXQgaXMgdmlzaWJsZS5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0Fubm90YXRpb25zXSBBbm5vdGF0aW9ucyBvYmplY3QgZm9yIGdpdmVuIGVudGl0eSBzZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0ZpZWxkQ29udHJvbF0gZmllbGQgY29udHJvbFxuICogcmV0dXJucyB7Kn0gIGJpbmRpbmcgZXhwcmVzc2lvbiBvciBib29sZWFuIHZhbHVlIHJlc29sdmVkIGZvcm0gZnVuY2l0b25zIGlzUmVhZE9ubHlGcm9tU3RhdGljQW5ub3RhdGlvbnMgYW5kIGlzUmVhZE9ubHlGcm9tRHluYW1pY0Fubm90YXRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRWaXNpYmxpdHlPZkhlYWRlckZhY2V0ID0gZnVuY3Rpb24gKFxuXHRvVGl0bGVBbm5vdGF0aW9uczogYW55LFxuXHRvRGVzY3JpcHRpb25Bbm5vdGF0aW9uczogYW55LFxuXHRvRmllbGRUaXRsZUZpZWxkQ29udHJvbDogYW55LFxuXHRvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbDogYW55XG4pIHtcblx0Ly8gQ2hlY2sgQW5ub3RhdGlvbnMgZm9yIFRpdGxlIEZpZWxkXG5cdGNvbnN0IGJJc1RpdGxlUmVhZE9ubHkgPSBpc1JlYWRPbmx5RnJvbVN0YXRpY0Fubm90YXRpb25zKG9UaXRsZUFubm90YXRpb25zLCBvRmllbGRUaXRsZUZpZWxkQ29udHJvbCk7XG5cdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IHJlYWRPbmx5RXhwcmVzc2lvbkZyb21EeW5hbWljQW5ub3RhdGlvbnMob0ZpZWxkVGl0bGVGaWVsZENvbnRyb2wpO1xuXHQvLyBUaGVyZSBpcyBubyBleHByZXNzaW9uIGFuZCB0aGUgdGl0bGUgaXMgbm90IHJlYWR5IG9ubHksIHRoaXMgaXMgc3VmZmljaWVudCBmb3IgYW4gZWRpdGFibGUgaGVhZGVyXG5cdGlmICghYklzVGl0bGVSZWFkT25seSAmJiAhdGl0bGVFeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyBDaGVjayBBbm5vdGF0aW9ucyBmb3IgRGVzY3JpcHRpb24gRmllbGRcblx0Y29uc3QgYklzRGVzY3JpcHRpb25SZWFkT25seSA9IGlzUmVhZE9ubHlGcm9tU3RhdGljQW5ub3RhdGlvbnMob0Rlc2NyaXB0aW9uQW5ub3RhdGlvbnMsIG9GaWVsZERlc2NyaXB0aW9uRmllbGRDb250cm9sKTtcblx0Y29uc3QgZGVzY3JpcHRpb25FeHByZXNzaW9uID0gcmVhZE9ubHlFeHByZXNzaW9uRnJvbUR5bmFtaWNBbm5vdGF0aW9ucyhvRmllbGREZXNjcmlwdGlvbkZpZWxkQ29udHJvbCk7XG5cdC8vIFRoZXJlIGlzIG5vIGV4cHJlc3Npb24gYW5kIHRoZSBkZXNjcmlwdGlvbiBpcyBub3QgcmVhZHkgb25seSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhbiBlZGl0YWJsZSBoZWFkZXJcblx0aWYgKCFiSXNEZXNjcmlwdGlvblJlYWRPbmx5ICYmICFkZXNjcmlwdGlvbkV4cHJlc3Npb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEJvdGggdGl0bGUgYW5kIGRlc2NyaXB0aW9uIGFyZSBub3QgZWRpdGFibGUgYW5kIHRoZXJlIGFyZSBubyBkeW5hbWljIGFubm90YXRpb25zXG5cdGlmIChiSXNUaXRsZVJlYWRPbmx5ICYmIGJJc0Rlc2NyaXB0aW9uUmVhZE9ubHkgJiYgIXRpdGxlRXhwcmVzc2lvbiAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gTm93IGNvbWJpbmUgZXhwcmVzc2lvbnNcblx0aWYgKHRpdGxlRXhwcmVzc2lvbiAmJiAhZGVzY3JpcHRpb25FeHByZXNzaW9uKSB7XG5cdFx0cmV0dXJuIHRpdGxlRXhwcmVzc2lvbjtcblx0fSBlbHNlIGlmICghdGl0bGVFeHByZXNzaW9uICYmIGRlc2NyaXB0aW9uRXhwcmVzc2lvbikge1xuXHRcdHJldHVybiBkZXNjcmlwdGlvbkV4cHJlc3Npb247XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbWJpbmVUaXRsZUFuZERlc2NyaXB0aW9uRXhwcmVzc2lvbihvRmllbGRUaXRsZUZpZWxkQ29udHJvbCwgb0ZpZWxkRGVzY3JpcHRpb25GaWVsZENvbnRyb2wpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZVRpdGxlQW5kRGVzY3JpcHRpb25FeHByZXNzaW9uID0gZnVuY3Rpb24gKG9UaXRsZUZpZWxkQ29udHJvbDogYW55LCBvRGVzY3JpcHRpb25GaWVsZENvbnRyb2w6IGFueSkge1xuXHQvLyBJZiBib3RoIGhlYWRlciBhbmQgdGl0bGUgZmllbGQgYXJlIGJhc2VkIG9uIGR5bm1haWMgZmllbGQgY29udHJvbCwgdGhlIGVkaXRhYmxlIGhlYWRlclxuXHQvLyBpcyB2aXNpYmxlIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBpcyBub3QgcmVhZHkgb25seVxuXHRyZXR1cm4gXCJ7PSAlXCIgKyBvVGl0bGVGaWVsZENvbnRyb2wgKyBcIiA9PT0gMSA/ICggJVwiICsgb0Rlc2NyaXB0aW9uRmllbGRDb250cm9sICsgXCIgPT09IDEgPyBmYWxzZSA6IHRydWUgKSA6IHRydWUgfVwiO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IG9mIGRlbGV0ZSBidXR0b24uXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NFbnRpdHlTZXROYW1lXSBFbnRpdHkgc2V0IG5hbWVcbiAqIHJldHVybnMge3N0cmluZ30gIGJpbmRpbmcgZXhwcmVzc2lvbiAvIGZ1bmN0aW9uIHN0cmluZyBnZW5lcmF0ZWQgZnJvbSBjb21tYW5oZWxwZXIncyBmdW5jdGlvbiBnZW5lcmF0ZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JEZWxldGUgPSBmdW5jdGlvbiAoc0VudGl0eVNldE5hbWU6IGFueSkge1xuXHRjb25zdCBzRGVsZXRhYmxlQ29udGV4dHMgPSBcIiR7JHZpZXc+L2dldEJpbmRpbmdDb250ZXh0fVwiLFxuXHRcdHNUaXRsZSA9IFwiJHskdmlldz4vI2ZlOjpPYmplY3RQYWdlL2dldEhlYWRlclRpdGxlL2dldEV4cGFuZGVkSGVhZGluZy9nZXRJdGVtcy8xL2dldFRleHR9XCIsXG5cdFx0c0Rlc2NyaXB0aW9uID0gXCIkeyR2aWV3Pi8jZmU6Ok9iamVjdFBhZ2UvZ2V0SGVhZGVyVGl0bGUvZ2V0RXhwYW5kZWRDb250ZW50LzAvZ2V0SXRlbXMvMC9nZXRUZXh0fVwiO1xuXHRjb25zdCBvUGFyYW1zID0ge1xuXHRcdHRpdGxlOiBzVGl0bGUsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzRW50aXR5U2V0TmFtZSksXG5cdFx0ZGVzY3JpcHRpb246IHNEZXNjcmlwdGlvblxuXHR9O1xuXHRyZXR1cm4gQ29tbW9uSGVscGVyLmdlbmVyYXRlRnVuY3Rpb24oXCIuZWRpdEZsb3cuZGVsZXRlRG9jdW1lbnRcIiwgc0RlbGV0YWJsZUNvbnRleHRzLCBDb21tb25IZWxwZXIub2JqZWN0VG9TdHJpbmcob1BhcmFtcykpO1xufTtcblxuLypcbiAqIEdldCBFeHByZXNzaW9uIG9mIHByZXNzIGV2ZW50IG9mIEVkaXQgYnV0dG9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvRGF0YUZpZWxkXSBEYXRhIGZpZWxkIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtzRW50aXR5U2V0TmFtZV0gRW50aXR5IHNldCBuYW1lXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJBY3Rpb25dIEhlYWRlciBhY3Rpb24gb2JqZWN0XG4gKiByZXR1cm5zIHtzdHJpbmd9ICBiaW5kaW5nIGV4cHJlc3Npb24gLyBmdW5jdGlvbiBzdHJpbmcgZ2VuZXJhdGVkIGZyb20gY29tbWFuaGVscGVyJ3MgZnVuY3Rpb24gZ2VuZXJhdGVGdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJlc3NFeHByZXNzaW9uRm9yRWRpdCA9IGZ1bmN0aW9uIChvRGF0YUZpZWxkOiBhbnksIHNFbnRpdHlTZXROYW1lOiBhbnksIG9IZWFkZXJBY3Rpb246IGFueSkge1xuXHRjb25zdCBzRWRpdGFibGVDb250ZXh0cyA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0c0RhdGFGaWVsZEVudW1NZW1iZXIgPSBvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmIG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nW1wiJEVudW1NZW1iZXJcIl0sXG5cdFx0c0ludm9jYXRpb25Hcm91cCA9IHNEYXRhRmllbGRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCI7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vZ2V0QmluZGluZ0NvbnRleHR9XCIsXG5cdFx0ZW50aXR5U2V0TmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzRW50aXR5U2V0TmFtZSksXG5cdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXApLFxuXHRcdG1vZGVsOiBcIiR7JHNvdXJjZT4vfS5nZXRNb2RlbCgpXCIsXG5cdFx0bGFiZWw6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkxhYmVsLCB0cnVlKSxcblx0XHRpc05hdmlnYWJsZTogb0hlYWRlckFjdGlvbiAmJiBvSGVhZGVyQWN0aW9uLmlzTmF2aWdhYmxlLFxuXHRcdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbjpcblx0XHRcdG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb24gPyBgJyR7b0hlYWRlckFjdGlvbi5kZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb259J2AgOiB1bmRlZmluZWRcblx0fTtcblx0cmV0dXJuIENvbW1vbkhlbHBlci5nZW5lcmF0ZUZ1bmN0aW9uKFwiLmhhbmRsZXJzLm9uQ2FsbEFjdGlvblwiLCBcIiR7JHZpZXc+L31cIiwgc0VkaXRhYmxlQ29udGV4dHMsIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhvUGFyYW1zKSk7XG59O1xuXG4vKlxuICogTWV0aG9kIHRvIGdldCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlICdwcmVzcycgZXZlbnQgZm9yIGZvb3RlciBhbm5vdGF0aW9uIGFjdGlvbnNcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0RhdGFGaWVsZF0gRGF0YSBmaWVsZCBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc0VudGl0eVNldE5hbWVdIEVudGl0eSBzZXQgbmFtZVxuICogQHBhcmFtIHtvYmplY3R9IFtvSGVhZGVyQWN0aW9uXSBIZWFkZXIgYWN0aW9uIG9iamVjdFxuICogcmV0dXJucyB7c3RyaW5nfSAgQmluZGluZyBleHByZXNzaW9uIG9yIGZ1bmN0aW9uIHN0cmluZyB0aGF0IGlzIGdlbmVyYXRlZCBmcm9tIHRoZSBDb21tb25oZWxwZXIncyBmdW5jdGlvbiBnZW5lcmF0ZUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcmVzc0V4cHJlc3Npb25Gb3JGb290ZXJBbm5vdGF0aW9uQWN0aW9uID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IGFueSwgc0VudGl0eVNldE5hbWU6IGFueSwgb0hlYWRlckFjdGlvbjogYW55KSB7XG5cdGNvbnN0IHNBY3Rpb25Db250ZXh0cyA9IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMob0RhdGFGaWVsZCAmJiBvRGF0YUZpZWxkLkFjdGlvbiksXG5cdFx0c0RhdGFGaWVsZEVudW1NZW1iZXIgPSBvRGF0YUZpZWxkICYmIG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmIG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nW1wiJEVudW1NZW1iZXJcIl0sXG5cdFx0c0ludm9jYXRpb25Hcm91cCA9IHNEYXRhRmllbGRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIiA/IFwiQ2hhbmdlU2V0XCIgOiBcIklzb2xhdGVkXCI7XG5cdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0Y29udGV4dHM6IFwiJHskdmlldz4vI2ZlOjpPYmplY3RQYWdlL30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdGVudGl0eVNldE5hbWU6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoc0VudGl0eVNldE5hbWUpLFxuXHRcdGludm9jYXRpb25Hcm91cGluZzogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhzSW52b2NhdGlvbkdyb3VwKSxcblx0XHRtb2RlbDogXCIkeyRzb3VyY2U+L30uZ2V0TW9kZWwoKVwiLFxuXHRcdGxhYmVsOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQgJiYgb0RhdGFGaWVsZC5MYWJlbCwgdHJ1ZSksXG5cdFx0aXNOYXZpZ2FibGU6IG9IZWFkZXJBY3Rpb24gJiYgb0hlYWRlckFjdGlvbi5pc05hdmlnYWJsZSxcblx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246XG5cdFx0XHRvSGVhZGVyQWN0aW9uICYmIG9IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uID8gYCcke29IZWFkZXJBY3Rpb24uZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9ufSdgIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcIi5oYW5kbGVycy5vbkNhbGxBY3Rpb25cIiwgXCIkeyR2aWV3Pi99XCIsIHNBY3Rpb25Db250ZXh0cywgQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpKTtcbn07XG5cbi8qXG4gKiBHZXRzIHRoZSBiaW5kaW5nIG9mIHRoZSBjb250YWluZXIgSEJveCBmb3IgdGhlIGhlYWRlciBmYWNldC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb0NvbnRyb2xDb25maWd1cmF0aW9uXSBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvcm0gb2YgdGhlIHZpZXdEYXRhIG1vZGVsXG4gKiBAcGFyYW0ge29iamVjdH0gW29IZWFkZXJGYWNldF0gVGhlIG9iamVjdCBvZiB0aGUgaGVhZGVyIGZhY2V0XG4gKiByZXR1cm5zIHsqfSAgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmcm9tIGZ1bmN0aW9uIGdldEJpbmRpbmdXaXRoR3JvdXBJZEZyb21Db25maWcgb3IgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3Rhc2hhYmxlSEJveEJpbmRpbmcgPSBmdW5jdGlvbiAob0NvbnRyb2xDb25maWd1cmF0aW9uOiBhbnksIG9IZWFkZXJGYWNldDogYW55KSB7XG5cdGlmIChvSGVhZGVyRmFjZXQgJiYgb0hlYWRlckZhY2V0LkZhY2V0ICYmIG9IZWFkZXJGYWNldC5GYWNldC50YXJnZXRBbm5vdGF0aW9uVHlwZSA9PT0gXCJEYXRhUG9pbnRcIikge1xuXHRcdHJldHVybiBnZXRCaW5kaW5nV2l0aEdyb3VwSWRGcm9tQ29uZmlnKG9Db250cm9sQ29uZmlndXJhdGlvbiwgb0hlYWRlckZhY2V0LkZhY2V0LnRhcmdldEFubm90YXRpb25WYWx1ZSk7XG5cdH1cbn07XG5cbi8qXG4gKiBHZXRzIHRoZSAnUHJlc3MnIGV2ZW50IGV4cHJlc3Npb24gZm9yIHRoZSBleHRlcm5hbCBhbmQgaW50ZXJuYWwgZGF0YSBwb2ludCBsaW5rLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtvYmplY3R9IFtvQ29uZmlndXJhdGlvbl0gQ29udHJvbCBjb25maWd1cmF0aW9uIGZyb20gbWFuaWZlc3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb01hbmlmZXN0T3V0Ym91bmRdIE91dGJvdW5kcyBmcm9tIG1hbmlmZXN0XG4gKiByZXR1cm5zIHtzdHJpbmd9IFRoZSBydW50aW1lIGJpbmRpbmcgb2YgdGhlICdQcmVzcycgZXZlbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByZXNzRXhwcmVzc2lvbkZvckxpbmsgPSBmdW5jdGlvbiAob0NvbmZpZ3VyYXRpb246IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSkge1xuXHRpZiAob0NvbmZpZ3VyYXRpb24pIHtcblx0XHRpZiAob0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRPdXRib3VuZFwiXSAmJiBvQ29uZmlndXJhdGlvbltcInRhcmdldE91dGJvdW5kXCJdW1wib3V0Ym91bmRcIl0pIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFwiLmhhbmRsZXJzLm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKCRjb250cm9sbGVyLCAkeyRzb3VyY2U+fSwgXCIgK1xuXHRcdFx0XHRKU09OLnN0cmluZ2lmeShvTWFuaWZlc3RPdXRib3VuZCkgK1xuXHRcdFx0XHRcIixcIiArXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KG9Db25maWd1cmF0aW9uW1widGFyZ2V0T3V0Ym91bmRcIl1bXCJvdXRib3VuZFwiXSkgK1xuXHRcdFx0XHRcIilcIlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKG9Db25maWd1cmF0aW9uW1widGFyZ2V0U2VjdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBcIi5oYW5kbGVycy5uYXZpZ2F0ZVRvU3ViU2VjdGlvbigkY29udHJvbGxlciwgJ1wiICsgSlNPTi5zdHJpbmdpZnkob0NvbmZpZ3VyYXRpb25bXCJ0YXJnZXRTZWN0aW9uc1wiXSkgKyBcIicpXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyRm9ybUhib3hSZW5kZXJUeXBlID0gZnVuY3Rpb24gKGRhdGFGaWVsZDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmIChkYXRhRmllbGQ/LnRhcmdldE9iamVjdD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBcIkJhcmVcIjtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0QkEsSUFBTUEsVUFBVSxHQUFHQyxRQUFRLENBQUNELFVBQTVCOztFQU9BO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sSUFBTUUscUJBQXFCLEdBQUcsVUFDcENDLFdBRG9DLEVBRXBDQyxTQUZvQyxFQUdwQ0MsZUFIb0MsRUFJcENDLFVBSm9DLEVBS0Q7SUFB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
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Formatters for the Object Page
|
|
2
|
+
import { EntitySet } from "@sap-ux/vocabularies-types";
|
|
2
3
|
import type { DataField, DataFieldTypes, HeaderInfoType } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
3
4
|
import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
4
5
|
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
@@ -142,7 +143,7 @@ export const getExpressionForSaveButton = function (
|
|
|
142
143
|
const createButtonText = CommonUtils.getTranslatedText("T_OP_OBJECT_PAGE_CREATE", oViewData.resourceBundle);
|
|
143
144
|
let saveExpression;
|
|
144
145
|
|
|
145
|
-
if (fullContextPath.startingEntitySet.annotations.Session?.StickySessionSupported) {
|
|
146
|
+
if ((fullContextPath.startingEntitySet as EntitySet).annotations.Session?.StickySessionSupported) {
|
|
146
147
|
// If we're in sticky mode AND the ui is in create mode, show Create, else show Save
|
|
147
148
|
saveExpression = ifElse(UI.IsCreateModeSticky, createButtonText, saveButtonText);
|
|
148
149
|
} else {
|
|
@@ -820,3 +821,10 @@ export const getPressExpressionForLink = function (oConfiguration: any, oManifes
|
|
|
820
821
|
}
|
|
821
822
|
}
|
|
822
823
|
};
|
|
824
|
+
|
|
825
|
+
export const getHeaderFormHboxRenderType = function (dataField: DataModelObjectPath): string | undefined {
|
|
826
|
+
if (dataField?.targetObject?.$Type === UIAnnotationTypes.DataFieldForAnnotation) {
|
|
827
|
+
return undefined;
|
|
828
|
+
}
|
|
829
|
+
return "Bare";
|
|
830
|
+
};
|