@sapui5/sap.fe.core 1.103.0 → 1.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +12 -5
- package/src/sap/fe/core/AppComponent.ts +9 -3
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/CommonUtils.js +10 -34
- package/src/sap/fe/core/CommonUtils.ts +10 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +582 -207
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +237 -88
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +4 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +257 -219
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +103 -108
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +80 -54
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +40 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +28 -26
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +89 -47
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +85 -48
- package/src/sap/fe/core/controllerextensions/MassEdit.js +2 -2
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Share.js +153 -122
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +139 -73
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -90
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +18 -13
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +17 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +88 -17
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +105 -31
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -4
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +28 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +10 -17
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -6
- package/src/sap/fe/core/controls/FileWrapper.js +6 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +15 -4
- package/src/sap/fe/core/converters/MetaModelConverter.ts +10 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +4 -8
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +25 -30
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +9 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +8 -15
- package/src/sap/fe/core/converters/controls/Common/Table.ts +14 -30
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +3 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +3 -3
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +27 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -27
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/helpers/BindingToolkit.js +36 -13
- package/src/sap/fe/core/helpers/BindingToolkit.ts +37 -11
- package/src/sap/fe/core/helpers/ClassSupport.js +30 -2
- package/src/sap/fe/core/helpers/ClassSupport.ts +23 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +94 -89
- package/src/sap/fe/core/helpers/MassEditHelper.ts +128 -157
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -37
- package/src/sap/fe/core/messagebundle_ar.properties +20 -40
- package/src/sap/fe/core/messagebundle_bg.properties +20 -40
- package/src/sap/fe/core/messagebundle_ca.properties +20 -40
- package/src/sap/fe/core/messagebundle_cs.properties +20 -40
- package/src/sap/fe/core/messagebundle_cy.properties +20 -40
- package/src/sap/fe/core/messagebundle_da.properties +20 -40
- package/src/sap/fe/core/messagebundle_de.properties +20 -40
- package/src/sap/fe/core/messagebundle_el.properties +20 -40
- package/src/sap/fe/core/messagebundle_en.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +19 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +22 -18
- package/src/sap/fe/core/messagebundle_es.properties +22 -42
- package/src/sap/fe/core/messagebundle_es_MX.properties +20 -40
- package/src/sap/fe/core/messagebundle_et.properties +20 -40
- package/src/sap/fe/core/messagebundle_fi.properties +20 -40
- package/src/sap/fe/core/messagebundle_fr.properties +21 -41
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -40
- package/src/sap/fe/core/messagebundle_hi.properties +20 -40
- package/src/sap/fe/core/messagebundle_hr.properties +20 -40
- package/src/sap/fe/core/messagebundle_hu.properties +20 -40
- package/src/sap/fe/core/messagebundle_id.properties +20 -40
- package/src/sap/fe/core/messagebundle_it.properties +20 -40
- package/src/sap/fe/core/messagebundle_iw.properties +20 -40
- package/src/sap/fe/core/messagebundle_ja.properties +20 -40
- package/src/sap/fe/core/messagebundle_kk.properties +20 -40
- package/src/sap/fe/core/messagebundle_ko.properties +25 -45
- package/src/sap/fe/core/messagebundle_lt.properties +20 -40
- package/src/sap/fe/core/messagebundle_lv.properties +20 -40
- package/src/sap/fe/core/messagebundle_ms.properties +20 -40
- package/src/sap/fe/core/messagebundle_nl.properties +22 -42
- package/src/sap/fe/core/messagebundle_no.properties +20 -40
- package/src/sap/fe/core/messagebundle_pl.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt.properties +21 -41
- package/src/sap/fe/core/messagebundle_pt_PT.properties +20 -40
- package/src/sap/fe/core/messagebundle_ro.properties +20 -40
- package/src/sap/fe/core/messagebundle_ru.properties +20 -40
- package/src/sap/fe/core/messagebundle_sh.properties +20 -40
- package/src/sap/fe/core/messagebundle_sk.properties +20 -40
- package/src/sap/fe/core/messagebundle_sl.properties +20 -40
- package/src/sap/fe/core/messagebundle_sv.properties +20 -40
- package/src/sap/fe/core/messagebundle_th.properties +20 -40
- package/src/sap/fe/core/messagebundle_tr.properties +20 -40
- package/src/sap/fe/core/messagebundle_uk.properties +20 -40
- package/src/sap/fe/core/messagebundle_vi.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_CN.properties +20 -40
- package/src/sap/fe/core/messagebundle_zh_TW.properties +20 -40
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +96 -68
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +58 -59
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -7
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ShellServicesFactory.js +21 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +211 -190
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +114 -120
- package/src/sap/fe/core/templating/FilterHelper.js +7 -7
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -5
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
|
@@ -273,8 +273,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
273
273
|
var editModeValues = Object.keys(EditMode);
|
|
274
274
|
var editModeIsStatic = !!expBinding && editModeValues.includes(expBinding);
|
|
275
275
|
var editable = !!expBinding && (editModeIsStatic && expBinding === EditMode.Editable || !editModeIsStatic);
|
|
276
|
+
var navPropertyWithValueHelp = sDataPropertyPath.includes("/") && bValueHelpEnabled;
|
|
276
277
|
|
|
277
|
-
if (!editable) {
|
|
278
|
+
if (!editable || navPropertyWithValueHelp) {
|
|
278
279
|
return;
|
|
279
280
|
}
|
|
280
281
|
|
|
@@ -336,7 +337,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
336
337
|
"massEditTitle": oResourceBundle.getText("C_MASS_EDIT_DIALOG_TITLE", iSelectedContexts.toString()),
|
|
337
338
|
"applyButtonText": bDisplayMode ? oResourceBundle.getText("C_MASS_EDIT_SAVE_BUTTON_TEXT") : oResourceBundle.getText("C_MASS_EDIT_APPLY_BUTTON_TEXT"),
|
|
338
339
|
"useValueHelpValue": "< Use Value Help >",
|
|
339
|
-
"cancelButtonText": oResourceBundle.getText("
|
|
340
|
+
"cancelButtonText": oResourceBundle.getText("C_COMMON_OBJECT_PAGE_CANCEL"),
|
|
340
341
|
"noFields": oResourceBundle.getText("C_MASS_EDIT_NO_EDITABLE_FIELDS"),
|
|
341
342
|
"okButtonText": oResourceBundle.getText("C_COMMON_DIALOG_OK")
|
|
342
343
|
};
|
|
@@ -847,16 +848,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
847
848
|
* @returns Promise returning instance of dialog.
|
|
848
849
|
*/
|
|
849
850
|
createDialog: function (oTable, aContexts, oController) {
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
851
|
+
try {
|
|
852
|
+
var sFragmentName = "sap/fe/core/controls/massEdit/MassEditDialog",
|
|
853
|
+
aDataArray = [],
|
|
854
|
+
oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
855
|
+
oDefaultValues = MassEditHelper.getDefaultTextsForDialog(oResourceBundle, aContexts.length, oTable),
|
|
856
|
+
oDataFieldModel = MassEditHelper.prepareDataForDialog(oTable, aContexts, aDataArray),
|
|
857
|
+
dialogContext = MassEditHelper.getDialogContext(oTable),
|
|
858
|
+
oDialogDataModel = MassEditHelper.setRuntimeModelOnDialog(aContexts, aDataArray, oDefaultValues, dialogContext);
|
|
858
859
|
var oFragment = XMLTemplateProcessor.loadTemplate(sFragmentName, "fragment");
|
|
859
|
-
return Promise.resolve(XMLPreprocessor.process(oFragment, {
|
|
860
|
+
return Promise.resolve(Promise.resolve(XMLPreprocessor.process(oFragment, {
|
|
860
861
|
name: sFragmentName
|
|
861
862
|
}, {
|
|
862
863
|
bindingContexts: {
|
|
@@ -865,10 +866,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
865
866
|
models: {
|
|
866
867
|
dataFieldModel: oDataFieldModel
|
|
867
868
|
}
|
|
868
|
-
})).then(function (oCreatedFragment) {
|
|
869
|
-
return Fragment.load({
|
|
869
|
+
}))).then(function (oCreatedFragment) {
|
|
870
|
+
return Promise.resolve(Fragment.load({
|
|
870
871
|
definition: oCreatedFragment
|
|
871
|
-
}).then(function (oDialogContent) {
|
|
872
|
+
})).then(function (oDialogContent) {
|
|
872
873
|
var DraftStatus = FELibrary.DraftStatus;
|
|
873
874
|
var oDialog = new Dialog({
|
|
874
875
|
resizable: true,
|
|
@@ -879,90 +880,92 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
879
880
|
text: MassEditHelper.helpers.getExpBindingForApplyButtonTxt(oDefaultValues, oDataFieldModel.getObject("/")),
|
|
880
881
|
type: "Emphasized",
|
|
881
882
|
press: function (oEvent) {
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
883
|
+
try {
|
|
884
|
+
var _oController$getView, _oController$getView$;
|
|
885
|
+
|
|
886
|
+
(_oController$getView = oController.getView()) === null || _oController$getView === void 0 ? void 0 : (_oController$getView$ = _oController$getView.getBindingContext("internal")) === null || _oController$getView$ === void 0 ? void 0 : _oController$getView$.setProperty("skipPatchHandlers", true);
|
|
887
|
+
var oInDialog = oEvent.getSource().getParent();
|
|
888
|
+
var oModel = oInDialog.getModel("fieldsInfo");
|
|
889
|
+
var aResults = oModel.getProperty("/results");
|
|
890
|
+
var aPropertyReadableInfo = oModel.getProperty("/readablePropertyData");
|
|
891
|
+
var changePromise = [];
|
|
892
|
+
var bReadOnlyField = false;
|
|
893
|
+
var groupId;
|
|
894
|
+
var errorValues = [];
|
|
895
|
+
aContexts.forEach(function (oSelectedContext, idx) {
|
|
896
|
+
aResults.forEach(function (oResult) {
|
|
897
|
+
//TODO - Add save implementation for Value Help.
|
|
898
|
+
if (aPropertyReadableInfo) {
|
|
899
|
+
bReadOnlyField = aPropertyReadableInfo.some(function (oPropertyInfo) {
|
|
900
|
+
if (oResult.keyValue === oPropertyInfo.property) {
|
|
901
|
+
if (oPropertyInfo.type === "Default") {
|
|
902
|
+
return oPropertyInfo.value === true;
|
|
903
|
+
} else if (oPropertyInfo.type === "Path" && oPropertyInfo.propertyValue && oPropertyInfo.propertyPath) {
|
|
904
|
+
return oSelectedContext.getObject(oPropertyInfo.propertyPath) === oPropertyInfo.propertyValue;
|
|
905
|
+
}
|
|
904
906
|
}
|
|
905
|
-
}
|
|
906
|
-
}
|
|
907
|
-
}
|
|
907
|
+
});
|
|
908
|
+
}
|
|
908
909
|
|
|
909
|
-
|
|
910
|
+
groupId = "$auto.".concat(idx); //index += 1;
|
|
910
911
|
|
|
911
|
-
|
|
912
|
+
oController._editFlow.setDraftStatus(DraftStatus.Saving); //let promiseCount = 0;
|
|
912
913
|
|
|
913
914
|
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
}
|
|
922
|
-
});
|
|
923
|
-
}); // eslint-disable-next-line promise/catch-or-return
|
|
924
|
-
|
|
925
|
-
Promise.allSettled(changePromise).then(function () {
|
|
926
|
-
var oListBinding = oTable.getRowBinding();
|
|
927
|
-
var oExtensionAPI = oController && oController.getExtensionAPI();
|
|
928
|
-
return oExtensionAPI.refresh(oListBinding.getPath()).then(function () {
|
|
929
|
-
var subtitleColumn = CommonUtils.getMessageColumn(oTable);
|
|
930
|
-
var messages = sap.ui.getCore().getMessageManager().getMessageModel().getData();
|
|
931
|
-
var boundTransitionErrorContexts = [];
|
|
932
|
-
messages.forEach(function (message) {
|
|
933
|
-
var messageTargets = message.getTargets();
|
|
934
|
-
|
|
935
|
-
if (messageTargets && messageTargets.length === 1 && messageTargets[0].length && message.persistent === true) {
|
|
936
|
-
var boundTransitionErrorContext = aContexts.find(function (oContext) {
|
|
937
|
-
return message.getTarget().indexOf(oContext.getPath()) !== -1;
|
|
938
|
-
});
|
|
939
|
-
boundTransitionErrorContexts.push(boundTransitionErrorContext);
|
|
940
|
-
message.additionalText = boundTransitionErrorContext ? boundTransitionErrorContext.getObject()[subtitleColumn] : undefined;
|
|
915
|
+
if (oResult.keyValue && oResult.value !== "Default" && !bReadOnlyField) {
|
|
916
|
+
changePromise.push(oSelectedContext.setProperty(oResult.keyValue, oResult.value, groupId).then(function () {
|
|
917
|
+
return oSelectedContext;
|
|
918
|
+
}).catch(function (oError) {
|
|
919
|
+
errorValues.push(oSelectedContext.getObject());
|
|
920
|
+
Log.error("Mass Edit: Something went wrong in updating entries.", oError);
|
|
921
|
+
}));
|
|
941
922
|
}
|
|
942
923
|
});
|
|
924
|
+
});
|
|
925
|
+
return Promise.resolve(Promise.allSettled(changePromise)).then(function () {
|
|
926
|
+
var oListBinding = oTable.getRowBinding();
|
|
927
|
+
var oExtensionAPI = oController && oController.getExtensionAPI();
|
|
928
|
+
return Promise.resolve(oExtensionAPI.refresh(oListBinding.getPath())).then(function () {
|
|
929
|
+
var subtitleColumn = CommonUtils.getMessageColumn(oTable);
|
|
930
|
+
var messages = sap.ui.getCore().getMessageManager().getMessageModel().getData();
|
|
931
|
+
var boundTransitionErrorContexts = [];
|
|
932
|
+
messages.forEach(function (message) {
|
|
933
|
+
var messageTargets = message.getTargets();
|
|
934
|
+
|
|
935
|
+
if (messageTargets && messageTargets.length === 1 && messageTargets[0].length && message.persistent === true) {
|
|
936
|
+
var boundTransitionErrorContext = aContexts.find(function (oContext) {
|
|
937
|
+
return message.getTarget().indexOf(oContext.getPath()) !== -1;
|
|
938
|
+
});
|
|
939
|
+
boundTransitionErrorContexts.push(boundTransitionErrorContext);
|
|
940
|
+
message.additionalText = boundTransitionErrorContext ? boundTransitionErrorContext.getObject()[subtitleColumn] : undefined;
|
|
941
|
+
}
|
|
942
|
+
});
|
|
943
943
|
|
|
944
|
-
|
|
945
|
-
|
|
944
|
+
if (aResults.length > 0 && boundTransitionErrorContexts.length === 0 && errorValues.length === 0) {
|
|
945
|
+
oController._editFlow.setDraftStatus(DraftStatus.Saved);
|
|
946
946
|
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
947
|
+
var successToast = oResourceBundle.getText("C_MASS_EDIT_SUCCESS_TOAST");
|
|
948
|
+
MessageToast.show(successToast);
|
|
949
|
+
} else if (errorValues.length + boundTransitionErrorContexts.length < oTable.getSelectedContexts().length) {
|
|
950
|
+
oController._editFlow.setDraftStatus(DraftStatus.Saved);
|
|
951
|
+
} else if (errorValues.length + boundTransitionErrorContexts.length === oTable.getSelectedContexts().length) {
|
|
952
|
+
oController._editFlow.setDraftStatus(DraftStatus.Clear);
|
|
953
|
+
}
|
|
954
954
|
|
|
955
|
-
|
|
955
|
+
oController._editFlow.getMessageHandler().showMessages();
|
|
956
956
|
|
|
957
|
-
|
|
958
|
-
|
|
957
|
+
if (oInDialog.isOpen()) {
|
|
958
|
+
var _oController$getView2, _oController$getView3;
|
|
959
959
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
960
|
+
oInDialog.close();
|
|
961
|
+
oInDialog.destroy();
|
|
962
|
+
(_oController$getView2 = oController.getView()) === null || _oController$getView2 === void 0 ? void 0 : (_oController$getView3 = _oController$getView2.getBindingContext("internal")) === null || _oController$getView3 === void 0 ? void 0 : _oController$getView3.setProperty("skipPatchHandlers", false);
|
|
963
|
+
}
|
|
964
|
+
});
|
|
964
965
|
});
|
|
965
|
-
})
|
|
966
|
+
} catch (e) {
|
|
967
|
+
return Promise.reject(e);
|
|
968
|
+
}
|
|
966
969
|
}
|
|
967
970
|
}),
|
|
968
971
|
endButton: new Button({
|
|
@@ -979,10 +982,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
979
982
|
oDialog.setModel(oDialogDataModel, "fieldsInfo");
|
|
980
983
|
oDialog.setModel(model);
|
|
981
984
|
oDialog.setBindingContext(dialogContext);
|
|
982
|
-
|
|
985
|
+
return oDialog;
|
|
983
986
|
});
|
|
984
|
-
})
|
|
985
|
-
})
|
|
987
|
+
});
|
|
988
|
+
} catch (e) {
|
|
989
|
+
return Promise.reject(e);
|
|
990
|
+
}
|
|
986
991
|
},
|
|
987
992
|
helpers: {
|
|
988
993
|
getBindingExpForHasEditableFields: function (fields, editable) {
|
|
@@ -1003,4 +1008,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/B
|
|
|
1003
1008
|
};
|
|
1004
1009
|
return MassEditHelper;
|
|
1005
1010
|
}, false);
|
|
1006
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0SGVscGVyLnRzIl0sIm5hbWVzIjpbIk1hc3NFZGl0SGVscGVyIiwiaW5pdExhc3RMZXZlbE9mUHJvcGVydHlQYXRoIiwic1BhdGgiLCJhVmFsdWVzIiwiYUZpbmFsUGF0aCIsImluZGV4IiwiYVBhdGhzIiwic3BsaXQiLCJzRnVsbFBhdGgiLCJmb3JFYWNoIiwic1Byb3BlcnR5UGF0aCIsImdldFVuaXF1ZVZhbHVlcyIsInNWYWx1ZSIsInNlbGYiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwiZ2V0VmFsdWVGb3JNdWx0aUxldmVsUGF0aCIsInNEYXRhUHJvcGVydHlQYXRoIiwib1ZhbHVlcyIsImFQcm9wZXJ0eVBhdGhzIiwiUmVzdWx0IiwiZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveCIsImFDb250ZXh0cyIsImxlbmd0aCIsIm9TZWxlY3RlZENvbnRleHQiLCJhUHJvcGVydHlWYWx1ZXMiLCJvQ29udGV4dCIsIm9EYXRhT2JqZWN0IiwiZ2V0T2JqZWN0Iiwic011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJwdXNoIiwiYVVuaXF1ZVByb3BlcnR5VmFsdWVzIiwiZmlsdGVyIiwiZ2V0SGlkZGVuVmFsdWVGb3JDb250ZXh0cyIsImhpZGRlblZhbHVlIiwiJFBhdGgiLCJzb21lIiwiZ2V0SW5wdXRUeXBlIiwicHJvcGVydHlJbmZvIiwiZGF0YUZpZWxkQ29udmVydGVkIiwib0RhdGFNb2RlbFBhdGgiLCJlZGl0U3R5bGVQcm9wZXJ0aWVzIiwiaW5wdXRUeXBlIiwic2V0RWRpdFN0eWxlUHJvcGVydGllcyIsImVkaXRTdHlsZSIsImlzVmFsaWRGb3JNYXNzRWRpdCIsImlzQ29sbGVjdGlvbkZpZWxkIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiZ2V0SXNGaWVsZEdycCIsIiRUeXBlIiwiVGFyZ2V0IiwidmFsdWUiLCJnZXRUZXh0UGF0aCIsInByb3BlcnR5IiwidGV4dEJpbmRpbmciLCJkaXNwbGF5TW9kZSIsImRlc2NyaXB0aW9uUGF0aCIsInBhdGgiLCJwYXJhbWV0ZXJzIiwicHJvcHMiLCJwcmVwYXJlRGF0YUZvckRpYWxvZyIsIm9UYWJsZSIsImFEYXRhQXJyYXkiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ3VycmVudEVudGl0eVNldE5hbWUiLCJkYXRhIiwiYVRhYmxlRmllbGRzIiwiZ2V0VGFibGVGaWVsZHMiLCJvRW50aXR5VHlwZUNvbnRleHQiLCJnZXRDb250ZXh0Iiwib0VudGl0eVNldENvbnRleHQiLCJvRGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9EYXRhRmllbGRNb2RlbCIsIkpTT05Nb2RlbCIsIm9SZXN1bHQiLCJzTGFiZWxUZXh0IiwiYlZhbHVlSGVscEVuYWJsZWQiLCJzVW5pdFByb3BlcnR5UGF0aCIsImJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCIsIm9UZXh0QmluZGluZyIsIm9Db2x1bW5JbmZvIiwiZGF0YVByb3BlcnR5Iiwib1Byb3BlcnR5SW5mbyIsImxhYmVsIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJvUHJvcGVydHkiLCJuYW1lIiwiZ2V0VGV4dEJpbmRpbmciLCJvRmllbGRDb250ZXh0IiwiYW5ub3RhdGlvblBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJvUHJvcGVydHlDb250ZXh0Iiwib0ludGVyZmFjZSIsImdldEludGVyZmFjZSIsIlZhbHVlIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJiSGlkZGVuRmllbGQiLCJpc0ltYWdlIiwiY29udGV4dCIsImdldFBhdGgiLCJfdHlwZSIsIiR0YXJnZXQiLCJjaGFydFByb3BlcnR5IiwidGVybSIsImlzQWN0aW9uIiwiQWN0aW9uIiwiaXNGaWVsZEdycCIsImhhc1ZhbHVlSGVscCIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwidW5pdFByb3BlcnR5SW5mbyIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsImV4cEJpbmRpbmciLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiZWRpdE1vZGVWYWx1ZXMiLCJPYmplY3QiLCJrZXlzIiwiRWRpdE1vZGUiLCJlZGl0TW9kZUlzU3RhdGljIiwiaW5jbHVkZXMiLCJlZGl0YWJsZSIsIkVkaXRhYmxlIiwiaXNSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJudWxsYWJsZSIsInNldERhdGEiLCJhQ29sdW1ucyIsImdldENvbHVtbnMiLCJjb2x1bW5zRGF0YSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJtYXAiLCJvQ29sdW1uIiwic0RhdGFQcm9wZXJ0eSIsImdldERhdGFQcm9wZXJ0eSIsImFSZWFsdGVkQ29sdW1uSW5mbyIsInR5cGUiLCJnZXRIZWFkZXIiLCJnZXREZWZhdWx0VGV4dHNGb3JEaWFsb2ciLCJvUmVzb3VyY2VCdW5kbGUiLCJpU2VsZWN0ZWRDb250ZXh0cyIsImJEaXNwbGF5TW9kZSIsImdldFRleHQiLCJ0b1N0cmluZyIsInNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyIsIm9EZWZhdWx0VmFsdWVzIiwiYlVPTUZpZWxkIiwidW5pdFByb3BlcnR5Iiwic0lucHV0VHlwZSIsImJQcm9wZXJ0eVJlcXVpcmVkIiwiaXNGaWVsZFJlcXVpcmVkIiwic1N1ZmZpeEZvcktlZXBFeGlzdGluZyIsImRlZmF1bHRPcHRpb25zIiwic2VsZWN0T3B0aW9uc0V4aXN0Iiwic2VsZWN0T3B0aW9ucyIsImtlZXBFbnRyeSIsInRleHQiLCJrZWVwRXhpc3RpbmdQcmVmaXgiLCJrZXkiLCJmYWxzZUVudHJ5IiwidGV4dEluZm8iLCJ0cnV0aHlFbnRyeSIsInVuc2hpZnQiLCJpc1ZhbHVlSGVscEVuYWJsZWQiLCJpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0IiwidmhkRW50cnkiLCJ1c2VWYWx1ZUhlbHBWYWx1ZSIsImNsZWFyRW50cnkiLCJjbGVhckZpZWxkVmFsdWUiLCJlbXB0eUVudHJ5IiwibGVhdmVCbGFua1ZhbHVlIiwiZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyIsInNlbGVjdGVkQ29udGV4dCIsImRlc2NyaXB0aW9uVmFsdWUiLCJmdWxsVGV4dCIsIkxvZyIsImluZm8iLCJpc0VkaXRhYmxlIiwiYW55IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwib25Db250ZXh0RWRpdGFibGVDaGFuZ2UiLCJvRGlhbG9nRGF0YU1vZGVsIiwib2JqZWN0c0ZvclZpc2liaWxpdHkiLCJnZXRQcm9wZXJ0eSIsInNldFByb3BlcnR5IiwidXBkYXRlT25Db250ZXh0Q2hhbmdlIiwibU9Ub1VzZSIsInZhbHVlcyIsImF0dGFjaENoYW5nZSIsImJpbmQiLCJnZXRCb3VuZE9iamVjdCIsIkFueSIsIm1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEZpZWxkVmlzaWJsaXR5IiwiaXNDb250ZXh0RWRpdGFibGUiLCJzZXRSdW50aW1lTW9kZWxPbkRpYWxvZyIsImRpYWxvZ0NvbnRleHQiLCJhVW5pdERhdGEiLCJhUmVzdWx0cyIsImFSZWFkT25seUZpZWxkSW5mbyIsIm9EYXRhIiwibm9GaWVsZHMiLCJvSW5EYXRhIiwib1RleHRJbmZvIiwic1Byb3BlcnR5S2V5Iiwic1VuaXRQcm9wZXJ0eU5hbWUiLCJvRGlzdGluY3RWYWx1ZU1hcCIsIm9EaXN0aW5jdFVuaXRNYXAiLCJzTXVsdGlMZXZlbFBhdGhWYWx1ZSIsImRpc3BsYXkiLCJ2YWx1ZVBhdGgiLCJlbnRyeSIsInVuaXRFbnRyeSIsInNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSIsInNlbGVjdGVkS2V5IiwiYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMiLCJvYmoiLCJiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMiLCJpc1Byb3BlcnR5UmVhZE9ubHkiLCJvcGVyYW5kcyIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiZWRpdE1vZGUiLCJ2aXNpYmxlIiwiZ2V0RGlhbG9nQ29udGV4dCIsInRhYmxlIiwiZGlhbG9nIiwidHJhbnNDdHgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxpc3RCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJvbkRpYWxvZ09wZW4iLCJldmVudCIsInNvdXJjZSIsImdldFNvdXJjZSIsImZpZWxkc0luZm9Nb2RlbCIsImNyZWF0ZURpYWxvZyIsIm9Db250cm9sbGVyIiwic0ZyYWdtZW50TmFtZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9GcmFnbWVudCIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImRhdGFGaWVsZE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtb2RlbHMiLCJ0aGVuIiwib0NyZWF0ZWRGcmFnbWVudCIsIkZyYWdtZW50IiwibG9hZCIsImRlZmluaXRpb24iLCJvRGlhbG9nQ29udGVudCIsIkRyYWZ0U3RhdHVzIiwiRkVMaWJyYXJ5Iiwib0RpYWxvZyIsIkRpYWxvZyIsInJlc2l6YWJsZSIsInRpdGxlIiwibWFzc0VkaXRUaXRsZSIsImNvbnRlbnQiLCJhZnRlck9wZW4iLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsImhlbHBlcnMiLCJnZXRFeHBCaW5kaW5nRm9yQXBwbHlCdXR0b25UeHQiLCJwcmVzcyIsIm9FdmVudCIsImdldFZpZXciLCJvSW5EaWFsb2ciLCJvTW9kZWwiLCJhUHJvcGVydHlSZWFkYWJsZUluZm8iLCJjaGFuZ2VQcm9taXNlIiwiYlJlYWRPbmx5RmllbGQiLCJncm91cElkIiwiZXJyb3JWYWx1ZXMiLCJpZHgiLCJrZXlWYWx1ZSIsIl9lZGl0RmxvdyIsInNldERyYWZ0U3RhdHVzIiwiU2F2aW5nIiwiY2F0Y2giLCJvRXJyb3IiLCJlcnJvciIsImFsbFNldHRsZWQiLCJvTGlzdEJpbmRpbmciLCJvRXh0ZW5zaW9uQVBJIiwiZ2V0RXh0ZW5zaW9uQVBJIiwicmVmcmVzaCIsInN1YnRpdGxlQ29sdW1uIiwiZ2V0TWVzc2FnZUNvbHVtbiIsIm1lc3NhZ2VzIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0cyIsIm1lc3NhZ2UiLCJtZXNzYWdlVGFyZ2V0cyIsImdldFRhcmdldHMiLCJwZXJzaXN0ZW50IiwiYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0IiwiZmluZCIsImdldFRhcmdldCIsImFkZGl0aW9uYWxUZXh0IiwiU2F2ZWQiLCJzdWNjZXNzVG9hc3QiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkNsZWFyIiwiZ2V0TWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZXMiLCJpc09wZW4iLCJjbG9zZSIsImRlc3Ryb3kiLCJlbmRCdXR0b24iLCJjYW5jZWxCdXR0b25UZXh0IiwiaGFzRWRpdGFibGVGaWVsZHNCaW5kaW5nIiwiZ2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzIiwiZmllbGRzIiwidG90YWxFeHAiLCJyZWR1Y2UiLCJleHByZXNzaW9uIiwiZmllbGQiLCJvciIsInBhdGhJbk1vZGVsIiwibm90IiwiZGVmYXVsdFZhbHVlcyIsImVkaXRhYmxlRXhwIiwiaWZFbHNlIiwiYXBwbHlCdXR0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QUFFLFVBQUNFLE1BQUQsRUFBYy9OLFFBQWQsRUFBb0M7QUFDN0QsZUFBTzRPLGlCQUFpQixDQUFDOVcsY0FBYyxDQUFDdVMsT0FBZixDQUF1QnlELGlDQUF2QixDQUF5REMsTUFBekQsRUFBaUUvTixRQUFqRSxDQUFELENBQXhCO0FBQ0E7QUFyQk87QUExOUJhLEdBQXZCO1NBbS9CZWxJLGMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc0N1cnJlbmN5LFxuXHRoYXNVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIHNldEVkaXRTdHlsZVByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvRmllbGQubWV0YWRhdGFcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFueVR5cGUgfSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc0NvbGxlY3Rpb25GaWVsZCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGZvciBtYXNzIGVkaXQgZnVuY3Rpb25hbGl0eSAqL1xudHlwZSBUZXh0QXJyYW5nZW1lbnRJbmZvID0ge1xuXHR0ZXh0QXJyYW5nZW1lbnQ6IHN0cmluZztcblx0dmFsdWVQYXRoOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0ZnVsbFRleHQ6IHN0cmluZztcbn07XG5cbnR5cGUgQmluZGluZ0luZm8gPSB7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG1vZGVsPzogc3RyaW5nIHwgb2JqZWN0O1xuXHRwYXJhbWV0ZXJzPzogQXJyYXk8QmluZGluZ0luZm8+O1xufTtcblxuY29uc3QgTWFzc0VkaXRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdmFsdWUgYXQgZmluYWwgb3IgZGVlcGVzdCBsZXZlbCBwYXRoIHdpdGggYSBibGFuayBhcnJheS5cblx0ICogUmV0dXJuIGFuIGVtcHR5IGFycmF5IHBvaW50aW5nIHRvIHRoZSBmaW5hbCBvciBkZWVwZXN0IGxldmVsIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBhVmFsdWVzIEFycmF5IGluc3RhbmNlIHdoZXJlIHRoZSBkZWZhdWx0IGRhdGEgbmVlZHMgdG8gYmUgYWRkZWRcblx0ICogQHJldHVybnMgVGhlIGZpbmFsIHBhdGhcblx0ICovXG5cdGluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aDogZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIGFWYWx1ZXM6IGFueSAvKiwgdHJhbnNDdHg6IENvbnRleHQgKi8pIHtcblx0XHRsZXQgYUZpbmFsUGF0aDogYW55O1xuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgYVBhdGhzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBzRnVsbFBhdGggPSBcIlwiO1xuXHRcdGFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdGlmICghYVZhbHVlc1tzUHJvcGVydHlQYXRoXSAmJiBpbmRleCA9PT0gMCkge1xuXHRcdFx0XHRhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0XHRcdGFGaW5hbFBhdGggPSBhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdO1xuXHRcdFx0XHRzRnVsbFBhdGggPSBzRnVsbFBhdGggKyBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fSBlbHNlIGlmICghYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRzRnVsbFBhdGggPSBgJHtzRnVsbFBhdGh9LyR7c1Byb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRpZiAoc0Z1bGxQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHRcdGFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF0gPSB7fTtcblx0XHRcdFx0XHRhRmluYWxQYXRoID0gYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRmluYWxQYXRoW3NQcm9wZXJ0eVBhdGhdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUZpbmFsUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB1bmlxdWUgdmFsdWVzIGZvciBnaXZlbiBhcnJheSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVmFsdWUgUHJvcGVydHkgdmFsdWVcblx0ICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuXHQgKiBAcGFyYW0gc2VsZiBJbnN0YW5jZSBvZiB0aGUgYXJyYXlcblx0ICogQHJldHVybnMgVGhlIHVuaXF1ZSB2YWx1ZVxuXHQgKi9cblx0Z2V0VW5pcXVlVmFsdWVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIHNlbGY6IGFueVtdKSB7XG5cdFx0aWYgKHNWYWx1ZSAhPSB1bmRlZmluZWQgJiYgc1ZhbHVlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBzZWxmLmluZGV4T2Yoc1ZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBtdWx0aS1sZXZlbCBwYXRoIChmb3IgZXhhbXBsZTogX01hdGVyaWFscy9NYXRlcmlhbF9EZXRhaWxzIGdldHMgdGhlIHZhbHVlIG9mIE1hdGVyaWFsX0RldGFpbHMgdW5kZXIgX01hdGVyaWFscyBPYmplY3QpLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eVZhbHVlLCB3aGljaCBjYW4gYmUgb2YgYW55IHR5cGUgKHN0cmluZywgbnVtYmVyLCBldGMuLikuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBvVmFsdWVzIE9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHZhbHVlXG5cdCAqL1xuXHRnZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoOiBmdW5jdGlvbiAoc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZywgb1ZhbHVlczogYW55KSB7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHlQYXRoICYmIHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5UGF0aHMgPSBzRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRsZXQgUmVzdWx0OiBhbnk7XG5cdFx0XHRhUHJvcGVydHlQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFJlc3VsdCA9IG9WYWx1ZXMgJiYgb1ZhbHVlc1tzUGF0aF0gPyBvVmFsdWVzW3NQYXRoXSA6IFJlc3VsdCAmJiBSZXN1bHRbc1BhdGhdO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gUmVzdWx0O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5IHBhdGggZm9yIHRoZSBrZXkgb2YgYSBjb21ibyBib3ggdGhhdCBtdXN0IGJlIHNlbGVjdGVkIGluaXRpYWxseSB3aGVuIHRoZSBkaWFsb2cgb3BlbnM6XG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyBkaWZmZXJlbnQsIHRoZW4gPCBLZWVwIEV4aXN0aW5nIFZhbHVlcyA+IGlzIHByZXNlbGVjdGVkLlxuXHQgKiA9PiBJZiBwcm9wZXJ0eVZhbHVlIGZvciBhbGwgc2VsZWN0ZWQgY29udGV4dHMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHByb3BlcnR5VmFsdWUgaXMgcHJlc2VsZWN0ZWQuXG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyBlbXB0eSwgdGhlbiA8IExlYXZlIEJsYW5rID4gaXMgcHJlc2VsZWN0ZWQuXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gc0RhdGFQcm9wZXJ0eVBhdGggRGF0YSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgcGF0aFxuXHQgKi9cblx0Z2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveDogZnVuY3Rpb24gKGFDb250ZXh0czogYW55W10sIHNEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGggJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhQ29udGV4dHMsXG5cdFx0XHRcdGFQcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdG9TZWxlY3RlZENvbnRleHQuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhDb25kaXRpb24gPVxuXHRcdFx0XHRcdHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgJiYgb0RhdGFPYmplY3QuaGFzT3duUHJvcGVydHkoc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpWzBdKTtcblx0XHRcdFx0aWYgKG9Db250ZXh0ICYmIChvRGF0YU9iamVjdC5oYXNPd25Qcm9wZXJ0eShzRGF0YVByb3BlcnR5UGF0aCkgfHwgc011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVZhbHVlcy5wdXNoKG9Db250ZXh0LmdldE9iamVjdChzRGF0YVByb3BlcnR5UGF0aCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFVbmlxdWVQcm9wZXJ0eVZhbHVlcyA9IGFQcm9wZXJ0eVZhbHVlcy5maWx0ZXIoTWFzc0VkaXRIZWxwZXIuZ2V0VW5pcXVlVmFsdWVzKTtcblx0XHRcdGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gYERlZmF1bHQvJHtzRGF0YVByb3BlcnR5UGF0aH1gO1xuXHRcdFx0fSBlbHNlIGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybiBgRW1wdHkvJHtzRGF0YVByb3BlcnR5UGF0aH1gO1xuXHRcdFx0fSBlbHNlIGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdHJldHVybiBgJHtzRGF0YVByb3BlcnR5UGF0aH0vJHthVW5pcXVlUHJvcGVydHlWYWx1ZXNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBoaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZSBbYm90aCBzdGF0aWMgYW5kIHBhdGggYmFzZWRdIGZvciB0YWJsZSdzIHNlbGVjdGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBoaWRkZW5WYWx1ZSBIaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZSAvIHBhdGggZm9yIGZpZWxkXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcmV0dXJucyBUaGUgaGlkZGVuIGFubm90YXRpb24gdmFsdWVcblx0ICovXG5cdGdldEhpZGRlblZhbHVlRm9yQ29udGV4dHM6IGZ1bmN0aW9uIChoaWRkZW5WYWx1ZTogYW55LCBhQ29udGV4dHM6IGFueVtdKSB7XG5cdFx0aWYgKGhpZGRlblZhbHVlICYmIGhpZGRlblZhbHVlLiRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gIWFDb250ZXh0cy5zb21lKGZ1bmN0aW9uIChvU2VsZWN0ZWRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGhpZGRlblZhbHVlLiRQYXRoKSA9PT0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGhpZGRlblZhbHVlO1xuXHR9LFxuXG5cdGdldElucHV0VHlwZTogZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogYW55LCBkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSwgb0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGVkaXRTdHlsZVByb3BlcnRpZXMgPSB7fSBhcyBGaWVsZFByb3BlcnRpZXM7XG5cdFx0bGV0IGlucHV0VHlwZSE6IHN0cmluZztcblx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKGVkaXRTdHlsZVByb3BlcnRpZXMsIGRhdGFGaWVsZENvbnZlcnRlZCwgb0RhdGFNb2RlbFBhdGgsIHRydWUpO1xuXHRcdFx0aW5wdXRUeXBlID0gZWRpdFN0eWxlUHJvcGVydGllcz8uZWRpdFN0eWxlIHx8IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IGlzVmFsaWRGb3JNYXNzRWRpdCA9XG5cdFx0XHRpbnB1dFR5cGUgJiZcblx0XHRcdFtcIkRhdGVQaWNrZXJcIiwgXCJUaW1lUGlja2VyXCIsIFwiRGF0ZVRpbWVQaWNrZXJcIiwgXCJSYXRpbmdJbmRpY2F0b3JcIl0uaW5kZXhPZihpbnB1dFR5cGUpID09PSAtMSAmJlxuXHRcdFx0IWlzQ29sbGVjdGlvbkZpZWxkKG9EYXRhTW9kZWxQYXRoKSAmJlxuXHRcdFx0IWhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyhwcm9wZXJ0eUluZm8pO1xuXG5cdFx0cmV0dXJuIChpc1ZhbGlkRm9yTWFzc0VkaXQgfHwgXCJcIikgJiYgaW5wdXRUeXBlO1xuXHR9LFxuXG5cdGdldElzRmllbGRHcnA6IGZ1bmN0aW9uIChkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQudmFsdWUgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQudmFsdWUuaW5kZXhPZihcIkZpZWxkR3JvdXBcIikgPiAtMVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IHBhdGggZm9yIHRoZSBtYXNzIGVkaXQgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSB0ZXh0QmluZGluZyBUZXh0IEJpbmRpbmcgSW5mb1xuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGUgRGlzcGxheSBtb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgUHJvcGVydHkgUGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldFRleHRQYXRoOiBmdW5jdGlvbiAocHJvcGVydHk6IHN0cmluZywgdGV4dEJpbmRpbmc6IGFueSwgZGlzcGxheU1vZGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRpZiAodGV4dEJpbmRpbmcgJiYgKHRleHRCaW5kaW5nLnBhdGggfHwgKHRleHRCaW5kaW5nLnBhcmFtZXRlcnMgJiYgdGV4dEJpbmRpbmcucGFyYW1ldGVycy5sZW5ndGgpKSAmJiBwcm9wZXJ0eSkge1xuXHRcdFx0aWYgKHRleHRCaW5kaW5nLnBhdGggJiYgZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRkZXNjcmlwdGlvblBhdGggPSB0ZXh0QmluZGluZy5wYXRoO1xuXHRcdFx0fSBlbHNlIGlmICh0ZXh0QmluZGluZy5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdHRleHRCaW5kaW5nLnBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAocHJvcHM6IEJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0aWYgKHByb3BzLnBhdGggJiYgcHJvcHMucGF0aCAhPT0gcHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aCA9IHByb3BzLnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaXB0aW9uUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYSBKU09OIE1vZGVsIGZvciBwcm9wZXJ0aWVzIG9mIGRpYWxvZyBmaWVsZHMgW2xhYmVsLCB2aXNpYmxpdHksIGRhdGFwcm9wZXJ0eSwgZXRjLl0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgVGFibGVcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBhRGF0YUFycmF5IEFycmF5IGNvbnRhaW5pbmcgZGF0YSByZWxhdGVkIHRvIHRoZSBkaWFsb2cgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0cHJlcGFyZURhdGFGb3JEaWFsb2c6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IGFueVtdLCBhRGF0YUFycmF5OiBhbnlbXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGFibGUgJiYgKG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpLFxuXHRcdFx0YVRhYmxlRmllbGRzID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGFibGVGaWVsZHMob1RhYmxlKSxcblx0XHRcdG9FbnRpdHlUeXBlQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9L0BgKSxcblx0XHRcdG9FbnRpdHlTZXRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KHNDdXJyZW50RW50aXR5U2V0TmFtZSksXG5cdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5VHlwZUNvbnRleHQpO1xuXG5cdFx0Y29uc3Qgb0RhdGFGaWVsZE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGxldCBvUmVzdWx0O1xuXHRcdGxldCBzTGFiZWxUZXh0O1xuXHRcdGxldCBiVmFsdWVIZWxwRW5hYmxlZDtcblx0XHRsZXQgc1VuaXRQcm9wZXJ0eVBhdGg7XG5cdFx0bGV0IGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdDtcblx0XHRsZXQgb1RleHRCaW5kaW5nO1xuXG5cdFx0YVRhYmxlRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHlQYXRoID0gb0NvbHVtbkluZm8uZGF0YVByb3BlcnR5O1xuXHRcdFx0aWYgKHNEYXRhUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGxldCBvUHJvcGVydHlJbmZvID0gc0RhdGFQcm9wZXJ0eVBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofUBgKTtcblx0XHRcdFx0c0xhYmVsVGV4dCA9XG5cdFx0XHRcdFx0b0NvbHVtbkluZm8ubGFiZWwgfHxcblx0XHRcdFx0XHQob1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXSkgfHxcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5kYXRhUHJvcGVydHk7XG5cblx0XHRcdFx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0XHRcdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRvUHJvcGVydHk6IGFueVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS5uYW1lID09PSBzRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3RbMF0gfHwge307XG5cdFx0XHRcdG9UZXh0QmluZGluZyA9IGdldFRleHRCaW5kaW5nKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7fSwgdHJ1ZSkgfHwge307XG5cdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvRmllbGRDb250ZXh0KSxcblx0XHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRcdFx0b0ludGVyZmFjZSA9IG9Qcm9wZXJ0eUNvbnRleHQgJiYgb1Byb3BlcnR5Q29udGV4dC5nZXRJbnRlcmZhY2UoKTtcblxuXHRcdFx0XHRsZXQgb0RhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ZpZWxkQ29udGV4dCwgb0VudGl0eVNldENvbnRleHQpO1xuXHRcdFx0XHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZD8uVmFsdWU/LnBhdGg/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9EYXRhTW9kZWxQYXRoLCBzRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkhpZGRlbkZpZWxkID1cblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5nZXRIaWRkZW5WYWx1ZUZvckNvbnRleHRzKFxuXHRcdFx0XHRcdFx0b0ZpZWxkQ29udGV4dCAmJiBvRmllbGRDb250ZXh0LmdldE9iamVjdCgpW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0XHRcdGFDb250ZXh0c1xuXHRcdFx0XHRcdCkgfHwgZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGlzSW1hZ2UgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm9bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXTtcblxuXHRcdFx0XHRvSW50ZXJmYWNlLmNvbnRleHQgPSB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvID1cblx0XHRcdFx0XHRvRGF0YUZpZWxkQ29udmVydGVkLl90eXBlID09PSBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdD8gb0RhdGFGaWVsZENvbnZlcnRlZFxuXHRcdFx0XHRcdFx0OiAob0RhdGFGaWVsZENvbnZlcnRlZCAmJiBvRGF0YUZpZWxkQ29udmVydGVkLlZhbHVlICYmIG9EYXRhRmllbGRDb252ZXJ0ZWQuVmFsdWUuJHRhcmdldCkgfHxcblx0XHRcdFx0XHRcdCAgKG9EYXRhRmllbGRDb252ZXJ0ZWQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQuJHRhcmdldCk7XG5cdFx0XHRcdC8vIERhdGFmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIEZpZWxkQ29udHJvbCBjYWxjdWxhdGlvbiwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWRcblxuXHRcdFx0XHRjb25zdCBjaGFydFByb3BlcnR5ID0gb1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvLnRlcm0gJiYgb1Byb3BlcnR5SW5mby50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI7XG5cdFx0XHRcdGNvbnN0IGlzQWN0aW9uID0gISFvRGF0YUZpZWxkQ29udmVydGVkLkFjdGlvbjtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEdycCA9IE1hc3NFZGl0SGVscGVyLmdldElzRmllbGRHcnAob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cblx0XHRcdFx0aWYgKGlzSW1hZ2UgfHwgYkhpZGRlbkZpZWxkIHx8IGNoYXJ0UHJvcGVydHkgfHwgaXNBY3Rpb24gfHwgaXNGaWVsZEdycCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFZhbHVlSGVscCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkID0gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRzVW5pdFByb3BlcnR5UGF0aCA9XG5cdFx0XHRcdFx0KChoYXNDdXJyZW5jeShvUHJvcGVydHlJbmZvKSB8fCBoYXNVbml0KG9Qcm9wZXJ0eUluZm8pKSAmJiBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChvUHJvcGVydHlJbmZvKSkgfHwgXCJcIjtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5SW5mbyA9IHNVbml0UHJvcGVydHlQYXRoICYmIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5SW5mbyk7XG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCA9IHVuaXRQcm9wZXJ0eUluZm8gJiYgaGFzVmFsdWVIZWxwKHVuaXRQcm9wZXJ0eUluZm8pO1xuXG5cdFx0XHRcdC8vIEVkaXRNb2RlIGFuZCBJbnB1dFR5cGVcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlGb3JGaWVsZENvbnRyb2wgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm8uVmFsdWUgPyBvUHJvcGVydHlJbmZvLlZhbHVlIDogb1Byb3BlcnR5SW5mbztcblx0XHRcdFx0Y29uc3QgZXhwQmluZGluZyA9IGdldEVkaXRNb2RlKHByb3BlcnR5Rm9yRmllbGRDb250cm9sLCBvRGF0YU1vZGVsUGF0aCwgZmFsc2UsIGZhbHNlLCBvRGF0YUZpZWxkQ29udmVydGVkLCBjb25zdGFudCh0cnVlKSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlVmFsdWVzID0gT2JqZWN0LmtleXMoRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0TW9kZUlzU3RhdGljID0gISFleHBCaW5kaW5nICYmIGVkaXRNb2RlVmFsdWVzLmluY2x1ZGVzKGV4cEJpbmRpbmcgYXMgRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0YWJsZSA9ICEhZXhwQmluZGluZyAmJiAoKGVkaXRNb2RlSXNTdGF0aWMgJiYgZXhwQmluZGluZyA9PT0gRWRpdE1vZGUuRWRpdGFibGUpIHx8ICFlZGl0TW9kZUlzU3RhdGljKTtcblxuXHRcdFx0XHRpZiAoIWVkaXRhYmxlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgaW5wdXRUeXBlID0gTWFzc0VkaXRIZWxwZXIuZ2V0SW5wdXRUeXBlKG9Qcm9wZXJ0eUluZm8sIG9EYXRhRmllbGRDb252ZXJ0ZWQsIG9EYXRhTW9kZWxQYXRoKTtcblxuXHRcdFx0XHRpZiAoaW5wdXRUeXBlKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gQ29tbW9uVXRpbHMuY29tcHV0ZURpc3BsYXlNb2RlKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdG9SZXN1bHQgPSB7XG5cdFx0XHRcdFx0XHRcImxhYmVsXCI6IHNMYWJlbFRleHQsXG5cdFx0XHRcdFx0XHRcImRhdGFQcm9wZXJ0eVwiOiBzRGF0YVByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRcdFwiaXNWYWx1ZUhlbHBFbmFibGVkXCI6IGJWYWx1ZUhlbHBFbmFibGVkID8gYlZhbHVlSGVscEVuYWJsZWQgOiBmYWxzZSxcblx0XHRcdFx0XHRcdFwidW5pdFByb3BlcnR5XCI6IHNVbml0UHJvcGVydHlQYXRoICYmICFzRGF0YVByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgPyBzVW5pdFByb3BlcnR5UGF0aCA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XCJpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0XCI6XG5cdFx0XHRcdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCAmJiAhc1VuaXRQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gYlZhbHVlSGVscEVuYWJsZWRGb3JVbml0IDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcInByb3BlcnR5UGF0aEZvclZhbHVlSGVscFwiOiBgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c0RhdGFQcm9wZXJ0eVBhdGh9YCxcblx0XHRcdFx0XHRcdFwicHJvcGVydHlQYXRoRm9yVmFsdWVIZWxwVW5pdFwiOiBzVW5pdFByb3BlcnR5UGF0aCAmJiBgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9LyR7c1VuaXRQcm9wZXJ0eVBhdGh9YCxcblx0XHRcdFx0XHRcdFwiaXNGaWVsZFJlcXVpcmVkXCI6IGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlJbmZvLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlKSxcblx0XHRcdFx0XHRcdFwiZGVmYXVsdFNlbGVjdGlvblBhdGhcIjogc0RhdGFQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdFx0PyBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KGFDb250ZXh0cywgc0RhdGFQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRTZWxlY3Rpb25Vbml0UGF0aFwiOiBzVW5pdFByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHQ/IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBzVW5pdFByb3BlcnR5UGF0aClcblx0XHRcdFx0XHRcdFx0OiBmYWxzZSxcblx0XHRcdFx0XHRcdFwiZW50aXR5U2V0XCI6IHNDdXJyZW50RW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRcdFwiZGlzcGxheVwiOiBkaXNwbGF5TW9kZSxcblx0XHRcdFx0XHRcdFwiZGVzY3JpcHRpb25QYXRoXCI6IE1hc3NFZGl0SGVscGVyLmdldFRleHRQYXRoKHNEYXRhUHJvcGVydHlQYXRoLCBvVGV4dEJpbmRpbmcsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRcdFwibnVsbGFibGVcIjogb1Byb3BlcnR5SW5mby5udWxsYWJsZSAhPT0gdW5kZWZpbmVkID8gb1Byb3BlcnR5SW5mby5udWxsYWJsZSA6IHRydWUsXG5cdFx0XHRcdFx0XHRcImlzUHJvcGVydHlSZWFkT25seVwiOiBpc1JlYWRPbmx5ICE9PSB1bmRlZmluZWQgPyBpc1JlYWRPbmx5IDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcImlucHV0VHlwZVwiOiBpbnB1dFR5cGUsXG5cdFx0XHRcdFx0XHRcImVkaXRNb2RlXCI6IGVkaXRhYmxlID8gZXhwQmluZGluZyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFwidW5pdERhdGFQYXRoXCI6IHNVbml0UHJvcGVydHlQYXRoICYmIFwiZmllbGRzSW5mbz4vdW5pdERhdGEvXCIsXG5cdFx0XHRcdFx0XHRcInZhbHVlc1BhdGhcIjogXCJmaWVsZHNJbmZvPi92YWx1ZXMvXCJcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGFEYXRhQXJyYXkucHVzaChvUmVzdWx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9EYXRhRmllbGRNb2RlbC5zZXREYXRhKGFEYXRhQXJyYXkpO1xuXHRcdHJldHVybiBvRGF0YUZpZWxkTW9kZWw7XG5cdH0sXG5cblx0Z2V0VGFibGVGaWVsZHM6IGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdGNvbnN0IGFDb2x1bW5zID0gKG9UYWJsZSAmJiBvVGFibGUuZ2V0Q29sdW1ucygpKSB8fCBbXTtcblx0XHRjb25zdCBjb2x1bW5zRGF0YSA9IG9UYWJsZSAmJiBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuY29sdW1ucztcblx0XHRyZXR1cm4gYUNvbHVtbnMubWFwKGZ1bmN0aW9uIChvQ29sdW1uOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHkgPSBvQ29sdW1uICYmIG9Db2x1bW4uZ2V0RGF0YVByb3BlcnR5KCksXG5cdFx0XHRcdGFSZWFsdGVkQ29sdW1uSW5mbyA9XG5cdFx0XHRcdFx0Y29sdW1uc0RhdGEgJiZcblx0XHRcdFx0XHRjb2x1bW5zRGF0YS5maWx0ZXIoZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29sdW1uSW5mby5uYW1lID09PSBzRGF0YVByb3BlcnR5ICYmIG9Db2x1bW5JbmZvLnR5cGUgPT09IFwiQW5ub3RhdGlvblwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XCJkYXRhUHJvcGVydHlcIjogc0RhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XCJsYWJlbFwiOiBvQ29sdW1uLmdldEhlYWRlcigpLFxuXHRcdFx0XHRcImFubm90YXRpb25QYXRoXCI6IGFSZWFsdGVkQ29sdW1uSW5mbyAmJiBhUmVhbHRlZENvbHVtbkluZm9bMF0gJiYgYVJlYWx0ZWRDb2x1bW5JbmZvWzBdLmFubm90YXRpb25QYXRoXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9LFxuXG5cdGdldERlZmF1bHRUZXh0c0ZvckRpYWxvZzogZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZTogYW55LCBpU2VsZWN0ZWRDb250ZXh0czogYW55LCBvVGFibGU6IGFueSkge1xuXHRcdC8vIFRoZSBjb25maXJtIGJ1dHRvbiB0ZXh0IGlzIFwiU2F2ZVwiIGZvciB0YWJsZSBpbiBEaXNwbGF5IG1vZGUgYW5kIFwiQXBwbHlcIiBmb3IgdGFibGUgaW4gZWRpdCBtb2RlLiBUaGlzIGNhbiBiZSBsYXRlciBleHBvc2VkIGlmIG5lZWRlZC5cblx0XHRjb25zdCBiRGlzcGxheU1vZGUgPSBvVGFibGUuZGF0YShcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIpID09PSBcInRydWVcIjtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRcImtlZXBFeGlzdGluZ1ByZWZpeFwiOiBcIjwgS2VlcFwiLFxuXHRcdFx0XCJsZWF2ZUJsYW5rVmFsdWVcIjogXCI8IExlYXZlIEJsYW5rID5cIixcblx0XHRcdFwiY2xlYXJGaWVsZFZhbHVlXCI6IFwiPCBDbGVhciBWYWx1ZXMgPlwiLFxuXHRcdFx0XCJtYXNzRWRpdFRpdGxlXCI6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfRElBTE9HX1RJVExFXCIsIGlTZWxlY3RlZENvbnRleHRzLnRvU3RyaW5nKCkpLFxuXHRcdFx0XCJhcHBseUJ1dHRvblRleHRcIjogYkRpc3BsYXlNb2RlXG5cdFx0XHRcdD8gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TQVZFX0JVVFRPTl9URVhUXCIpXG5cdFx0XHRcdDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9BUFBMWV9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFwidXNlVmFsdWVIZWxwVmFsdWVcIjogXCI8IFVzZSBWYWx1ZSBIZWxwID5cIixcblx0XHRcdFwiY2FuY2VsQnV0dG9uVGV4dFwiOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0NBTkNFTF9CVVRUT05fVEVYVFwiKSxcblx0XHRcdFwibm9GaWVsZHNcIjogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9OT19FRElUQUJMRV9GSUVMRFNcIiksXG5cdFx0XHRcIm9rQnV0dG9uVGV4dFwiOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0RJQUxPR19PS1wiKVxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIEFkZHMgYSBzdWZmaXggdG8gdGhlICdrZWVwIGV4aXN0aW5nJyBwcm9wZXJ0eSBvZiB0aGUgY29tYm9Cb3guXG5cdCAqXG5cdCAqIEBwYXJhbSBzSW5wdXRUeXBlIElucHV0VHlwZSBvZiB0aGUgZmllbGRcblx0ICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZ1xuXHQgKi9cblx0Ly8gZ2V0U3VmZml4Rm9yS2VlcEV4aXNpdGluZzogZnVuY3Rpb24gKHNJbnB1dFR5cGU6IHN0cmluZykge1xuXHQvLyBcdGxldCBzUmVzdWx0ID0gXCJWYWx1ZXNcIjtcblxuXHQvLyBcdHN3aXRjaCAoc0lucHV0VHlwZSkge1xuXHQvLyBcdFx0Ly9UT0RPIC0gQWRkIGZvciBvdGhlciBjb250cm9sIHR5cGVzIGFzIHdlbGwgKFJhZGlvIEJ1dHRvbiwgRW1haWwsIElucHV0LCBNREMgRmllbGRzLCBJbWFnZSBldGMuKVxuXHQvLyBcdFx0Y2FzZSBcIkRhdGVQaWNrZXJcIjpcblx0Ly8gXHRcdFx0c1Jlc3VsdCA9IFwiRGF0ZXNcIjtcblx0Ly8gXHRcdFx0YnJlYWs7XG5cdC8vIFx0XHRjYXNlIFwiQ2hlY2tCb3hcIjpcblx0Ly8gXHRcdFx0c1Jlc3VsdCA9IFwiU2V0dGluZ3NcIjtcblx0Ly8gXHRcdFx0YnJlYWs7XG5cdC8vIFx0XHRkZWZhdWx0OlxuXHQvLyBcdFx0XHRzUmVzdWx0ID0gXCJWYWx1ZXNcIjtcblx0Ly8gXHR9XG5cdC8vIFx0cmV0dXJuIHNSZXN1bHQ7XG5cdC8vIH0sXG5cblx0LyoqXG5cdCAqIEFkZHMgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIG1vZGVsIFtLZWVwIEV4aXN0aW5nIFZhbHVlcywgTGVhdmUgQmxhbmtdLlxuXHQgKlxuXHQgKiBAcGFyYW0gYVZhbHVlcyBBcnJheSBpbnN0YW5jZSB3aGVyZSB0aGUgZGVmYXVsdCBkYXRhIG5lZWRzIHRvIGJlIGFkZGVkXG5cdCAqIEBwYXJhbSBvRGVmYXVsdFZhbHVlcyBEZWZhdWx0IHZhbHVlcyBmcm9tIEFwcGxpY2F0aW9uIE1hbmlmZXN0XG5cdCAqIEBwYXJhbSBvUHJvcGVydHlJbmZvIFByb3BlcnR5IGluZm9ybWF0aW9uXG5cdCAqIEBwYXJhbSBiVU9NRmllbGRcblx0ICovXG5cdHNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZzogZnVuY3Rpb24gKGFWYWx1ZXM6IGFueSwgb0RlZmF1bHRWYWx1ZXM6IGFueSwgb1Byb3BlcnR5SW5mbzogYW55LCBiVU9NRmllbGQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IGJVT01GaWVsZCA/IG9Qcm9wZXJ0eUluZm8udW5pdFByb3BlcnR5IDogb1Byb3BlcnR5SW5mby5kYXRhUHJvcGVydHksXG5cdFx0XHRzSW5wdXRUeXBlID0gb1Byb3BlcnR5SW5mby5pbnB1dFR5cGUsXG5cdFx0XHRiUHJvcGVydHlSZXF1aXJlZCA9IG9Qcm9wZXJ0eUluZm8uaXNGaWVsZFJlcXVpcmVkO1xuXHRcdC8vIGNvbnN0IHNTdWZmaXhGb3JLZWVwRXhpc3RpbmcgPSBNYXNzRWRpdEhlbHBlci5nZXRTdWZmaXhGb3JLZWVwRXhpc2l0aW5nKHNJbnB1dFR5cGUpO1xuXHRcdGNvbnN0IHNTdWZmaXhGb3JLZWVwRXhpc3RpbmcgPSBcIlZhbHVlc1wiO1xuXHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMgPSBhVmFsdWVzLmRlZmF1bHRPcHRpb25zIHx8IFtdO1xuXHRcdGNvbnN0IHNlbGVjdE9wdGlvbnNFeGlzdCA9IGFWYWx1ZXMuc2VsZWN0T3B0aW9ucyAmJiBhVmFsdWVzLnNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMDtcblx0XHRjb25zdCBrZWVwRW50cnkgPSB7XG5cdFx0XHR0ZXh0OiBgJHtvRGVmYXVsdFZhbHVlcy5rZWVwRXhpc3RpbmdQcmVmaXh9ICR7c1N1ZmZpeEZvcktlZXBFeGlzdGluZ30gPmAsXG5cdFx0XHRrZXk6IGBEZWZhdWx0LyR7c1Byb3BlcnR5UGF0aH1gXG5cdFx0fTtcblxuXHRcdGlmIChzSW5wdXRUeXBlID09PSBcIkNoZWNrQm94XCIpIHtcblx0XHRcdGNvbnN0IGZhbHNlRW50cnkgPSB7IHRleHQ6IFwiTm9cIiwga2V5OiBgJHtzUHJvcGVydHlQYXRofS9mYWxzZWAsIHRleHRJbmZvOiB7IHZhbHVlOiBmYWxzZSB9IH07XG5cdFx0XHRjb25zdCB0cnV0aHlFbnRyeSA9IHsgdGV4dDogXCJZZXNcIiwga2V5OiBgJHtzUHJvcGVydHlQYXRofS90cnVlYCwgdGV4dEluZm86IHsgdmFsdWU6IHRydWUgfSB9O1xuXHRcdFx0YVZhbHVlcy51bnNoaWZ0KGZhbHNlRW50cnkpO1xuXHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGZhbHNlRW50cnkpO1xuXHRcdFx0YVZhbHVlcy51bnNoaWZ0KHRydXRoeUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdCh0cnV0aHlFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChrZWVwRW50cnkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1Byb3BlcnR5SW5mby5pc1ZhbHVlSGVscEVuYWJsZWQgfHwgKG9Qcm9wZXJ0eUluZm8uaXNWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCAmJiBiVU9NRmllbGQpKSB7XG5cdFx0XHRcdGNvbnN0IHZoZEVudHJ5ID0geyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy51c2VWYWx1ZUhlbHBWYWx1ZSwga2V5OiBgVXNlVmFsdWVIZWxwVmFsdWUvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KHZoZEVudHJ5KTtcblx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KHZoZEVudHJ5KTtcblx0XHRcdH1cblx0XHRcdGlmIChzZWxlY3RPcHRpb25zRXhpc3QpIHtcblx0XHRcdFx0aWYgKGJQcm9wZXJ0eVJlcXVpcmVkICE9PSBcInRydWVcIiAmJiAhYlVPTUZpZWxkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY2xlYXJFbnRyeSA9IHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMuY2xlYXJGaWVsZFZhbHVlLCBrZXk6IGBDbGVhckZpZWxkVmFsdWUvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoY2xlYXJFbnRyeSk7XG5cdFx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGNsZWFyRW50cnkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFWYWx1ZXMudW5zaGlmdChrZWVwRW50cnkpO1xuXHRcdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGVtcHR5RW50cnkgPSB7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSwga2V5OiBgRGVmYXVsdC8ke3NQcm9wZXJ0eVBhdGh9YCB9O1xuXHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoZW1wdHlFbnRyeSk7XG5cdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChlbXB0eUVudHJ5KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IGFycmFuZ2VtZW50IGluZm8gZm9yIGEgY29udGV4dCBwcm9wZXJ0eS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IFBhdGhcblx0ICogQHBhcmFtIGRlc2NyaXB0aW9uUGF0aCBQYXRoIHRvIHRleHQgYXNzb2NpYXRpb24gb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZSBEaXNwbGF5IG1vZGUgb2YgdGhlIHByb3BlcnR5IGFuZCB0ZXh0IGFzc29jaWF0aW9uXG5cdCAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHQgQ29udGV4dCB0byBmaW5kIHRoZSBmdWxsIHRleHRcblx0ICogQHJldHVybnMgVGhlIHRleHQgYXJyYW5nZW1lbnRcblx0ICovXG5cdGdldFRleHRBcnJhbmdlbWVudEluZm86IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGRlc2NyaXB0aW9uUGF0aDogc3RyaW5nLFxuXHRcdGRpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdFx0c2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0XG5cdCk6IFRleHRBcnJhbmdlbWVudEluZm8ge1xuXHRcdGxldCB2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpLFxuXHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSxcblx0XHRcdGZ1bGxUZXh0O1xuXHRcdGlmIChkZXNjcmlwdGlvblBhdGggJiYgcHJvcGVydHkpIHtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZGVzY3JpcHRpb25QYXRoKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gZGVzY3JpcHRpb25WYWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gdmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0dmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSB8fCBcIlwiO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uVmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGRlc2NyaXB0aW9uUGF0aCkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IGRlc2NyaXB0aW9uVmFsdWUgPyBgJHt2YWx1ZX0gKCR7ZGVzY3JpcHRpb25WYWx1ZX0pYCA6IHZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChkZXNjcmlwdGlvblBhdGgpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSBkZXNjcmlwdGlvblZhbHVlID8gYCR7ZGVzY3JpcHRpb25WYWx1ZX0gKCR7dmFsdWV9KWAgOiB2YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuaW5mbyhgRGlzcGxheSBQcm9wZXJ0eSBub3QgYXBwbGljYWJsZTogJHtwcm9wZXJ0eX1gKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJ0ZXh0QXJyYW5nZW1lbnRcIjogZGlzcGxheU1vZGUsXG5cdFx0XHRcInZhbHVlUGF0aFwiOiBwcm9wZXJ0eSxcblx0XHRcdFwiZGVzY3JpcHRpb25QYXRoXCI6IGRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFwidmFsdWVcIjogdmFsdWUsXG5cdFx0XHRcImRlc2NyaXB0aW9uXCI6IGRlc2NyaXB0aW9uVmFsdWUsXG5cdFx0XHRcImZ1bGxUZXh0XCI6IGZ1bGxUZXh0XG5cdFx0fTtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSB2aXNpYmlsaXR5IHZhbHV1ZSBmb3IgdGhlIE1hbmFnZWRPYmplY3QgQW55LlxuXHQgKlxuXHQgKiBAcGFyYW0gYW55IFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRpc0VkaXRhYmxlOiBmdW5jdGlvbiAoYW55OiBBbnlUeXBlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgYmluZGluZyA9IGFueS5nZXRCaW5kaW5nKFwiYW55XCIpO1xuXHRcdGNvbnN0IHZhbHVlID0gKGJpbmRpbmcgYXMgYW55KS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0cmV0dXJuIHZhbHVlID09PSBFZGl0TW9kZS5FZGl0YWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogQ2FsY3VsYXRlIGFuZCB1cGRhdGUgdGhlIHZpc2liaWxpdHkgb2YgbWFzcyBlZGl0IGZpZWxkIG9uIGNoYW5nZSBvZiB0aGUgTWFuYWdlZE9iamVjdCBBbnkgYmluZGluZy5cblx0ICpcblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqL1xuXHRvbkNvbnRleHRFZGl0YWJsZUNoYW5nZTogZnVuY3Rpb24gKG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCwgZGF0YVByb3BlcnR5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBvYmplY3RzRm9yVmlzaWJpbGl0eSA9IG9EaWFsb2dEYXRhTW9kZWwuZ2V0UHJvcGVydHkoYC92YWx1ZXMvJHtkYXRhUHJvcGVydHl9L29iamVjdHNGb3JWaXNpYmlsaXR5YCkgfHwgW107XG5cdFx0Y29uc3QgZWRpdGFibGUgPSBvYmplY3RzRm9yVmlzaWJpbGl0eS5zb21lKE1hc3NFZGl0SGVscGVyLmlzRWRpdGFibGUpO1xuXG5cdFx0aWYgKGVkaXRhYmxlKSB7XG5cdFx0XHRvRGlhbG9nRGF0YU1vZGVsLnNldFByb3BlcnR5KGAvdmFsdWVzLyR7ZGF0YVByb3BlcnR5fS92aXNpYmxlYCwgZWRpdGFibGUpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogVXBkYXRlIE1hbmFnZWQgT2JqZWN0IEFueSBmb3IgdmlzaWJpbGl0eSBvZiB0aGUgbWFzcyBlZGl0IGZpZWxkcy5cblx0ICpcblx0ICogQHBhcmFtIG1PVG9Vc2UgVGhlIE1hbmFnZWRPYmplY3QgQW55IHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHZhbHVlIG9mIHRoZSBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gb0RpYWxvZ0RhdGFNb2RlbCBNb2RlbCB0byBiZSB1c2VkIHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBkYXRhUHJvcGVydHkgRmllbGQgbmFtZS5cblx0ICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgb2YgdGhlIGZpZWxkLlxuXHQgKi9cblx0dXBkYXRlT25Db250ZXh0Q2hhbmdlOiBmdW5jdGlvbiAobU9Ub1VzZTogQW55VHlwZSwgb0RpYWxvZ0RhdGFNb2RlbDogSlNPTk1vZGVsLCBkYXRhUHJvcGVydHk6IHN0cmluZywgdmFsdWVzOiBhbnkpIHtcblx0XHRjb25zdCBiaW5kaW5nID0gbU9Ub1VzZS5nZXRCaW5kaW5nKFwiYW55XCIpO1xuXG5cdFx0dmFsdWVzLm9iamVjdHNGb3JWaXNpYmlsaXR5ID0gdmFsdWVzLm9iamVjdHNGb3JWaXNpYmlsaXR5IHx8IFtdO1xuXHRcdHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eS5wdXNoKG1PVG9Vc2UpO1xuXG5cdFx0YmluZGluZy5hdHRhY2hDaGFuZ2UoTWFzc0VkaXRIZWxwZXIub25Db250ZXh0RWRpdGFibGVDaGFuZ2UuYmluZChudWxsLCBvRGlhbG9nRGF0YU1vZGVsLCBkYXRhUHJvcGVydHkpKTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IGJvdW5kIG9iamVjdCB0byBjYWxjdWxhdGUgdGhlIHZpc2liaWxpdHkgb2YgY29udGV4dHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIEJpbmRpbmcgU3RyaW5nIG9iamVjdC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0aGUgYmluZGluZyB2YWx1ZS5cblx0ICogQHJldHVybnMgVGhlIE1hbmFnZWRPYmplY3QgQW55IHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmxlIHZhbHVlIG9mIHRoZSBiaW5kaW5nLlxuXHQgKi9cblx0Z2V0Qm91bmRPYmplY3Q6IGZ1bmN0aW9uIChleHBCaW5kaW5nOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgY29udGV4dDogQ29udGV4dCk6IEFueVR5cGUge1xuXHRcdGNvbnN0IG1PVG9Vc2UgPSBuZXcgQW55KHsgYW55OiBleHBCaW5kaW5nIH0pO1xuXHRcdGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdG1PVG9Vc2Uuc2V0TW9kZWwobW9kZWwpO1xuXHRcdG1PVG9Vc2Uuc2V0QmluZGluZ0NvbnRleHQoY29udGV4dCk7XG5cblx0XHRyZXR1cm4gbU9Ub1VzZTtcblx0fSxcblxuXHQvKipcblx0ICogR2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmaWVsZC5cblx0ICpcblx0ICogQHBhcmFtIGV4cEJpbmRpbmcgQmluZGluZyBTdHJpbmcgb2JqZWN0LlxuXHQgKiBAcGFyYW0gb0RpYWxvZ0RhdGFNb2RlbCBNb2RlbCB0byBiZSB1c2VkIHJ1bnRpbWUuXG5cdCAqIEBwYXJhbSBkYXRhUHJvcGVydHkgRmllbGQgbmFtZS5cblx0ICogQHBhcmFtIHZhbHVlcyBWYWx1ZXMgb2YgdGhlIGZpZWxkLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHRoZSBiaW5kaW5nIHZhbHVlLlxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRydWUgaWYgdGhlIG1hc3MgZWRpdCBmaWVsZCBpcyBlZGl0YWJsZS5cblx0ICovXG5cdGdldEZpZWxkVmlzaWJsaXR5OiBmdW5jdGlvbiAoXG5cdFx0ZXhwQmluZGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdFx0b0RpYWxvZ0RhdGFNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGRhdGFQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdHZhbHVlczogYW55LFxuXHRcdGNvbnRleHQ6IENvbnRleHRcblx0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbU9Ub1VzZSA9IE1hc3NFZGl0SGVscGVyLmdldEJvdW5kT2JqZWN0KGV4cEJpbmRpbmcsIGNvbnRleHQpO1xuXHRcdGNvbnN0IGlzQ29udGV4dEVkaXRhYmxlID0gTWFzc0VkaXRIZWxwZXIuaXNFZGl0YWJsZShtT1RvVXNlKTtcblxuXHRcdGlmICghaXNDb250ZXh0RWRpdGFibGUpIHtcblx0XHRcdE1hc3NFZGl0SGVscGVyLnVwZGF0ZU9uQ29udGV4dENoYW5nZShtT1RvVXNlLCBvRGlhbG9nRGF0YU1vZGVsLCBkYXRhUHJvcGVydHksIHZhbHVlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBpc0NvbnRleHRFZGl0YWJsZTtcblx0fSxcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYSBydW50aW1lIG1vZGVsOlxuXHQgKiA9PiBUaGUgbW9kZWwgY29uc2lzdHMgb2YgdmFsdWVzIHNob3duIGluIHRoZSBjb21ib0JveCBvZiB0aGUgZGlhbG9nIChMZWF2ZSBCbGFuaywgS2VlcCBFeGlzdGluZyBWYWx1ZXMsIG9yIGFueSBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIHNlbGVjdGVkIGNvbnRleHQsIGV0Yy4pXG5cdCAqID0+IFRoZSBtb2RlbCB3aWxsIGNhcHR1cmUgcnVudGltZSBjaGFuZ2VzIGluIHRoZSByZXN1bHRzIHByb3BlcnR5ICh0aGUgdmFsdWUgZW50ZXJlZCBpbiB0aGUgY29tYm9Cb3gpLlxuXHQgKlxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIGFEYXRhQXJyYXkgQXJyYXkgY29udGFpbmluZyBkYXRhIHJlbGF0ZWQgdG8gdGhlIGRpYWxvZyB1c2VkIGJ5IGJvdGggdGhlIHN0YXRpYyBhbmQgdGhlIHJ1bnRpbWUgbW9kZWxcblx0ICogQHBhcmFtIG9EZWZhdWx0VmFsdWVzIERlZmF1bHQgdmFsdWVzIGZyb20gaTE4blxuXHQgKiBAcGFyYW0gZGlhbG9nQ29udGV4dCBUcmFuc2llbnQgY29udGV4dCBmb3IgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIHJ1bnRpbWUgbW9kZWxcblx0ICovXG5cdHNldFJ1bnRpbWVNb2RlbE9uRGlhbG9nOiBmdW5jdGlvbiAoYUNvbnRleHRzOiBhbnlbXSwgYURhdGFBcnJheTogYW55W10sIG9EZWZhdWx0VmFsdWVzOiBhbnksIGRpYWxvZ0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCBhVmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IGFVbml0RGF0YTogYW55W10gPSBbXTtcblx0XHRjb25zdCBhUmVzdWx0czogYW55W10gPSBbXTtcblx0XHRjb25zdCBhUmVhZE9ubHlGaWVsZEluZm86IGFueVtdID0gW107XG5cdFx0Y29uc3Qgb0RhdGEgPSB7XG5cdFx0XHRcInZhbHVlc1wiOiBhVmFsdWVzLFxuXHRcdFx0XCJ1bml0RGF0YVwiOiBhVW5pdERhdGEsXG5cdFx0XHRcInJlc3VsdHNcIjogYVJlc3VsdHMsXG5cdFx0XHRcInJlYWRhYmxlUHJvcGVydHlEYXRhXCI6IGFSZWFkT25seUZpZWxkSW5mbyxcblx0XHRcdFwic2VsZWN0ZWRLZXlcIjogdW5kZWZpbmVkLFxuXHRcdFx0XCJub0ZpZWxkc1wiOiBvRGVmYXVsdFZhbHVlcy5ub0ZpZWxkc1xuXHRcdH07XG5cdFx0Y29uc3Qgb0RpYWxvZ0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwob0RhdGEpO1xuXHRcdGFEYXRhQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAob0luRGF0YTogYW55KSB7XG5cdFx0XHRsZXQgb1RleHRJbmZvO1xuXHRcdFx0bGV0IHNQcm9wZXJ0eUtleTtcblx0XHRcdGxldCBzVW5pdFByb3BlcnR5TmFtZTtcblx0XHRcdGNvbnN0IG9EaXN0aW5jdFZhbHVlTWFwOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IG9EaXN0aW5jdFVuaXRNYXA6IGFueSA9IHt9O1xuXHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIG9JbkRhdGEuZGF0YVByb3BlcnR5LmluZGV4T2YoXCIvXCIpID4gLTEpIHtcblx0XHRcdFx0Y29uc3QgYUZpbmFsUGF0aCA9IE1hc3NFZGl0SGVscGVyLmluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aChvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgYVZhbHVlcyAvKiwgZGlhbG9nQ29udGV4dCAqLyk7XG5cdFx0XHRcdGNvbnN0IGFQcm9wZXJ0eVBhdGhzID0gb0luRGF0YS5kYXRhUHJvcGVydHkuc3BsaXQoXCIvXCIpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhWYWx1ZSA9IGNvbnRleHQuZ2V0T2JqZWN0KG9JbkRhdGEuZGF0YVByb3BlcnR5KTtcblx0XHRcdFx0XHRzUHJvcGVydHlLZXkgPSBgJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX0vJHtzTXVsdGlMZXZlbFBhdGhWYWx1ZX1gO1xuXHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSAmJiBhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXSkge1xuXHRcdFx0XHRcdFx0b1RleHRJbmZvID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyhcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRpc3BsYXksXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XCJ0ZXh0XCI6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBzTXVsdGlMZXZlbFBhdGhWYWx1ZSxcblx0XHRcdFx0XHRcdFx0XCJrZXlcIjogc1Byb3BlcnR5S2V5LFxuXHRcdFx0XHRcdFx0XHRcInRleHRJbmZvXCI6IG9UZXh0SW5mb1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldID0gc011bHRpTGV2ZWxQYXRoVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RWYWx1ZU1hcCkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdC8vIFx0ZGlhbG9nQ29udGV4dC5zZXRQcm9wZXJ0eShvRGF0YS5kYXRhUHJvcGVydHksIHNQcm9wZXJ0eUtleSAmJiBvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldKTtcblx0XHRcdFx0Ly8gfVxuXG5cdFx0XHRcdGFGaW5hbFBhdGhbYVByb3BlcnR5UGF0aHNbYVByb3BlcnR5UGF0aHMubGVuZ3RoIC0gMV1dLnRleHRJbmZvID0ge1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogb0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0dmFsdWVQYXRoOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRkaXNwbGF5TW9kZTogb0luRGF0YS5kaXNwbGF5XG5cdFx0XHRcdH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldIHx8IFtdO1xuXHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gfHwgW107XG5cdFx0XHRcdGlmIChvSW5EYXRhLnVuaXRQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gPSBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldIHx8IFtdO1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdID0gYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0gfHwgW107XG5cdFx0XHRcdH1cblx0XHRcdFx0Zm9yIChjb25zdCBjb250ZXh0IG9mIGFDb250ZXh0cykge1xuXHRcdFx0XHRcdGNvbnN0IG9EYXRhT2JqZWN0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRzUHJvcGVydHlLZXkgPSBgJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX0vJHtvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV19YDtcblx0XHRcdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkgJiYgb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldICYmICFvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdFx0XHRpZiAob0luRGF0YS5pbnB1dFR5cGUgIT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZW50cnkgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XCJ0ZXh0XCI6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBvRGF0YU9iamVjdFtvSW5EYXRhLmRhdGFQcm9wZXJ0eV0sXG5cdFx0XHRcdFx0XHRcdFx0XCJrZXlcIjogc1Byb3BlcnR5S2V5LFxuXHRcdFx0XHRcdFx0XHRcdFwidGV4dEluZm9cIjogb1RleHRJbmZvXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnB1c2goZW50cnkpO1xuXHRcdFx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XVtcInNlbGVjdE9wdGlvbnNcIl0ucHVzaChlbnRyeSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RWYWx1ZU1hcFtzUHJvcGVydHlLZXldID0gb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkgJiYgb0RhdGFPYmplY3Rbb0luRGF0YS51bml0UHJvcGVydHldKSB7XG5cdFx0XHRcdFx0XHRzVW5pdFByb3BlcnR5TmFtZSA9IGAke29JbkRhdGEudW5pdFByb3BlcnR5fS8ke29EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XX1gO1xuXHRcdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRpZiAob0luRGF0YS5pbnB1dFR5cGUgIT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0b1RleHRJbmZvID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyhcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEudW5pdFByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRpc3BsYXksXG5cdFx0XHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB1bml0RW50cnkgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcInRleHRcIjogKG9UZXh0SW5mbyAmJiBvVGV4dEluZm8uZnVsbFRleHQpIHx8IG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XSxcblx0XHRcdFx0XHRcdFx0XHRcdFwia2V5XCI6IHNVbml0UHJvcGVydHlOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0ZXh0SW5mb1wiOiBvVGV4dEluZm9cblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ucHVzaCh1bml0RW50cnkpO1xuXHRcdFx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdLnB1c2godW5pdEVudHJ5KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSA9IG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0udGV4dEluZm8gPSB7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25QYXRoOiBvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHR2YWx1ZVBhdGg6IG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlOiBvSW5EYXRhLmRpc3BsYXlcblx0XHRcdFx0fTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9EaXN0aW5jdFZhbHVlTWFwKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZXh0LnNldFByb3BlcnR5KG9JbkRhdGEuZGF0YVByb3BlcnR5LCBzUHJvcGVydHlLZXkgJiYgb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9EaXN0aW5jdFVuaXRNYXApLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdGRpYWxvZ0NvbnRleHQuc2V0UHJvcGVydHkob0luRGF0YS51bml0UHJvcGVydHksIHNVbml0UHJvcGVydHlOYW1lICYmIG9EaXN0aW5jdFVuaXRNYXBbc1VuaXRQcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFEYXRhQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAob0luRGF0YTogYW55KSB7XG5cdFx0XHRsZXQgdmFsdWVzOiBhbnkgPSB7fTtcblx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdGNvbnN0IHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSA9IE1hc3NFZGl0SGVscGVyLmdldFZhbHVlRm9yTXVsdGlMZXZlbFBhdGgob0luRGF0YS5kYXRhUHJvcGVydHksIGFWYWx1ZXMpO1xuXHRcdFx0XHRpZiAoIXNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSkge1xuXHRcdFx0XHRcdHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZS5wdXNoKHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLCBrZXk6IGBFbXB0eS8ke29JbkRhdGEuZGF0YVByb3BlcnR5fWAgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhbHVlcyA9IHNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0pIHtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLCBvRGVmYXVsdFZhbHVlcywgb0luRGF0YSk7XG5cdFx0XHRcdHZhbHVlcyA9IGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSAmJiBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmxlbmd0aCkge1xuXHRcdFx0XHRNYXNzRWRpdEhlbHBlci5zZXREZWZhdWx0VmFsdWVzVG9EaWFsb2coYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEsIHRydWUpO1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnRleHRJbmZvID0ge307XG5cdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uc2VsZWN0ZWRLZXkgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KFxuXHRcdFx0XHRcdGFDb250ZXh0cyxcblx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmlucHV0VHlwZSA9IG9JbkRhdGEuaW5wdXRUeXBlO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldICYmICFhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5sZW5ndGgpIHx8XG5cdFx0XHRcdChvSW5EYXRhLnVuaXRQcm9wZXJ0eSAmJiBhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldICYmICFhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLmxlbmd0aClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBiQ2xlYXJGaWVsZE9yQmxhbmtWYWx1ZUV4aXN0cyA9XG5cdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gJiZcblx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5zb21lKGZ1bmN0aW9uIChvYmo6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai50ZXh0ID09PSBcIjwgQ2xlYXIgVmFsdWVzID5cIiB8fCBvYmoudGV4dCA9PT0gXCI8IExlYXZlIEJsYW5rID5cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmICFiQ2xlYXJGaWVsZE9yQmxhbmtWYWx1ZUV4aXN0cykge1xuXHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnB1c2goeyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYEVtcHR5LyR7b0luRGF0YS5kYXRhUHJvcGVydHl9YCB9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMgPVxuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gJiZcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnNvbWUoZnVuY3Rpb24gKG9iajogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb2JqLnRleHQgPT09IFwiPCBDbGVhciBWYWx1ZXMgPlwiIHx8IG9iai50ZXh0ID09PSBcIjwgTGVhdmUgQmxhbmsgPlwiO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRpZiAoIWJDbGVhckZpZWxkT3JCbGFua1VuaXRWYWx1ZUV4aXN0cykge1xuXHRcdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5wdXNoKHtcblx0XHRcdFx0XHRcdFx0dGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLFxuXHRcdFx0XHRcdFx0XHRrZXk6IGBFbXB0eS8ke29JbkRhdGEudW5pdFByb3BlcnR5fWBcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnRleHRJbmZvID0ge307XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5zZWxlY3RlZEtleSA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goXG5cdFx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5ICYmIHR5cGVvZiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSA9PT0gXCJib29sZWFuXCIpIHtcblx0XHRcdFx0YVJlYWRPbmx5RmllbGRJbmZvLnB1c2goeyBcInByb3BlcnR5XCI6IG9JbkRhdGEuZGF0YVByb3BlcnR5LCB2YWx1ZTogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHksIHR5cGU6IFwiRGVmYXVsdFwiIH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHMgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0gJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDEgJiZcblx0XHRcdFx0b0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDJcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIHJlZmFjdG9yZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBSZWFkT25seUV4cHJlc3Npb24gY2hhbmdlXG5cdFx0XHRcdGFSZWFkT25seUZpZWxkSW5mby5wdXNoKHtcblx0XHRcdFx0XHRcInByb3BlcnR5XCI6IG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aDogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDEucGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlOiBvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seS5vcGVyYW5kc1swXS5vcGVyYW5kMi52YWx1ZSxcblx0XHRcdFx0XHR0eXBlOiBcIlBhdGhcIlxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0dGluZyB2aXNiaWxpdHkgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZC5cblx0XHRcdGlmIChvSW5EYXRhLmVkaXRNb2RlKSB7XG5cdFx0XHRcdHZhbHVlcy52aXNpYmxlID1cblx0XHRcdFx0XHRvSW5EYXRhLmVkaXRNb2RlID09PSBFZGl0TW9kZS5FZGl0YWJsZSB8fFxuXHRcdFx0XHRcdGFDb250ZXh0cy5zb21lKFxuXHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuZ2V0RmllbGRWaXNpYmxpdHkuYmluZChcblx0XHRcdFx0XHRcdFx0TWFzc0VkaXRIZWxwZXIsXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZWRpdE1vZGUsXG5cdFx0XHRcdFx0XHRcdG9EaWFsb2dEYXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHR2YWx1ZXNcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWVzLnZpc2libGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0dmFsdWVzLnNlbGVjdGVkS2V5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChhQ29udGV4dHMsIG9JbkRhdGEuZGF0YVByb3BlcnR5KTtcblx0XHRcdHZhbHVlcy5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdHZhbHVlcy51bml0UHJvcGVydHkgPSBvSW5EYXRhLnVuaXRQcm9wZXJ0eTtcblx0XHR9KTtcblxuXHRcdHJldHVybiBvRGlhbG9nRGF0YU1vZGVsO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0cmFuc2llbnQgY29udGV4dCBmb3IgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0gdGFibGUgSW5zdGFuY2Ugb2YgVGFibGUuXG5cdCAqIEBwYXJhbSBkaWFsb2cgTWFzcyBFZGl0IERpYWxvZy5cblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZGlhbG9nLlxuXHQgKi9cblx0Z2V0RGlhbG9nQ29udGV4dDogZnVuY3Rpb24gKHRhYmxlOiBUYWJsZSwgZGlhbG9nPzogRGlhbG9nKTogQ29udGV4dCB7XG5cdFx0bGV0IHRyYW5zQ3R4OiBDb250ZXh0ID0gKGRpYWxvZyAmJiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSkgYXMgQ29udGV4dDtcblxuXHRcdGlmICghdHJhbnNDdHgpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGFibGUuZ2V0TW9kZWwoKTtcblx0XHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0Y29uc3QgdHJhbnNpZW50TGlzdEJpbmRpbmcgPSBtb2RlbC5iaW5kTGlzdChsaXN0QmluZGluZy5nZXRQYXRoKCksIGxpc3RCaW5kaW5nLmdldENvbnRleHQoKSwgW10sIFtdLCB7XG5cdFx0XHRcdCQkdXBkYXRlR3JvdXBJZDogXCJzdWJtaXRMYXRlclwiXG5cdFx0XHR9KSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHRcdFx0KHRyYW5zaWVudExpc3RCaW5kaW5nIGFzIGFueSkucmVmcmVzaEludGVybmFsID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHQvKiAqL1xuXHRcdFx0fTtcblx0XHRcdHRyYW5zQ3R4ID0gdHJhbnNpZW50TGlzdEJpbmRpbmcuY3JlYXRlKHt9LCB0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJhbnNDdHg7XG5cdH0sXG5cblx0b25EaWFsb2dPcGVuOiBmdW5jdGlvbiAoZXZlbnQ6IGFueSk6IHZvaWQge1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGZpZWxkc0luZm9Nb2RlbCA9IHNvdXJjZS5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0ZmllbGRzSW5mb01vZGVsLnNldFByb3BlcnR5KFwiL2lzT3BlblwiLCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBtYXNzIGVkaXQgZGlhbG9nLlxuXHQgKlxuXHQgKiBAcGFyYW0gb1RhYmxlIEluc3RhbmNlIG9mIFRhYmxlXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgQ29udHJvbGxlciBmb3IgdGhlIHZpZXdcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXR1cm5pbmcgaW5zdGFuY2Ugb2YgZGlhbG9nLlxuXHQgKi9cblx0Y3JlYXRlRGlhbG9nOiBmdW5jdGlvbiAob1RhYmxlOiBUYWJsZSwgYUNvbnRleHRzOiBhbnlbXSwgb0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvbWFzc0VkaXQvTWFzc0VkaXREaWFsb2dcIixcblx0XHRcdGFEYXRhQXJyYXk6IGFueVtdID0gW10sXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdFx0b0RlZmF1bHRWYWx1ZXMgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0VGV4dHNGb3JEaWFsb2cob1Jlc291cmNlQnVuZGxlLCBhQ29udGV4dHMubGVuZ3RoLCBvVGFibGUpLFxuXHRcdFx0b0RhdGFGaWVsZE1vZGVsID0gTWFzc0VkaXRIZWxwZXIucHJlcGFyZURhdGFGb3JEaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGFEYXRhQXJyYXkpLFxuXHRcdFx0ZGlhbG9nQ29udGV4dCA9IE1hc3NFZGl0SGVscGVyLmdldERpYWxvZ0NvbnRleHQob1RhYmxlKSxcblx0XHRcdG9EaWFsb2dEYXRhTW9kZWwgPSBNYXNzRWRpdEhlbHBlci5zZXRSdW50aW1lTW9kZWxPbkRpYWxvZyhhQ29udGV4dHMsIGFEYXRhQXJyYXksIG9EZWZhdWx0VmFsdWVzLCBkaWFsb2dDb250ZXh0KTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdFx0Y29uc3Qgb0ZyYWdtZW50ID0gWE1MVGVtcGxhdGVQcm9jZXNzb3IubG9hZFRlbXBsYXRlKHNGcmFnbWVudE5hbWUsIFwiZnJhZ21lbnRcIik7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRvRnJhZ21lbnQsXG5cdFx0XHRcdFx0eyBuYW1lOiBzRnJhZ21lbnROYW1lIH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE1vZGVsOiBvRGF0YUZpZWxkTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE1vZGVsOiBvRGF0YUZpZWxkTW9kZWxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9DcmVhdGVkRnJhZ21lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHsgZGVmaW5pdGlvbjogb0NyZWF0ZWRGcmFnbWVudCB9KS50aGVuKGZ1bmN0aW9uIChvRGlhbG9nQ29udGVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBEcmFmdFN0YXR1cyA9IEZFTGlicmFyeS5EcmFmdFN0YXR1cztcblx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR0aXRsZTogb0RlZmF1bHRWYWx1ZXMubWFzc0VkaXRUaXRsZSxcblx0XHRcdFx0XHRcdFx0Y29udGVudDogW29EaWFsb2dDb250ZW50XSxcblx0XHRcdFx0XHRcdFx0YWZ0ZXJPcGVuOiBNYXNzRWRpdEhlbHBlci5vbkRpYWxvZ09wZW4sXG5cdFx0XHRcdFx0XHRcdGJlZ2luQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHRcdFx0XHR0ZXh0OiBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dChvRGVmYXVsdFZhbHVlcywgb0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIikpLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJza2lwUGF0Y2hIYW5kbGVyc1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0luRGlhbG9nID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0luRGlhbG9nLmdldE1vZGVsKFwiZmllbGRzSW5mb1wiKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFSZXN1bHRzID0gb01vZGVsLmdldFByb3BlcnR5KFwiL3Jlc3VsdHNcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlSZWFkYWJsZUluZm8gPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVhZGFibGVQcm9wZXJ0eURhdGFcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBjaGFuZ2VQcm9taXNlOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGJSZWFkT25seUZpZWxkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgZ3JvdXBJZDtcblx0XHRcdFx0XHRcdFx0XHRcdC8vbGV0IGluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGVycm9yVmFsdWVzOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YUNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKG9TZWxlY3RlZENvbnRleHQ6IGFueSwgaWR4OiBudW1iZXIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9UT0RPIC0gQWRkIHNhdmUgaW1wbGVtZW50YXRpb24gZm9yIFZhbHVlIEhlbHAuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFQcm9wZXJ0eVJlYWRhYmxlSW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YlJlYWRPbmx5RmllbGQgPSBhUHJvcGVydHlSZWFkYWJsZUluZm8uc29tZShmdW5jdGlvbiAob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUmVzdWx0LmtleVZhbHVlID09PSBvUHJvcGVydHlJbmZvLnByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Qcm9wZXJ0eUluZm8udHlwZSA9PT0gXCJEZWZhdWx0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnZhbHVlID09PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnR5cGUgPT09IFwiUGF0aFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChvUHJvcGVydHlJbmZvLnByb3BlcnR5UGF0aCkgPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8ucHJvcGVydHlWYWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRncm91cElkID0gYCRhdXRvLiR7aWR4fWA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9pbmRleCArPSAxO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vbGV0IHByb21pc2VDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9SZXN1bHQua2V5VmFsdWUgJiYgb1Jlc3VsdC52YWx1ZSAhPT0gXCJEZWZhdWx0XCIgJiYgIWJSZWFkT25seUZpZWxkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGFuZ2VQcm9taXNlLnB1c2goXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9TZWxlY3RlZENvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuc2V0UHJvcGVydHkob1Jlc3VsdC5rZXlWYWx1ZSwgb1Jlc3VsdC52YWx1ZSwgZ3JvdXBJZClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yVmFsdWVzLnB1c2gob1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNYXNzIEVkaXQ6IFNvbWV0aGluZyB3ZW50IHdyb25nIGluIHVwZGF0aW5nIGVudHJpZXMuXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJvbWlzZS9jYXRjaC1vci1yZXR1cm5cblx0XHRcdFx0XHRcdFx0XHRcdChQcm9taXNlIGFzIGFueSkuYWxsU2V0dGxlZChjaGFuZ2VQcm9taXNlKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb0V4dGVuc2lvbkFQSSA9IG9Db250cm9sbGVyICYmIChvQ29udHJvbGxlci5nZXRFeHRlbnNpb25BUEkoKSBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0V4dGVuc2lvbkFQSS5yZWZyZXNoKG9MaXN0QmluZGluZy5nZXRQYXRoKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHN1YnRpdGxlQ29sdW1uID0gQ29tbW9uVXRpbHMuZ2V0TWVzc2FnZUNvbHVtbihvVGFibGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VzID0gc2FwLnVpLmdldENvcmUoKS5nZXRNZXNzYWdlTWFuYWdlcigpLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHRzID0gW10gYXMgYW55O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VzLmZvckVhY2goZnVuY3Rpb24gKG1lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVRhcmdldHMgPSBtZXNzYWdlLmdldFRhcmdldHMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZVRhcmdldHMgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZVRhcmdldHMubGVuZ3RoID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1lc3NhZ2VUYXJnZXRzWzBdLmxlbmd0aCAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtZXNzYWdlLnBlcnNpc3RlbnQgPT09IHRydWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHQgPSBhQ29udGV4dHMuZmluZChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldCgpLmluZGV4T2Yob0NvbnRleHQuZ2V0UGF0aCgpKSAhPT0gLTE7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHRzLnB1c2goYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZS5hZGRpdGlvbmFsVGV4dCA9IGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0LmdldE9iamVjdCgpW3N1YnRpdGxlQ29sdW1uXVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFSZXN1bHRzLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dHMubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvclZhbHVlcy5sZW5ndGggPT09IDBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzdWNjZXNzVG9hc3QgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX1NVQ0NFU1NfVE9BU1RcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhzdWNjZXNzVG9hc3QpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvclZhbHVlcy5sZW5ndGggKyBib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHRzLmxlbmd0aCA8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmVkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JWYWx1ZXMubGVuZ3RoICsgYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0cy5sZW5ndGggPT09XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpLmxlbmd0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLkNsZWFyKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LmdldE1lc3NhZ2VIYW5kbGVyKCkuc2hvd01lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9JbkRpYWxvZy5pc09wZW4oKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b0luRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvSW5EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInNraXBQYXRjaEhhbmRsZXJzXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9EZWZhdWx0VmFsdWVzLmNhbmNlbEJ1dHRvblRleHQsXG5cdFx0XHRcdFx0XHRcdFx0dmlzaWJsZTogTWFzc0VkaXRIZWxwZXIuaGVscGVycy5oYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmcob0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIiksIHRydWUpIGFzIGFueSxcblx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBvSW5EaWFsb2cgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjb25zdCBtb2RlbCA9IG9UYWJsZS5nZXRNb2RlbCgpO1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5zZXRNb2RlbChvRGlhbG9nRGF0YU1vZGVsLCBcImZpZWxkc0luZm9cIik7XG5cdFx0XHRcdFx0XHRvRGlhbG9nLnNldE1vZGVsKG1vZGVsKTtcblx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmluZGluZ0NvbnRleHQoZGlhbG9nQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKG9EaWFsb2cpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSxcblxuXHRoZWxwZXJzOiB7XG5cdFx0Z2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzOiAoZmllbGRzOiBhbnksIGVkaXRhYmxlOiBib29sZWFuKSA9PiB7XG5cdFx0XHRjb25zdCB0b3RhbEV4cCA9IGZpZWxkcy5yZWR1Y2UoXG5cdFx0XHRcdChleHByZXNzaW9uOiBhbnksIGZpZWxkOiBhbnkpID0+XG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCIvdmFsdWVzL1wiICsgZmllbGQuZGF0YVByb3BlcnR5ICsgXCIvdmlzaWJsZVwiLCBcImZpZWxkc0luZm9cIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0Y29uc3RhbnQoZmFsc2UpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGVkaXRhYmxlID8gdG90YWxFeHAgOiBub3QodG90YWxFeHApO1xuXHRcdH0sXG5cblx0XHRnZXRFeHBCaW5kaW5nRm9yQXBwbHlCdXR0b25UeHQ6IChkZWZhdWx0VmFsdWVzOiBhbnksIGZpZWxkczogYm9vbGVhbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRpdGFibGVFeHAgPSBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIHRydWUpO1xuXHRcdFx0Y29uc3QgdG90YWxFeHAgPSBpZkVsc2UoZWRpdGFibGVFeHAsIGNvbnN0YW50KGRlZmF1bHRWYWx1ZXMuYXBwbHlCdXR0b25UZXh0KSwgY29uc3RhbnQoZGVmYXVsdFZhbHVlcy5va0J1dHRvblRleHQpKTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0b3RhbEV4cCk7XG5cdFx0fSxcblxuXHRcdGhhc0VkaXRhYmxlRmllbGRzQmluZGluZzogKGZpZWxkczogYW55LCBlZGl0YWJsZTogYm9vbGVhbikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKE1hc3NFZGl0SGVscGVyLmhlbHBlcnMuZ2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzKGZpZWxkcywgZWRpdGFibGUpKTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1hc3NFZGl0SGVscGVyO1xuIl19
|
|
1011
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk1hc3NFZGl0SGVscGVyLnRzIl0sIm5hbWVzIjpbIk1hc3NFZGl0SGVscGVyIiwiaW5pdExhc3RMZXZlbE9mUHJvcGVydHlQYXRoIiwic1BhdGgiLCJhVmFsdWVzIiwiYUZpbmFsUGF0aCIsImluZGV4IiwiYVBhdGhzIiwic3BsaXQiLCJzRnVsbFBhdGgiLCJmb3JFYWNoIiwic1Byb3BlcnR5UGF0aCIsImdldFVuaXF1ZVZhbHVlcyIsInNWYWx1ZSIsInNlbGYiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwiZ2V0VmFsdWVGb3JNdWx0aUxldmVsUGF0aCIsInNEYXRhUHJvcGVydHlQYXRoIiwib1ZhbHVlcyIsImFQcm9wZXJ0eVBhdGhzIiwiUmVzdWx0IiwiZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveCIsImFDb250ZXh0cyIsImxlbmd0aCIsIm9TZWxlY3RlZENvbnRleHQiLCJhUHJvcGVydHlWYWx1ZXMiLCJvQ29udGV4dCIsIm9EYXRhT2JqZWN0IiwiZ2V0T2JqZWN0Iiwic011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uIiwiaGFzT3duUHJvcGVydHkiLCJwdXNoIiwiYVVuaXF1ZVByb3BlcnR5VmFsdWVzIiwiZmlsdGVyIiwiZ2V0SGlkZGVuVmFsdWVGb3JDb250ZXh0cyIsImhpZGRlblZhbHVlIiwiJFBhdGgiLCJzb21lIiwiZ2V0SW5wdXRUeXBlIiwicHJvcGVydHlJbmZvIiwiZGF0YUZpZWxkQ29udmVydGVkIiwib0RhdGFNb2RlbFBhdGgiLCJlZGl0U3R5bGVQcm9wZXJ0aWVzIiwiaW5wdXRUeXBlIiwic2V0RWRpdFN0eWxlUHJvcGVydGllcyIsImVkaXRTdHlsZSIsImlzVmFsaWRGb3JNYXNzRWRpdCIsImlzQ29sbGVjdGlvbkZpZWxkIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiZ2V0SXNGaWVsZEdycCIsIiRUeXBlIiwiVGFyZ2V0IiwidmFsdWUiLCJnZXRUZXh0UGF0aCIsInByb3BlcnR5IiwidGV4dEJpbmRpbmciLCJkaXNwbGF5TW9kZSIsImRlc2NyaXB0aW9uUGF0aCIsInBhdGgiLCJwYXJhbWV0ZXJzIiwicHJvcHMiLCJwcmVwYXJlRGF0YUZvckRpYWxvZyIsIm9UYWJsZSIsImFEYXRhQXJyYXkiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ3VycmVudEVudGl0eVNldE5hbWUiLCJkYXRhIiwiYVRhYmxlRmllbGRzIiwiZ2V0VGFibGVGaWVsZHMiLCJvRW50aXR5VHlwZUNvbnRleHQiLCJnZXRDb250ZXh0Iiwib0VudGl0eVNldENvbnRleHQiLCJvRGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm9EYXRhRmllbGRNb2RlbCIsIkpTT05Nb2RlbCIsIm9SZXN1bHQiLCJzTGFiZWxUZXh0IiwiYlZhbHVlSGVscEVuYWJsZWQiLCJzVW5pdFByb3BlcnR5UGF0aCIsImJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCIsIm9UZXh0QmluZGluZyIsIm9Db2x1bW5JbmZvIiwiZGF0YVByb3BlcnR5Iiwib1Byb3BlcnR5SW5mbyIsImxhYmVsIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVByb3BlcnRpZXMiLCJvUHJvcGVydHkiLCJuYW1lIiwiZ2V0VGV4dEJpbmRpbmciLCJvRmllbGRDb250ZXh0IiwiYW5ub3RhdGlvblBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJvUHJvcGVydHlDb250ZXh0Iiwib0ludGVyZmFjZSIsImdldEludGVyZmFjZSIsIlZhbHVlIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJiSGlkZGVuRmllbGQiLCJpc0ltYWdlIiwiY29udGV4dCIsImdldFBhdGgiLCJfdHlwZSIsIiR0YXJnZXQiLCJjaGFydFByb3BlcnR5IiwidGVybSIsImlzQWN0aW9uIiwiQWN0aW9uIiwiaXNGaWVsZEdycCIsImhhc1ZhbHVlSGVscCIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoIiwidW5pdFByb3BlcnR5SW5mbyIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJwcm9wZXJ0eUZvckZpZWxkQ29udHJvbCIsImV4cEJpbmRpbmciLCJnZXRFZGl0TW9kZSIsImNvbnN0YW50IiwiZWRpdE1vZGVWYWx1ZXMiLCJPYmplY3QiLCJrZXlzIiwiRWRpdE1vZGUiLCJlZGl0TW9kZUlzU3RhdGljIiwiaW5jbHVkZXMiLCJlZGl0YWJsZSIsIkVkaXRhYmxlIiwibmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwIiwiaXNSZWFkT25seSIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiQ29tbW9uVXRpbHMiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJnZXRSZXF1aXJlZEV4cHJlc3Npb24iLCJudWxsYWJsZSIsInNldERhdGEiLCJhQ29sdW1ucyIsImdldENvbHVtbnMiLCJjb2x1bW5zRGF0YSIsImdldFBhcmVudCIsImdldFRhYmxlRGVmaW5pdGlvbiIsImNvbHVtbnMiLCJtYXAiLCJvQ29sdW1uIiwic0RhdGFQcm9wZXJ0eSIsImdldERhdGFQcm9wZXJ0eSIsImFSZWFsdGVkQ29sdW1uSW5mbyIsInR5cGUiLCJnZXRIZWFkZXIiLCJnZXREZWZhdWx0VGV4dHNGb3JEaWFsb2ciLCJvUmVzb3VyY2VCdW5kbGUiLCJpU2VsZWN0ZWRDb250ZXh0cyIsImJEaXNwbGF5TW9kZSIsImdldFRleHQiLCJ0b1N0cmluZyIsInNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyIsIm9EZWZhdWx0VmFsdWVzIiwiYlVPTUZpZWxkIiwidW5pdFByb3BlcnR5Iiwic0lucHV0VHlwZSIsImJQcm9wZXJ0eVJlcXVpcmVkIiwiaXNGaWVsZFJlcXVpcmVkIiwic1N1ZmZpeEZvcktlZXBFeGlzdGluZyIsImRlZmF1bHRPcHRpb25zIiwic2VsZWN0T3B0aW9uc0V4aXN0Iiwic2VsZWN0T3B0aW9ucyIsImtlZXBFbnRyeSIsInRleHQiLCJrZWVwRXhpc3RpbmdQcmVmaXgiLCJrZXkiLCJmYWxzZUVudHJ5IiwidGV4dEluZm8iLCJ0cnV0aHlFbnRyeSIsInVuc2hpZnQiLCJpc1ZhbHVlSGVscEVuYWJsZWQiLCJpc1ZhbHVlSGVscEVuYWJsZWRGb3JVbml0IiwidmhkRW50cnkiLCJ1c2VWYWx1ZUhlbHBWYWx1ZSIsImNsZWFyRW50cnkiLCJjbGVhckZpZWxkVmFsdWUiLCJlbXB0eUVudHJ5IiwibGVhdmVCbGFua1ZhbHVlIiwiZ2V0VGV4dEFycmFuZ2VtZW50SW5mbyIsInNlbGVjdGVkQ29udGV4dCIsImRlc2NyaXB0aW9uVmFsdWUiLCJmdWxsVGV4dCIsIkxvZyIsImluZm8iLCJpc0VkaXRhYmxlIiwiYW55IiwiYmluZGluZyIsImdldEJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwib25Db250ZXh0RWRpdGFibGVDaGFuZ2UiLCJvRGlhbG9nRGF0YU1vZGVsIiwib2JqZWN0c0ZvclZpc2liaWxpdHkiLCJnZXRQcm9wZXJ0eSIsInNldFByb3BlcnR5IiwidXBkYXRlT25Db250ZXh0Q2hhbmdlIiwibU9Ub1VzZSIsInZhbHVlcyIsImF0dGFjaENoYW5nZSIsImJpbmQiLCJnZXRCb3VuZE9iamVjdCIsIkFueSIsIm1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEZpZWxkVmlzaWJsaXR5IiwiaXNDb250ZXh0RWRpdGFibGUiLCJzZXRSdW50aW1lTW9kZWxPbkRpYWxvZyIsImRpYWxvZ0NvbnRleHQiLCJhVW5pdERhdGEiLCJhUmVzdWx0cyIsImFSZWFkT25seUZpZWxkSW5mbyIsIm9EYXRhIiwibm9GaWVsZHMiLCJvSW5EYXRhIiwib1RleHRJbmZvIiwic1Byb3BlcnR5S2V5Iiwic1VuaXRQcm9wZXJ0eU5hbWUiLCJvRGlzdGluY3RWYWx1ZU1hcCIsIm9EaXN0aW5jdFVuaXRNYXAiLCJzTXVsdGlMZXZlbFBhdGhWYWx1ZSIsImRpc3BsYXkiLCJ2YWx1ZVBhdGgiLCJlbnRyeSIsInVuaXRFbnRyeSIsInNNdWx0aUxldmVsUHJvcFBhdGhWYWx1ZSIsInNlbGVjdGVkS2V5IiwiYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMiLCJvYmoiLCJiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMiLCJpc1Byb3BlcnR5UmVhZE9ubHkiLCJvcGVyYW5kcyIsIm9wZXJhbmQxIiwib3BlcmFuZDIiLCJwcm9wZXJ0eVBhdGgiLCJwcm9wZXJ0eVZhbHVlIiwiZWRpdE1vZGUiLCJ2aXNpYmxlIiwiZ2V0RGlhbG9nQ29udGV4dCIsInRhYmxlIiwiZGlhbG9nIiwidHJhbnNDdHgiLCJnZXRCaW5kaW5nQ29udGV4dCIsImxpc3RCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRyYW5zaWVudExpc3RCaW5kaW5nIiwiYmluZExpc3QiLCIkJHVwZGF0ZUdyb3VwSWQiLCJyZWZyZXNoSW50ZXJuYWwiLCJjcmVhdGUiLCJvbkRpYWxvZ09wZW4iLCJldmVudCIsInNvdXJjZSIsImdldFNvdXJjZSIsImZpZWxkc0luZm9Nb2RlbCIsImNyZWF0ZURpYWxvZyIsIm9Db250cm9sbGVyIiwic0ZyYWdtZW50TmFtZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJvRnJhZ21lbnQiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImJpbmRpbmdDb250ZXh0cyIsImRhdGFGaWVsZE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtb2RlbHMiLCJvQ3JlYXRlZEZyYWdtZW50IiwiRnJhZ21lbnQiLCJsb2FkIiwiZGVmaW5pdGlvbiIsIm9EaWFsb2dDb250ZW50IiwiRHJhZnRTdGF0dXMiLCJGRUxpYnJhcnkiLCJvRGlhbG9nIiwiRGlhbG9nIiwicmVzaXphYmxlIiwidGl0bGUiLCJtYXNzRWRpdFRpdGxlIiwiY29udGVudCIsImFmdGVyT3BlbiIsImJlZ2luQnV0dG9uIiwiQnV0dG9uIiwiaGVscGVycyIsImdldEV4cEJpbmRpbmdGb3JBcHBseUJ1dHRvblR4dCIsInByZXNzIiwib0V2ZW50IiwiZ2V0VmlldyIsIm9JbkRpYWxvZyIsIm9Nb2RlbCIsImFQcm9wZXJ0eVJlYWRhYmxlSW5mbyIsImNoYW5nZVByb21pc2UiLCJiUmVhZE9ubHlGaWVsZCIsImdyb3VwSWQiLCJlcnJvclZhbHVlcyIsImlkeCIsImtleVZhbHVlIiwiX2VkaXRGbG93Iiwic2V0RHJhZnRTdGF0dXMiLCJTYXZpbmciLCJ0aGVuIiwiY2F0Y2giLCJvRXJyb3IiLCJlcnJvciIsImFsbFNldHRsZWQiLCJvTGlzdEJpbmRpbmciLCJvRXh0ZW5zaW9uQVBJIiwiZ2V0RXh0ZW5zaW9uQVBJIiwicmVmcmVzaCIsInN1YnRpdGxlQ29sdW1uIiwiZ2V0TWVzc2FnZUNvbHVtbiIsIm1lc3NhZ2VzIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0cyIsIm1lc3NhZ2UiLCJtZXNzYWdlVGFyZ2V0cyIsImdldFRhcmdldHMiLCJwZXJzaXN0ZW50IiwiYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0IiwiZmluZCIsImdldFRhcmdldCIsImFkZGl0aW9uYWxUZXh0IiwiU2F2ZWQiLCJzdWNjZXNzVG9hc3QiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsIkNsZWFyIiwiZ2V0TWVzc2FnZUhhbmRsZXIiLCJzaG93TWVzc2FnZXMiLCJpc09wZW4iLCJjbG9zZSIsImRlc3Ryb3kiLCJlbmRCdXR0b24iLCJjYW5jZWxCdXR0b25UZXh0IiwiaGFzRWRpdGFibGVGaWVsZHNCaW5kaW5nIiwiZ2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzIiwiZmllbGRzIiwidG90YWxFeHAiLCJyZWR1Y2UiLCJleHByZXNzaW9uIiwiZmllbGQiLCJvciIsInBhdGhJbk1vZGVsIiwibm90IiwiZGVmYXVsdFZhbHVlcyIsImVkaXRhYmxlRXhwIiwi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YyxDQUFDc1MsT0FBZixDQUF1QjBELGlDQUF2QixDQUF5REMsTUFBekQsRUFBaUUvTixRQUFqRSxDQUFELENBQXhCO0FBQ0E7QUFyQk87QUE3N0JhLEdBQXZCO1NBczlCZWxJLGMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHtcblx0QmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRpZkVsc2UsXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRkVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSxcblx0Z2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGgsXG5cdGhhc0N1cnJlbmN5LFxuXHRoYXNVbml0LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VGV4dEJpbmRpbmcsIHNldEVkaXRTdHlsZVByb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvRmllbGQubWV0YWRhdGFcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEVkaXRNb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW0vRWRpdE1vZGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEFueVR5cGUgfSBmcm9tIFwiLi4vY29udHJvbHMvQW55XCI7XG5pbXBvcnQgQW55IGZyb20gXCIuLi9jb250cm9scy9BbnlcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUmVhZE9ubHlFeHByZXNzaW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRpbmcvRmllbGRDb250cm9sSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRFZGl0TW9kZSwgZ2V0UmVxdWlyZWRFeHByZXNzaW9uLCBpc0NvbGxlY3Rpb25GaWVsZCB9IGZyb20gXCIuLi90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8qIFRoaXMgY2xhc3MgY29udGFpbnMgaGVscGVycyB0byBiZSB1c2VkIGZvciBtYXNzIGVkaXQgZnVuY3Rpb25hbGl0eSAqL1xudHlwZSBUZXh0QXJyYW5nZW1lbnRJbmZvID0ge1xuXHR0ZXh0QXJyYW5nZW1lbnQ6IHN0cmluZztcblx0dmFsdWVQYXRoOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uUGF0aD86IHN0cmluZztcblx0dmFsdWU6IHN0cmluZztcblx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0ZnVsbFRleHQ6IHN0cmluZztcbn07XG5cbnR5cGUgQmluZGluZ0luZm8gPSB7XG5cdHBhdGg/OiBzdHJpbmc7XG5cdG1vZGVsPzogc3RyaW5nIHwgb2JqZWN0O1xuXHRwYXJhbWV0ZXJzPzogQXJyYXk8QmluZGluZ0luZm8+O1xufTtcblxuY29uc3QgTWFzc0VkaXRIZWxwZXIgPSB7XG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgdmFsdWUgYXQgZmluYWwgb3IgZGVlcGVzdCBsZXZlbCBwYXRoIHdpdGggYSBibGFuayBhcnJheS5cblx0ICogUmV0dXJuIGFuIGVtcHR5IGFycmF5IHBvaW50aW5nIHRvIHRoZSBmaW5hbCBvciBkZWVwZXN0IGxldmVsIHBhdGguXG5cdCAqXG5cdCAqIEBwYXJhbSBzUGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBhVmFsdWVzIEFycmF5IGluc3RhbmNlIHdoZXJlIHRoZSBkZWZhdWx0IGRhdGEgbmVlZHMgdG8gYmUgYWRkZWRcblx0ICogQHJldHVybnMgVGhlIGZpbmFsIHBhdGhcblx0ICovXG5cdGluaXRMYXN0TGV2ZWxPZlByb3BlcnR5UGF0aDogZnVuY3Rpb24gKHNQYXRoOiBzdHJpbmcsIGFWYWx1ZXM6IGFueSAvKiwgdHJhbnNDdHg6IENvbnRleHQgKi8pIHtcblx0XHRsZXQgYUZpbmFsUGF0aDogYW55O1xuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgYVBhdGhzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRcdGxldCBzRnVsbFBhdGggPSBcIlwiO1xuXHRcdGFQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRcdGlmICghYVZhbHVlc1tzUHJvcGVydHlQYXRoXSAmJiBpbmRleCA9PT0gMCkge1xuXHRcdFx0XHRhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdID0ge307XG5cdFx0XHRcdGFGaW5hbFBhdGggPSBhVmFsdWVzW3NQcm9wZXJ0eVBhdGhdO1xuXHRcdFx0XHRzRnVsbFBhdGggPSBzRnVsbFBhdGggKyBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0fSBlbHNlIGlmICghYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRzRnVsbFBhdGggPSBgJHtzRnVsbFBhdGh9LyR7c1Byb3BlcnR5UGF0aH1gO1xuXHRcdFx0XHRpZiAoc0Z1bGxQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHRcdGFGaW5hbFBhdGhbc1Byb3BlcnR5UGF0aF0gPSB7fTtcblx0XHRcdFx0XHRhRmluYWxQYXRoID0gYUZpbmFsUGF0aFtzUHJvcGVydHlQYXRoXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRmluYWxQYXRoW3NQcm9wZXJ0eVBhdGhdID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUZpbmFsUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB1bmlxdWUgdmFsdWVzIGZvciBnaXZlbiBhcnJheSB2YWx1ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzVmFsdWUgUHJvcGVydHkgdmFsdWVcblx0ICogQHBhcmFtIGluZGV4IEluZGV4IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZVxuXHQgKiBAcGFyYW0gc2VsZiBJbnN0YW5jZSBvZiB0aGUgYXJyYXlcblx0ICogQHJldHVybnMgVGhlIHVuaXF1ZSB2YWx1ZVxuXHQgKi9cblx0Z2V0VW5pcXVlVmFsdWVzOiBmdW5jdGlvbiAoc1ZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIHNlbGY6IGFueVtdKSB7XG5cdFx0aWYgKHNWYWx1ZSAhPSB1bmRlZmluZWQgJiYgc1ZhbHVlICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBzZWxmLmluZGV4T2Yoc1ZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmb3IgYSBtdWx0aS1sZXZlbCBwYXRoIChmb3IgZXhhbXBsZTogX01hdGVyaWFscy9NYXRlcmlhbF9EZXRhaWxzIGdldHMgdGhlIHZhbHVlIG9mIE1hdGVyaWFsX0RldGFpbHMgdW5kZXIgX01hdGVyaWFscyBPYmplY3QpLlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eVZhbHVlLCB3aGljaCBjYW4gYmUgb2YgYW55IHR5cGUgKHN0cmluZywgbnVtYmVyLCBldGMuLikuXG5cdCAqXG5cdCAqIEBwYXJhbSBzRGF0YVByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSBvVmFsdWVzIE9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXNcblx0ICogQHJldHVybnMgVGhlIHByb3BlcnR5IHZhbHVlXG5cdCAqL1xuXHRnZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoOiBmdW5jdGlvbiAoc0RhdGFQcm9wZXJ0eVBhdGg6IHN0cmluZywgb1ZhbHVlczogYW55KSB7XG5cdFx0aWYgKHNEYXRhUHJvcGVydHlQYXRoICYmIHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gMCkge1xuXHRcdFx0Y29uc3QgYVByb3BlcnR5UGF0aHMgPSBzRGF0YVByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRsZXQgUmVzdWx0OiBhbnk7XG5cdFx0XHRhUHJvcGVydHlQYXRocy5mb3JFYWNoKGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFJlc3VsdCA9IG9WYWx1ZXMgJiYgb1ZhbHVlc1tzUGF0aF0gPyBvVmFsdWVzW3NQYXRoXSA6IFJlc3VsdCAmJiBSZXN1bHRbc1BhdGhdO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gUmVzdWx0O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2V0cyB0aGUga2V5IHBhdGggZm9yIHRoZSBrZXkgb2YgYSBjb21ibyBib3ggdGhhdCBtdXN0IGJlIHNlbGVjdGVkIGluaXRpYWxseSB3aGVuIHRoZSBkaWFsb2cgb3BlbnM6XG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyBkaWZmZXJlbnQsIHRoZW4gPCBLZWVwIEV4aXN0aW5nIFZhbHVlcyA+IGlzIHByZXNlbGVjdGVkLlxuXHQgKiA9PiBJZiBwcm9wZXJ0eVZhbHVlIGZvciBhbGwgc2VsZWN0ZWQgY29udGV4dHMgaXMgdGhlIHNhbWUsIHRoZW4gdGhlIHByb3BlcnR5VmFsdWUgaXMgcHJlc2VsZWN0ZWQuXG5cdCAqID0+IElmIHByb3BlcnR5VmFsdWUgZm9yIGFsbCBzZWxlY3RlZCBjb250ZXh0cyBpcyBlbXB0eSwgdGhlbiA8IExlYXZlIEJsYW5rID4gaXMgcHJlc2VsZWN0ZWQuXG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcGFyYW0gc0RhdGFQcm9wZXJ0eVBhdGggRGF0YSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgcGF0aFxuXHQgKi9cblx0Z2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveDogZnVuY3Rpb24gKGFDb250ZXh0czogYW55W10sIHNEYXRhUHJvcGVydHlQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoc0RhdGFQcm9wZXJ0eVBhdGggJiYgYUNvbnRleHRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhQ29udGV4dHMsXG5cdFx0XHRcdGFQcm9wZXJ0eVZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdG9TZWxlY3RlZENvbnRleHQuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IG9Db250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFBhdGhDb25kaXRpb24gPVxuXHRcdFx0XHRcdHNEYXRhUHJvcGVydHlQYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgJiYgb0RhdGFPYmplY3QuaGFzT3duUHJvcGVydHkoc0RhdGFQcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpWzBdKTtcblx0XHRcdFx0aWYgKG9Db250ZXh0ICYmIChvRGF0YU9iamVjdC5oYXNPd25Qcm9wZXJ0eShzRGF0YVByb3BlcnR5UGF0aCkgfHwgc011bHRpTGV2ZWxQYXRoQ29uZGl0aW9uKSkge1xuXHRcdFx0XHRcdGFQcm9wZXJ0eVZhbHVlcy5wdXNoKG9Db250ZXh0LmdldE9iamVjdChzRGF0YVByb3BlcnR5UGF0aCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGFVbmlxdWVQcm9wZXJ0eVZhbHVlcyA9IGFQcm9wZXJ0eVZhbHVlcy5maWx0ZXIoTWFzc0VkaXRIZWxwZXIuZ2V0VW5pcXVlVmFsdWVzKTtcblx0XHRcdGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRyZXR1cm4gYERlZmF1bHQvJHtzRGF0YVByb3BlcnR5UGF0aH1gO1xuXHRcdFx0fSBlbHNlIGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdHJldHVybiBgRW1wdHkvJHtzRGF0YVByb3BlcnR5UGF0aH1gO1xuXHRcdFx0fSBlbHNlIGlmIChhVW5pcXVlUHJvcGVydHlWYWx1ZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdHJldHVybiBgJHtzRGF0YVByb3BlcnR5UGF0aH0vJHthVW5pcXVlUHJvcGVydHlWYWx1ZXNbMF19YDtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBoaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZSBbYm90aCBzdGF0aWMgYW5kIHBhdGggYmFzZWRdIGZvciB0YWJsZSdzIHNlbGVjdGVkIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBoaWRkZW5WYWx1ZSBIaWRkZW4gYW5ub3RhdGlvbiB2YWx1ZSAvIHBhdGggZm9yIGZpZWxkXG5cdCAqIEBwYXJhbSBhQ29udGV4dHMgQ29udGV4dHMgZm9yIG1hc3MgZWRpdFxuXHQgKiBAcmV0dXJucyBUaGUgaGlkZGVuIGFubm90YXRpb24gdmFsdWVcblx0ICovXG5cdGdldEhpZGRlblZhbHVlRm9yQ29udGV4dHM6IGZ1bmN0aW9uIChoaWRkZW5WYWx1ZTogYW55LCBhQ29udGV4dHM6IGFueVtdKSB7XG5cdFx0aWYgKGhpZGRlblZhbHVlICYmIGhpZGRlblZhbHVlLiRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gIWFDb250ZXh0cy5zb21lKGZ1bmN0aW9uIChvU2VsZWN0ZWRDb250ZXh0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGhpZGRlblZhbHVlLiRQYXRoKSA9PT0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGhpZGRlblZhbHVlO1xuXHR9LFxuXG5cdGdldElucHV0VHlwZTogZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogYW55LCBkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSwgb0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGVkaXRTdHlsZVByb3BlcnRpZXMgPSB7fSBhcyBGaWVsZFByb3BlcnRpZXM7XG5cdFx0bGV0IGlucHV0VHlwZSE6IHN0cmluZztcblx0XHRpZiAocHJvcGVydHlJbmZvKSB7XG5cdFx0XHRzZXRFZGl0U3R5bGVQcm9wZXJ0aWVzKGVkaXRTdHlsZVByb3BlcnRpZXMsIGRhdGFGaWVsZENvbnZlcnRlZCwgb0RhdGFNb2RlbFBhdGgsIHRydWUpO1xuXHRcdFx0aW5wdXRUeXBlID0gZWRpdFN0eWxlUHJvcGVydGllcz8uZWRpdFN0eWxlIHx8IFwiXCI7XG5cdFx0fVxuXHRcdGNvbnN0IGlzVmFsaWRGb3JNYXNzRWRpdCA9XG5cdFx0XHRpbnB1dFR5cGUgJiZcblx0XHRcdFtcIkRhdGVQaWNrZXJcIiwgXCJUaW1lUGlja2VyXCIsIFwiRGF0ZVRpbWVQaWNrZXJcIiwgXCJSYXRpbmdJbmRpY2F0b3JcIl0uaW5kZXhPZihpbnB1dFR5cGUpID09PSAtMSAmJlxuXHRcdFx0IWlzQ29sbGVjdGlvbkZpZWxkKG9EYXRhTW9kZWxQYXRoKSAmJlxuXHRcdFx0IWhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyhwcm9wZXJ0eUluZm8pO1xuXG5cdFx0cmV0dXJuIChpc1ZhbGlkRm9yTWFzc0VkaXQgfHwgXCJcIikgJiYgaW5wdXRUeXBlO1xuXHR9LFxuXG5cdGdldElzRmllbGRHcnA6IGZ1bmN0aW9uIChkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHRkYXRhRmllbGRDb252ZXJ0ZWQgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQudmFsdWUgJiZcblx0XHRcdGRhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQudmFsdWUuaW5kZXhPZihcIkZpZWxkR3JvdXBcIikgPiAtMVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0ZXh0IHBhdGggZm9yIHRoZSBtYXNzIGVkaXQgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSB0ZXh0QmluZGluZyBUZXh0IEJpbmRpbmcgSW5mb1xuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGUgRGlzcGxheSBtb2RlXG5cdCAqIEByZXR1cm5zIFRleHQgUHJvcGVydHkgUGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldFRleHRQYXRoOiBmdW5jdGlvbiAocHJvcGVydHk6IHN0cmluZywgdGV4dEJpbmRpbmc6IGFueSwgZGlzcGxheU1vZGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGRlc2NyaXB0aW9uUGF0aDtcblx0XHRpZiAodGV4dEJpbmRpbmcgJiYgKHRleHRCaW5kaW5nLnBhdGggfHwgKHRleHRCaW5kaW5nLnBhcmFtZXRlcnMgJiYgdGV4dEJpbmRpbmcucGFyYW1ldGVycy5sZW5ndGgpKSAmJiBwcm9wZXJ0eSkge1xuXHRcdFx0aWYgKHRleHRCaW5kaW5nLnBhdGggJiYgZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIikge1xuXHRcdFx0XHRkZXNjcmlwdGlvblBhdGggPSB0ZXh0QmluZGluZy5wYXRoO1xuXHRcdFx0fSBlbHNlIGlmICh0ZXh0QmluZGluZy5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdHRleHRCaW5kaW5nLnBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAocHJvcHM6IEJpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdFx0aWYgKHByb3BzLnBhdGggJiYgcHJvcHMucGF0aCAhPT0gcHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aCA9IHByb3BzLnBhdGg7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlc2NyaXB0aW9uUGF0aDtcblx0fSxcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgYSBKU09OIE1vZGVsIGZvciBwcm9wZXJ0aWVzIG9mIGRpYWxvZyBmaWVsZHMgW2xhYmVsLCB2aXNpYmxpdHksIGRhdGFwcm9wZXJ0eSwgZXRjLl0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVGFibGUgSW5zdGFuY2Ugb2YgVGFibGVcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBhRGF0YUFycmF5IEFycmF5IGNvbnRhaW5pbmcgZGF0YSByZWxhdGVkIHRvIHRoZSBkaWFsb2cgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RlbFxuXHQgKi9cblx0cHJlcGFyZURhdGFGb3JEaWFsb2c6IGZ1bmN0aW9uIChvVGFibGU6IFRhYmxlLCBhQ29udGV4dHM6IGFueVtdLCBhRGF0YUFycmF5OiBhbnlbXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGFibGUgJiYgKG9UYWJsZS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIGFueSksXG5cdFx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvVGFibGUuZGF0YShcIm1ldGFQYXRoXCIpLFxuXHRcdFx0YVRhYmxlRmllbGRzID0gTWFzc0VkaXRIZWxwZXIuZ2V0VGFibGVGaWVsZHMob1RhYmxlKSxcblx0XHRcdG9FbnRpdHlUeXBlQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0Q29udGV4dChgJHtzQ3VycmVudEVudGl0eVNldE5hbWV9L0BgKSxcblx0XHRcdG9FbnRpdHlTZXRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KHNDdXJyZW50RW50aXR5U2V0TmFtZSksXG5cdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvRW50aXR5VHlwZUNvbnRleHQpO1xuXG5cdFx0Y29uc3Qgb0RhdGFGaWVsZE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGxldCBvUmVzdWx0O1xuXHRcdGxldCBzTGFiZWxUZXh0O1xuXHRcdGxldCBiVmFsdWVIZWxwRW5hYmxlZDtcblx0XHRsZXQgc1VuaXRQcm9wZXJ0eVBhdGg7XG5cdFx0bGV0IGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdDtcblx0XHRsZXQgb1RleHRCaW5kaW5nO1xuXG5cdFx0YVRhYmxlRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW5JbmZvOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNEYXRhUHJvcGVydHlQYXRoID0gb0NvbHVtbkluZm8uZGF0YVByb3BlcnR5O1xuXHRcdFx0aWYgKHNEYXRhUHJvcGVydHlQYXRoKSB7XG5cdFx0XHRcdGxldCBvUHJvcGVydHlJbmZvID0gc0RhdGFQcm9wZXJ0eVBhdGggJiYgb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofUBgKTtcblx0XHRcdFx0c0xhYmVsVGV4dCA9XG5cdFx0XHRcdFx0b0NvbHVtbkluZm8ubGFiZWwgfHxcblx0XHRcdFx0XHQob1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXSkgfHxcblx0XHRcdFx0XHRvQ29sdW1uSW5mby5kYXRhUHJvcGVydHk7XG5cblx0XHRcdFx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0XHRcdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZpbHRlcihmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRvUHJvcGVydHk6IGFueVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS5uYW1lID09PSBzRGF0YVByb3BlcnR5UGF0aDtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3RbMF0gfHwge307XG5cdFx0XHRcdG9UZXh0QmluZGluZyA9IGdldFRleHRCaW5kaW5nKG9EYXRhTW9kZWxPYmplY3RQYXRoLCB7fSwgdHJ1ZSkgfHwge307XG5cdFx0XHRcdGNvbnN0IG9GaWVsZENvbnRleHQgPSBvTWV0YU1vZGVsLmdldENvbnRleHQob0NvbHVtbkluZm8uYW5ub3RhdGlvblBhdGgpLFxuXHRcdFx0XHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQgPSBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dChvRmllbGRDb250ZXh0KSxcblx0XHRcdFx0XHRvUHJvcGVydHlDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRDb250ZXh0KGAke3NDdXJyZW50RW50aXR5U2V0TmFtZX0vJHtzRGF0YVByb3BlcnR5UGF0aH1AYCksXG5cdFx0XHRcdFx0b0ludGVyZmFjZSA9IG9Qcm9wZXJ0eUNvbnRleHQgJiYgb1Byb3BlcnR5Q29udGV4dC5nZXRJbnRlcmZhY2UoKTtcblxuXHRcdFx0XHRsZXQgb0RhdGFNb2RlbFBhdGggPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0ZpZWxkQ29udGV4dCwgb0VudGl0eVNldENvbnRleHQpO1xuXHRcdFx0XHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZD8uVmFsdWU/LnBhdGg/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRvRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoKG9EYXRhTW9kZWxQYXRoLCBzRGF0YVByb3BlcnR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkhpZGRlbkZpZWxkID1cblx0XHRcdFx0XHRNYXNzRWRpdEhlbHBlci5nZXRIaWRkZW5WYWx1ZUZvckNvbnRleHRzKFxuXHRcdFx0XHRcdFx0b0ZpZWxkQ29udGV4dCAmJiBvRmllbGRDb250ZXh0LmdldE9iamVjdCgpW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSxcblx0XHRcdFx0XHRcdGFDb250ZXh0c1xuXHRcdFx0XHRcdCkgfHwgZmFsc2U7XG5cdFx0XHRcdGNvbnN0IGlzSW1hZ2UgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm9bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXTtcblxuXHRcdFx0XHRvSW50ZXJmYWNlLmNvbnRleHQgPSB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW50ZXJmYWNlLmdldE1vZGVsKCk7XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRnZXRQYXRoOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvUHJvcGVydHlJbmZvID1cblx0XHRcdFx0XHRvRGF0YUZpZWxkQ29udmVydGVkLl90eXBlID09PSBcIlByb3BlcnR5XCJcblx0XHRcdFx0XHRcdD8gb0RhdGFGaWVsZENvbnZlcnRlZFxuXHRcdFx0XHRcdFx0OiAob0RhdGFGaWVsZENvbnZlcnRlZCAmJiBvRGF0YUZpZWxkQ29udmVydGVkLlZhbHVlICYmIG9EYXRhRmllbGRDb252ZXJ0ZWQuVmFsdWUuJHRhcmdldCkgfHxcblx0XHRcdFx0XHRcdCAgKG9EYXRhRmllbGRDb252ZXJ0ZWQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQgJiYgb0RhdGFGaWVsZENvbnZlcnRlZC5UYXJnZXQuJHRhcmdldCk7XG5cdFx0XHRcdC8vIERhdGFmaWVsZCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIEZpZWxkQ29udHJvbCBjYWxjdWxhdGlvbiwgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWRcblxuXHRcdFx0XHRjb25zdCBjaGFydFByb3BlcnR5ID0gb1Byb3BlcnR5SW5mbyAmJiBvUHJvcGVydHlJbmZvLnRlcm0gJiYgb1Byb3BlcnR5SW5mby50ZXJtID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCI7XG5cdFx0XHRcdGNvbnN0IGlzQWN0aW9uID0gISFvRGF0YUZpZWxkQ29udmVydGVkLkFjdGlvbjtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEdycCA9IE1hc3NFZGl0SGVscGVyLmdldElzRmllbGRHcnAob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cblx0XHRcdFx0aWYgKGlzSW1hZ2UgfHwgYkhpZGRlbkZpZWxkIHx8IGNoYXJ0UHJvcGVydHkgfHwgaXNBY3Rpb24gfHwgaXNGaWVsZEdycCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFZhbHVlSGVscCBwcm9wZXJ0aWVzXG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkID0gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdFx0XHRzVW5pdFByb3BlcnR5UGF0aCA9XG5cdFx0XHRcdFx0KChoYXNDdXJyZW5jeShvUHJvcGVydHlJbmZvKSB8fCBoYXNVbml0KG9Qcm9wZXJ0eUluZm8pKSAmJiBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aChvUHJvcGVydHlJbmZvKSkgfHwgXCJcIjtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5SW5mbyA9IHNVbml0UHJvcGVydHlQYXRoICYmIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5SW5mbyk7XG5cdFx0XHRcdGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCA9IHVuaXRQcm9wZXJ0eUluZm8gJiYgaGFzVmFsdWVIZWxwKHVuaXRQcm9wZXJ0eUluZm8pO1xuXG5cdFx0XHRcdC8vIEVkaXRNb2RlIGFuZCBJbnB1dFR5cGVcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlGb3JGaWVsZENvbnRyb2wgPSBvUHJvcGVydHlJbmZvICYmIG9Qcm9wZXJ0eUluZm8uVmFsdWUgPyBvUHJvcGVydHlJbmZvLlZhbHVlIDogb1Byb3BlcnR5SW5mbztcblx0XHRcdFx0Y29uc3QgZXhwQmluZGluZyA9IGdldEVkaXRNb2RlKHByb3BlcnR5Rm9yRmllbGRDb250cm9sLCBvRGF0YU1vZGVsUGF0aCwgZmFsc2UsIGZhbHNlLCBvRGF0YUZpZWxkQ29udmVydGVkLCBjb25zdGFudCh0cnVlKSk7XG5cdFx0XHRcdGNvbnN0IGVkaXRNb2RlVmFsdWVzID0gT2JqZWN0LmtleXMoRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0TW9kZUlzU3RhdGljID0gISFleHBCaW5kaW5nICYmIGVkaXRNb2RlVmFsdWVzLmluY2x1ZGVzKGV4cEJpbmRpbmcgYXMgRWRpdE1vZGUpO1xuXHRcdFx0XHRjb25zdCBlZGl0YWJsZSA9ICEhZXhwQmluZGluZyAmJiAoKGVkaXRNb2RlSXNTdGF0aWMgJiYgZXhwQmluZGluZyA9PT0gRWRpdE1vZGUuRWRpdGFibGUpIHx8ICFlZGl0TW9kZUlzU3RhdGljKTtcblx0XHRcdFx0Y29uc3QgbmF2UHJvcGVydHlXaXRoVmFsdWVIZWxwID0gc0RhdGFQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpICYmIGJWYWx1ZUhlbHBFbmFibGVkO1xuXHRcdFx0XHRpZiAoIWVkaXRhYmxlIHx8IG5hdlByb3BlcnR5V2l0aFZhbHVlSGVscCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGlucHV0VHlwZSA9IE1hc3NFZGl0SGVscGVyLmdldElucHV0VHlwZShvUHJvcGVydHlJbmZvLCBvRGF0YUZpZWxkQ29udmVydGVkLCBvRGF0YU1vZGVsUGF0aCk7XG5cblx0XHRcdFx0aWYgKGlucHV0VHlwZSkge1xuXHRcdFx0XHRcdGNvbnN0IGlzUmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbihvUHJvcGVydHlJbmZvKTtcblx0XHRcdFx0XHRjb25zdCBkaXNwbGF5TW9kZSA9IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpKTtcblx0XHRcdFx0XHRvUmVzdWx0ID0ge1xuXHRcdFx0XHRcdFx0XCJsYWJlbFwiOiBzTGFiZWxUZXh0LFxuXHRcdFx0XHRcdFx0XCJkYXRhUHJvcGVydHlcIjogc0RhdGFQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHRcImlzVmFsdWVIZWxwRW5hYmxlZFwiOiBiVmFsdWVIZWxwRW5hYmxlZCA/IGJWYWx1ZUhlbHBFbmFibGVkIDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcInVuaXRQcm9wZXJ0eVwiOiBzVW5pdFByb3BlcnR5UGF0aCAmJiAhc0RhdGFQcm9wZXJ0eVBhdGguaW5jbHVkZXMoXCIvXCIpID8gc1VuaXRQcm9wZXJ0eVBhdGggOiBmYWxzZSxcblx0XHRcdFx0XHRcdFwiaXNWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdFwiOlxuXHRcdFx0XHRcdFx0XHRiVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgJiYgIXNVbml0UHJvcGVydHlQYXRoLmluY2x1ZGVzKFwiL1wiKSA/IGJWYWx1ZUhlbHBFbmFibGVkRm9yVW5pdCA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XCJwcm9wZXJ0eVBhdGhGb3JWYWx1ZUhlbHBcIjogYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NEYXRhUHJvcGVydHlQYXRofWAsXG5cdFx0XHRcdFx0XHRcInByb3BlcnR5UGF0aEZvclZhbHVlSGVscFVuaXRcIjogc1VuaXRQcm9wZXJ0eVBhdGggJiYgYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8ke3NVbml0UHJvcGVydHlQYXRofWAsXG5cdFx0XHRcdFx0XHRcImlzRmllbGRSZXF1aXJlZFwiOiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5SW5mbywgb0RhdGFGaWVsZENvbnZlcnRlZCwgdHJ1ZSksXG5cdFx0XHRcdFx0XHRcImRlZmF1bHRTZWxlY3Rpb25QYXRoXCI6IHNEYXRhUHJvcGVydHlQYXRoXG5cdFx0XHRcdFx0XHRcdD8gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChhQ29udGV4dHMsIHNEYXRhUHJvcGVydHlQYXRoKVxuXHRcdFx0XHRcdFx0XHQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XCJkZWZhdWx0U2VsZWN0aW9uVW5pdFBhdGhcIjogc1VuaXRQcm9wZXJ0eVBhdGhcblx0XHRcdFx0XHRcdFx0PyBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KGFDb250ZXh0cywgc1VuaXRQcm9wZXJ0eVBhdGgpXG5cdFx0XHRcdFx0XHRcdDogZmFsc2UsXG5cdFx0XHRcdFx0XHRcImVudGl0eVNldFwiOiBzQ3VycmVudEVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0XHRcImRpc3BsYXlcIjogZGlzcGxheU1vZGUsXG5cdFx0XHRcdFx0XHRcImRlc2NyaXB0aW9uUGF0aFwiOiBNYXNzRWRpdEhlbHBlci5nZXRUZXh0UGF0aChzRGF0YVByb3BlcnR5UGF0aCwgb1RleHRCaW5kaW5nLCBkaXNwbGF5TW9kZSksXG5cdFx0XHRcdFx0XHRcIm51bGxhYmxlXCI6IG9Qcm9wZXJ0eUluZm8ubnVsbGFibGUgIT09IHVuZGVmaW5lZCA/IG9Qcm9wZXJ0eUluZm8ubnVsbGFibGUgOiB0cnVlLFxuXHRcdFx0XHRcdFx0XCJpc1Byb3BlcnR5UmVhZE9ubHlcIjogaXNSZWFkT25seSAhPT0gdW5kZWZpbmVkID8gaXNSZWFkT25seSA6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XCJpbnB1dFR5cGVcIjogaW5wdXRUeXBlLFxuXHRcdFx0XHRcdFx0XCJlZGl0TW9kZVwiOiBlZGl0YWJsZSA/IGV4cEJpbmRpbmcgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcInVuaXREYXRhUGF0aFwiOiBzVW5pdFByb3BlcnR5UGF0aCAmJiBcImZpZWxkc0luZm8+L3VuaXREYXRhL1wiLFxuXHRcdFx0XHRcdFx0XCJ2YWx1ZXNQYXRoXCI6IFwiZmllbGRzSW5mbz4vdmFsdWVzL1wiXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRhRGF0YUFycmF5LnB1c2gob1Jlc3VsdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRvRGF0YUZpZWxkTW9kZWwuc2V0RGF0YShhRGF0YUFycmF5KTtcblx0XHRyZXR1cm4gb0RhdGFGaWVsZE1vZGVsO1xuXHR9LFxuXG5cdGdldFRhYmxlRmllbGRzOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRjb25zdCBhQ29sdW1ucyA9IChvVGFibGUgJiYgb1RhYmxlLmdldENvbHVtbnMoKSkgfHwgW107XG5cdFx0Y29uc3QgY29sdW1uc0RhdGEgPSBvVGFibGUgJiYgb1RhYmxlLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLmNvbHVtbnM7XG5cdFx0cmV0dXJuIGFDb2x1bW5zLm1hcChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0XHRjb25zdCBzRGF0YVByb3BlcnR5ID0gb0NvbHVtbiAmJiBvQ29sdW1uLmdldERhdGFQcm9wZXJ0eSgpLFxuXHRcdFx0XHRhUmVhbHRlZENvbHVtbkluZm8gPVxuXHRcdFx0XHRcdGNvbHVtbnNEYXRhICYmXG5cdFx0XHRcdFx0Y29sdW1uc0RhdGEuZmlsdGVyKGZ1bmN0aW9uIChvQ29sdW1uSW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbHVtbkluZm8ubmFtZSA9PT0gc0RhdGFQcm9wZXJ0eSAmJiBvQ29sdW1uSW5mby50eXBlID09PSBcIkFubm90YXRpb25cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFwiZGF0YVByb3BlcnR5XCI6IHNEYXRhUHJvcGVydHksXG5cdFx0XHRcdFwibGFiZWxcIjogb0NvbHVtbi5nZXRIZWFkZXIoKSxcblx0XHRcdFx0XCJhbm5vdGF0aW9uUGF0aFwiOiBhUmVhbHRlZENvbHVtbkluZm8gJiYgYVJlYWx0ZWRDb2x1bW5JbmZvWzBdICYmIGFSZWFsdGVkQ29sdW1uSW5mb1swXS5hbm5vdGF0aW9uUGF0aFxuXHRcdFx0fTtcblx0XHR9KTtcblx0fSxcblxuXHRnZXREZWZhdWx0VGV4dHNGb3JEaWFsb2c6IGZ1bmN0aW9uIChvUmVzb3VyY2VCdW5kbGU6IGFueSwgaVNlbGVjdGVkQ29udGV4dHM6IGFueSwgb1RhYmxlOiBhbnkpIHtcblx0XHQvLyBUaGUgY29uZmlybSBidXR0b24gdGV4dCBpcyBcIlNhdmVcIiBmb3IgdGFibGUgaW4gRGlzcGxheSBtb2RlIGFuZCBcIkFwcGx5XCIgZm9yIHRhYmxlIGluIGVkaXQgbW9kZS4gVGhpcyBjYW4gYmUgbGF0ZXIgZXhwb3NlZCBpZiBuZWVkZWQuXG5cdFx0Y29uc3QgYkRpc3BsYXlNb2RlID0gb1RhYmxlLmRhdGEoXCJkaXNwbGF5TW9kZVByb3BlcnR5QmluZGluZ1wiKSA9PT0gXCJ0cnVlXCI7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJrZWVwRXhpc3RpbmdQcmVmaXhcIjogXCI8IEtlZXBcIixcblx0XHRcdFwibGVhdmVCbGFua1ZhbHVlXCI6IFwiPCBMZWF2ZSBCbGFuayA+XCIsXG5cdFx0XHRcImNsZWFyRmllbGRWYWx1ZVwiOiBcIjwgQ2xlYXIgVmFsdWVzID5cIixcblx0XHRcdFwibWFzc0VkaXRUaXRsZVwiOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUFTU19FRElUX0RJQUxPR19USVRMRVwiLCBpU2VsZWN0ZWRDb250ZXh0cy50b1N0cmluZygpKSxcblx0XHRcdFwiYXBwbHlCdXR0b25UZXh0XCI6IGJEaXNwbGF5TW9kZVxuXHRcdFx0XHQ/IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfU0FWRV9CVVRUT05fVEVYVFwiKVxuXHRcdFx0XHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfQVBQTFlfQlVUVE9OX1RFWFRcIiksXG5cdFx0XHRcInVzZVZhbHVlSGVscFZhbHVlXCI6IFwiPCBVc2UgVmFsdWUgSGVscCA+XCIsXG5cdFx0XHRcImNhbmNlbEJ1dHRvblRleHRcIjogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcIm5vRmllbGRzXCI6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NQVNTX0VESVRfTk9fRURJVEFCTEVfRklFTERTXCIpLFxuXHRcdFx0XCJva0J1dHRvblRleHRcIjogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9ESUFMT0dfT0tcIilcblx0XHR9O1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgc3VmZml4IHRvIHRoZSAna2VlcCBleGlzdGluZycgcHJvcGVydHkgb2YgdGhlIGNvbWJvQm94LlxuXHQgKlxuXHQgKiBAcGFyYW0gc0lucHV0VHlwZSBJbnB1dFR5cGUgb2YgdGhlIGZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmdcblx0ICovXG5cdC8vIGdldFN1ZmZpeEZvcktlZXBFeGlzaXRpbmc6IGZ1bmN0aW9uIChzSW5wdXRUeXBlOiBzdHJpbmcpIHtcblx0Ly8gXHRsZXQgc1Jlc3VsdCA9IFwiVmFsdWVzXCI7XG5cblx0Ly8gXHRzd2l0Y2ggKHNJbnB1dFR5cGUpIHtcblx0Ly8gXHRcdC8vVE9ETyAtIEFkZCBmb3Igb3RoZXIgY29udHJvbCB0eXBlcyBhcyB3ZWxsIChSYWRpbyBCdXR0b24sIEVtYWlsLCBJbnB1dCwgTURDIEZpZWxkcywgSW1hZ2UgZXRjLilcblx0Ly8gXHRcdGNhc2UgXCJEYXRlUGlja2VyXCI6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIkRhdGVzXCI7XG5cdC8vIFx0XHRcdGJyZWFrO1xuXHQvLyBcdFx0Y2FzZSBcIkNoZWNrQm94XCI6XG5cdC8vIFx0XHRcdHNSZXN1bHQgPSBcIlNldHRpbmdzXCI7XG5cdC8vIFx0XHRcdGJyZWFrO1xuXHQvLyBcdFx0ZGVmYXVsdDpcblx0Ly8gXHRcdFx0c1Jlc3VsdCA9IFwiVmFsdWVzXCI7XG5cdC8vIFx0fVxuXHQvLyBcdHJldHVybiBzUmVzdWx0O1xuXHQvLyB9LFxuXG5cdC8qKlxuXHQgKiBBZGRzIGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBtb2RlbCBbS2VlcCBFeGlzdGluZyBWYWx1ZXMsIExlYXZlIEJsYW5rXS5cblx0ICpcblx0ICogQHBhcmFtIGFWYWx1ZXMgQXJyYXkgaW5zdGFuY2Ugd2hlcmUgdGhlIGRlZmF1bHQgZGF0YSBuZWVkcyB0byBiZSBhZGRlZFxuXHQgKiBAcGFyYW0gb0RlZmF1bHRWYWx1ZXMgRGVmYXVsdCB2YWx1ZXMgZnJvbSBBcHBsaWNhdGlvbiBNYW5pZmVzdFxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5SW5mbyBQcm9wZXJ0eSBpbmZvcm1hdGlvblxuXHQgKiBAcGFyYW0gYlVPTUZpZWxkXG5cdCAqL1xuXHRzZXREZWZhdWx0VmFsdWVzVG9EaWFsb2c6IGZ1bmN0aW9uIChhVmFsdWVzOiBhbnksIG9EZWZhdWx0VmFsdWVzOiBhbnksIG9Qcm9wZXJ0eUluZm86IGFueSwgYlVPTUZpZWxkPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBiVU9NRmllbGQgPyBvUHJvcGVydHlJbmZvLnVuaXRQcm9wZXJ0eSA6IG9Qcm9wZXJ0eUluZm8uZGF0YVByb3BlcnR5LFxuXHRcdFx0c0lucHV0VHlwZSA9IG9Qcm9wZXJ0eUluZm8uaW5wdXRUeXBlLFxuXHRcdFx0YlByb3BlcnR5UmVxdWlyZWQgPSBvUHJvcGVydHlJbmZvLmlzRmllbGRSZXF1aXJlZDtcblx0XHQvLyBjb25zdCBzU3VmZml4Rm9yS2VlcEV4aXN0aW5nID0gTWFzc0VkaXRIZWxwZXIuZ2V0U3VmZml4Rm9yS2VlcEV4aXNpdGluZyhzSW5wdXRUeXBlKTtcblx0XHRjb25zdCBzU3VmZml4Rm9yS2VlcEV4aXN0aW5nID0gXCJWYWx1ZXNcIjtcblx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zID0gYVZhbHVlcy5kZWZhdWx0T3B0aW9ucyB8fCBbXTtcblx0XHRjb25zdCBzZWxlY3RPcHRpb25zRXhpc3QgPSBhVmFsdWVzLnNlbGVjdE9wdGlvbnMgJiYgYVZhbHVlcy5zZWxlY3RPcHRpb25zLmxlbmd0aCA+IDA7XG5cdFx0Y29uc3Qga2VlcEVudHJ5ID0ge1xuXHRcdFx0dGV4dDogYCR7b0RlZmF1bHRWYWx1ZXMua2VlcEV4aXN0aW5nUHJlZml4fSAke3NTdWZmaXhGb3JLZWVwRXhpc3Rpbmd9ID5gLFxuXHRcdFx0a2V5OiBgRGVmYXVsdC8ke3NQcm9wZXJ0eVBhdGh9YFxuXHRcdH07XG5cblx0XHRpZiAoc0lucHV0VHlwZSA9PT0gXCJDaGVja0JveFwiKSB7XG5cdFx0XHRjb25zdCBmYWxzZUVudHJ5ID0geyB0ZXh0OiBcIk5vXCIsIGtleTogYCR7c1Byb3BlcnR5UGF0aH0vZmFsc2VgLCB0ZXh0SW5mbzogeyB2YWx1ZTogZmFsc2UgfSB9O1xuXHRcdFx0Y29uc3QgdHJ1dGh5RW50cnkgPSB7IHRleHQ6IFwiWWVzXCIsIGtleTogYCR7c1Byb3BlcnR5UGF0aH0vdHJ1ZWAsIHRleHRJbmZvOiB7IHZhbHVlOiB0cnVlIH0gfTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdChmYWxzZUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChmYWxzZUVudHJ5KTtcblx0XHRcdGFWYWx1ZXMudW5zaGlmdCh0cnV0aHlFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQodHJ1dGh5RW50cnkpO1xuXHRcdFx0YVZhbHVlcy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKG9Qcm9wZXJ0eUluZm8uaXNWYWx1ZUhlbHBFbmFibGVkIHx8IChvUHJvcGVydHlJbmZvLmlzVmFsdWVIZWxwRW5hYmxlZEZvclVuaXQgJiYgYlVPTUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCB2aGRFbnRyeSA9IHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMudXNlVmFsdWVIZWxwVmFsdWUsIGtleTogYFVzZVZhbHVlSGVscFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdGFWYWx1ZXMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdCh2aGRFbnRyeSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoc2VsZWN0T3B0aW9uc0V4aXN0KSB7XG5cdFx0XHRcdGlmIChiUHJvcGVydHlSZXF1aXJlZCAhPT0gXCJ0cnVlXCIgJiYgIWJVT01GaWVsZCkge1xuXHRcdFx0XHRcdGNvbnN0IGNsZWFyRW50cnkgPSB7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmNsZWFyRmllbGRWYWx1ZSwga2V5OiBgQ2xlYXJGaWVsZFZhbHVlLyR7c1Byb3BlcnR5UGF0aH1gIH07XG5cdFx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGNsZWFyRW50cnkpO1xuXHRcdFx0XHRcdGFWYWx1ZXMuZGVmYXVsdE9wdGlvbnMudW5zaGlmdChjbGVhckVudHJ5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhVmFsdWVzLnVuc2hpZnQoa2VlcEVudHJ5KTtcblx0XHRcdFx0YVZhbHVlcy5kZWZhdWx0T3B0aW9ucy51bnNoaWZ0KGtlZXBFbnRyeSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlbXB0eUVudHJ5ID0geyB0ZXh0OiBvRGVmYXVsdFZhbHVlcy5sZWF2ZUJsYW5rVmFsdWUsIGtleTogYERlZmF1bHQvJHtzUHJvcGVydHlQYXRofWAgfTtcblx0XHRcdFx0YVZhbHVlcy51bnNoaWZ0KGVtcHR5RW50cnkpO1xuXHRcdFx0XHRhVmFsdWVzLmRlZmF1bHRPcHRpb25zLnVuc2hpZnQoZW1wdHlFbnRyeSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZXQgdGV4dCBhcnJhbmdlbWVudCBpbmZvIGZvciBhIGNvbnRleHQgcHJvcGVydHkuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBQcm9wZXJ0eSBQYXRoXG5cdCAqIEBwYXJhbSBkZXNjcmlwdGlvblBhdGggUGF0aCB0byB0ZXh0IGFzc29jaWF0aW9uIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGUgRGlzcGxheSBtb2RlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGV4dCBhc3NvY2lhdGlvblxuXHQgKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0IENvbnRleHQgdG8gZmluZCB0aGUgZnVsbCB0ZXh0XG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IGFycmFuZ2VtZW50XG5cdCAqL1xuXHRnZXRUZXh0QXJyYW5nZW1lbnRJbmZvOiBmdW5jdGlvbiAoXG5cdFx0cHJvcGVydHk6IHN0cmluZyxcblx0XHRkZXNjcmlwdGlvblBhdGg6IHN0cmluZyxcblx0XHRkaXNwbGF5TW9kZTogc3RyaW5nLFxuXHRcdHNlbGVjdGVkQ29udGV4dDogQ29udGV4dFxuXHQpOiBUZXh0QXJyYW5nZW1lbnRJbmZvIHtcblx0XHRsZXQgdmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHByb3BlcnR5KSxcblx0XHRcdGRlc2NyaXB0aW9uVmFsdWUsXG5cdFx0XHRmdWxsVGV4dDtcblx0XHRpZiAoZGVzY3JpcHRpb25QYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdGRlc2NyaXB0aW9uVmFsdWUgPSBzZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KGRlc2NyaXB0aW9uUGF0aCkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IGRlc2NyaXB0aW9uVmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRmdWxsVGV4dCA9IHZhbHVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChwcm9wZXJ0eSkgfHwgXCJcIjtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblZhbHVlID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChkZXNjcmlwdGlvblBhdGgpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZnVsbFRleHQgPSBkZXNjcmlwdGlvblZhbHVlID8gYCR7dmFsdWV9ICgke2Rlc2NyaXB0aW9uVmFsdWV9KWAgOiB2YWx1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHR2YWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QocHJvcGVydHkpIHx8IFwiXCI7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25WYWx1ZSA9IHNlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoZGVzY3JpcHRpb25QYXRoKSB8fCBcIlwiO1xuXHRcdFx0XHRcdGZ1bGxUZXh0ID0gZGVzY3JpcHRpb25WYWx1ZSA/IGAke2Rlc2NyaXB0aW9uVmFsdWV9ICgke3ZhbHVlfSlgIDogdmFsdWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0TG9nLmluZm8oYERpc3BsYXkgUHJvcGVydHkgbm90IGFwcGxpY2FibGU6ICR7cHJvcGVydHl9YCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFwidGV4dEFycmFuZ2VtZW50XCI6IGRpc3BsYXlNb2RlLFxuXHRcdFx0XCJ2YWx1ZVBhdGhcIjogcHJvcGVydHksXG5cdFx0XHRcImRlc2NyaXB0aW9uUGF0aFwiOiBkZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcInZhbHVlXCI6IHZhbHVlLFxuXHRcdFx0XCJkZXNjcmlwdGlvblwiOiBkZXNjcmlwdGlvblZhbHVlLFxuXHRcdFx0XCJmdWxsVGV4dFwiOiBmdWxsVGV4dFxuXHRcdH07XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgdmlzaWJpbGl0eSB2YWx1dWUgZm9yIHRoZSBNYW5hZ2VkT2JqZWN0IEFueS5cblx0ICpcblx0ICogQHBhcmFtIGFueSBUaGUgTWFuYWdlZE9iamVjdCBBbnkgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHZpc2libGUgdmFsdWUgb2YgdGhlIGJpbmRpbmcuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWFzcyBlZGl0IGZpZWxkIGlzIGVkaXRhYmxlLlxuXHQgKi9cblx0aXNFZGl0YWJsZTogZnVuY3Rpb24gKGFueTogQW55VHlwZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJpbmRpbmcgPSBhbnkuZ2V0QmluZGluZyhcImFueVwiKTtcblx0XHRjb25zdCB2YWx1ZSA9IChiaW5kaW5nIGFzIGFueSkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gRWRpdE1vZGUuRWRpdGFibGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZSBhbmQgdXBkYXRlIHRoZSB2aXNpYmlsaXR5IG9mIG1hc3MgZWRpdCBmaWVsZCBvbiBjaGFuZ2Ugb2YgdGhlIE1hbmFnZWRPYmplY3QgQW55IGJpbmRpbmcuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRGlhbG9nRGF0YU1vZGVsIE1vZGVsIHRvIGJlIHVzZWQgcnVudGltZS5cblx0ICogQHBhcmFtIGRhdGFQcm9wZXJ0eSBGaWVsZCBuYW1lLlxuXHQgKi9cblx0b25Db250ZXh0RWRpdGFibGVDaGFuZ2U6IGZ1bmN0aW9uIChvRGlhbG9nRGF0YU1vZGVsOiBKU09OTW9kZWwsIGRhdGFQcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgb2JqZWN0c0ZvclZpc2liaWxpdHkgPSBvRGlhbG9nRGF0YU1vZGVsLmdldFByb3BlcnR5KGAvdmFsdWVzLyR7ZGF0YVByb3BlcnR5fS9vYmplY3RzRm9yVmlzaWJpbGl0eWApIHx8IFtdO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gb2JqZWN0c0ZvclZpc2liaWxpdHkuc29tZShNYXNzRWRpdEhlbHBlci5pc0VkaXRhYmxlKTtcblxuXHRcdGlmIChlZGl0YWJsZSkge1xuXHRcdFx0b0RpYWxvZ0RhdGFNb2RlbC5zZXRQcm9wZXJ0eShgL3ZhbHVlcy8ke2RhdGFQcm9wZXJ0eX0vdmlzaWJsZWAsIGVkaXRhYmxlKTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIFVwZGF0ZSBNYW5hZ2VkIE9iamVjdCBBbnkgZm9yIHZpc2liaWxpdHkgb2YgdGhlIG1hc3MgZWRpdCBmaWVsZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBtT1RvVXNlIFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzIG9mIHRoZSBmaWVsZC5cblx0ICovXG5cdHVwZGF0ZU9uQ29udGV4dENoYW5nZTogZnVuY3Rpb24gKG1PVG9Vc2U6IEFueVR5cGUsIG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCwgZGF0YVByb3BlcnR5OiBzdHJpbmcsIHZhbHVlczogYW55KSB7XG5cdFx0Y29uc3QgYmluZGluZyA9IG1PVG9Vc2UuZ2V0QmluZGluZyhcImFueVwiKTtcblxuXHRcdHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eSA9IHZhbHVlcy5vYmplY3RzRm9yVmlzaWJpbGl0eSB8fCBbXTtcblx0XHR2YWx1ZXMub2JqZWN0c0ZvclZpc2liaWxpdHkucHVzaChtT1RvVXNlKTtcblxuXHRcdGJpbmRpbmcuYXR0YWNoQ2hhbmdlKE1hc3NFZGl0SGVscGVyLm9uQ29udGV4dEVkaXRhYmxlQ2hhbmdlLmJpbmQobnVsbCwgb0RpYWxvZ0RhdGFNb2RlbCwgZGF0YVByb3BlcnR5KSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBib3VuZCBvYmplY3QgdG8gY2FsY3VsYXRlIHRoZSB2aXNpYmlsaXR5IG9mIGNvbnRleHRzLlxuXHQgKlxuXHQgKiBAcGFyYW0gZXhwQmluZGluZyBCaW5kaW5nIFN0cmluZyBvYmplY3QuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgdGhlIGJpbmRpbmcgdmFsdWUuXG5cdCAqIEByZXR1cm5zIFRoZSBNYW5hZ2VkT2JqZWN0IEFueSB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmlzaWJsZSB2YWx1ZSBvZiB0aGUgYmluZGluZy5cblx0ICovXG5cdGdldEJvdW5kT2JqZWN0OiBmdW5jdGlvbiAoZXhwQmluZGluZzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIGNvbnRleHQ6IENvbnRleHQpOiBBbnlUeXBlIHtcblx0XHRjb25zdCBtT1RvVXNlID0gbmV3IEFueSh7IGFueTogZXhwQmluZGluZyB9KTtcblx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRtT1RvVXNlLnNldE1vZGVsKG1vZGVsKTtcblx0XHRtT1RvVXNlLnNldEJpbmRpbmdDb250ZXh0KGNvbnRleHQpO1xuXG5cdFx0cmV0dXJuIG1PVG9Vc2U7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBleHBCaW5kaW5nIEJpbmRpbmcgU3RyaW5nIG9iamVjdC5cblx0ICogQHBhcmFtIG9EaWFsb2dEYXRhTW9kZWwgTW9kZWwgdG8gYmUgdXNlZCBydW50aW1lLlxuXHQgKiBAcGFyYW0gZGF0YVByb3BlcnR5IEZpZWxkIG5hbWUuXG5cdCAqIEBwYXJhbSB2YWx1ZXMgVmFsdWVzIG9mIHRoZSBmaWVsZC5cblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB0aGUgYmluZGluZyB2YWx1ZS5cblx0ICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBtYXNzIGVkaXQgZmllbGQgaXMgZWRpdGFibGUuXG5cdCAqL1xuXHRnZXRGaWVsZFZpc2libGl0eTogZnVuY3Rpb24gKFxuXHRcdGV4cEJpbmRpbmc6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLFxuXHRcdG9EaWFsb2dEYXRhTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRkYXRhUHJvcGVydHk6IHN0cmluZyxcblx0XHR2YWx1ZXM6IGFueSxcblx0XHRjb250ZXh0OiBDb250ZXh0XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG1PVG9Vc2UgPSBNYXNzRWRpdEhlbHBlci5nZXRCb3VuZE9iamVjdChleHBCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRjb25zdCBpc0NvbnRleHRFZGl0YWJsZSA9IE1hc3NFZGl0SGVscGVyLmlzRWRpdGFibGUobU9Ub1VzZSk7XG5cblx0XHRpZiAoIWlzQ29udGV4dEVkaXRhYmxlKSB7XG5cdFx0XHRNYXNzRWRpdEhlbHBlci51cGRhdGVPbkNvbnRleHRDaGFuZ2UobU9Ub1VzZSwgb0RpYWxvZ0RhdGFNb2RlbCwgZGF0YVByb3BlcnR5LCB2YWx1ZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gaXNDb250ZXh0RWRpdGFibGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIGEgcnVudGltZSBtb2RlbDpcblx0ICogPT4gVGhlIG1vZGVsIGNvbnNpc3RzIG9mIHZhbHVlcyBzaG93biBpbiB0aGUgY29tYm9Cb3ggb2YgdGhlIGRpYWxvZyAoTGVhdmUgQmxhbmssIEtlZXAgRXhpc3RpbmcgVmFsdWVzLCBvciBhbnkgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBzZWxlY3RlZCBjb250ZXh0LCBldGMuKVxuXHQgKiA9PiBUaGUgbW9kZWwgd2lsbCBjYXB0dXJlIHJ1bnRpbWUgY2hhbmdlcyBpbiB0aGUgcmVzdWx0cyBwcm9wZXJ0eSAodGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGNvbWJvQm94KS5cblx0ICpcblx0ICogQHBhcmFtIGFDb250ZXh0cyBDb250ZXh0cyBmb3IgbWFzcyBlZGl0XG5cdCAqIEBwYXJhbSBhRGF0YUFycmF5IEFycmF5IGNvbnRhaW5pbmcgZGF0YSByZWxhdGVkIHRvIHRoZSBkaWFsb2cgdXNlZCBieSBib3RoIHRoZSBzdGF0aWMgYW5kIHRoZSBydW50aW1lIG1vZGVsXG5cdCAqIEBwYXJhbSBvRGVmYXVsdFZhbHVlcyBEZWZhdWx0IHZhbHVlcyBmcm9tIGkxOG5cblx0ICogQHBhcmFtIGRpYWxvZ0NvbnRleHQgVHJhbnNpZW50IGNvbnRleHQgZm9yIG1hc3MgZWRpdCBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIFRoZSBydW50aW1lIG1vZGVsXG5cdCAqL1xuXHRzZXRSdW50aW1lTW9kZWxPbkRpYWxvZzogZnVuY3Rpb24gKGFDb250ZXh0czogYW55W10sIGFEYXRhQXJyYXk6IGFueVtdLCBvRGVmYXVsdFZhbHVlczogYW55LCBkaWFsb2dDb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3QgYVZhbHVlczogYW55W10gPSBbXTtcblx0XHRjb25zdCBhVW5pdERhdGE6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVJlc3VsdHM6IGFueVtdID0gW107XG5cdFx0Y29uc3QgYVJlYWRPbmx5RmllbGRJbmZvOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IG9EYXRhID0ge1xuXHRcdFx0XCJ2YWx1ZXNcIjogYVZhbHVlcyxcblx0XHRcdFwidW5pdERhdGFcIjogYVVuaXREYXRhLFxuXHRcdFx0XCJyZXN1bHRzXCI6IGFSZXN1bHRzLFxuXHRcdFx0XCJyZWFkYWJsZVByb3BlcnR5RGF0YVwiOiBhUmVhZE9ubHlGaWVsZEluZm8sXG5cdFx0XHRcInNlbGVjdGVkS2V5XCI6IHVuZGVmaW5lZCxcblx0XHRcdFwibm9GaWVsZHNcIjogb0RlZmF1bHRWYWx1ZXMubm9GaWVsZHNcblx0XHR9O1xuXHRcdGNvbnN0IG9EaWFsb2dEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG9EYXRhKTtcblx0XHRhRGF0YUFycmF5LmZvckVhY2goZnVuY3Rpb24gKG9JbkRhdGE6IGFueSkge1xuXHRcdFx0bGV0IG9UZXh0SW5mbztcblx0XHRcdGxldCBzUHJvcGVydHlLZXk7XG5cdFx0XHRsZXQgc1VuaXRQcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBvRGlzdGluY3RWYWx1ZU1hcDogYW55ID0ge307XG5cdFx0XHRjb25zdCBvRGlzdGluY3RVbml0TWFwOiBhbnkgPSB7fTtcblx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiBvSW5EYXRhLmRhdGFQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdGNvbnN0IGFGaW5hbFBhdGggPSBNYXNzRWRpdEhlbHBlci5pbml0TGFzdExldmVsT2ZQcm9wZXJ0eVBhdGgob0luRGF0YS5kYXRhUHJvcGVydHksIGFWYWx1ZXMgLyosIGRpYWxvZ0NvbnRleHQgKi8pO1xuXHRcdFx0XHRjb25zdCBhUHJvcGVydHlQYXRocyA9IG9JbkRhdGEuZGF0YVByb3BlcnR5LnNwbGl0KFwiL1wiKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbnRleHQgb2YgYUNvbnRleHRzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc011bHRpTGV2ZWxQYXRoVmFsdWUgPSBjb250ZXh0LmdldE9iamVjdChvSW5EYXRhLmRhdGFQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0c1Byb3BlcnR5S2V5ID0gYCR7b0luRGF0YS5kYXRhUHJvcGVydHl9LyR7c011bHRpTGV2ZWxQYXRoVmFsdWV9YDtcblx0XHRcdFx0XHRpZiAoIW9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0gJiYgYUZpbmFsUGF0aFthUHJvcGVydHlQYXRoc1thUHJvcGVydHlQYXRocy5sZW5ndGggLSAxXV0pIHtcblx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRlc2NyaXB0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YUZpbmFsUGF0aFthUHJvcGVydHlQYXRoc1thUHJvcGVydHlQYXRocy5sZW5ndGggLSAxXV0ucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFwidGV4dFwiOiAob1RleHRJbmZvICYmIG9UZXh0SW5mby5mdWxsVGV4dCkgfHwgc011bHRpTGV2ZWxQYXRoVmFsdWUsXG5cdFx0XHRcdFx0XHRcdFwia2V5XCI6IHNQcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XCJ0ZXh0SW5mb1wiOiBvVGV4dEluZm9cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSA9IHNNdWx0aUxldmVsUGF0aFZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBpZiAoT2JqZWN0LmtleXMob0Rpc3RpbmN0VmFsdWVNYXApLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHQvLyBcdGRpYWxvZ0NvbnRleHQuc2V0UHJvcGVydHkob0RhdGEuZGF0YVByb3BlcnR5LCBzUHJvcGVydHlLZXkgJiYgb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSk7XG5cdFx0XHRcdC8vIH1cblxuXHRcdFx0XHRhRmluYWxQYXRoW2FQcm9wZXJ0eVBhdGhzW2FQcm9wZXJ0eVBhdGhzLmxlbmd0aCAtIDFdXS50ZXh0SW5mbyA9IHtcblx0XHRcdFx0XHRkZXNjcmlwdGlvblBhdGg6IG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdHZhbHVlUGF0aDogb0luRGF0YS5kYXRhUHJvcGVydHksXG5cdFx0XHRcdFx0ZGlzcGxheU1vZGU6IG9JbkRhdGEuZGlzcGxheVxuXHRcdFx0XHR9O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdIHx8IFtdO1xuXHRcdFx0XHRpZiAob0luRGF0YS51bml0UHJvcGVydHkpIHtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldID0gYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSB8fCBbXTtcblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXSA9IGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdIHx8IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgY29udGV4dCBvZiBhQ29udGV4dHMpIHtcblx0XHRcdFx0XHRjb25zdCBvRGF0YU9iamVjdCA9IGNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0c1Byb3BlcnR5S2V5ID0gYCR7b0luRGF0YS5kYXRhUHJvcGVydHl9LyR7b0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldfWA7XG5cdFx0XHRcdFx0aWYgKG9JbkRhdGEuZGF0YVByb3BlcnR5ICYmIG9EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XSAmJiAhb0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRcdFx0aWYgKG9JbkRhdGEuaW5wdXRUeXBlICE9IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0XHRcdFx0XHRvVGV4dEluZm8gPSBNYXNzRWRpdEhlbHBlci5nZXRUZXh0QXJyYW5nZW1lbnRJbmZvKFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGlzcGxheSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVudHJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFwidGV4dFwiOiAob1RleHRJbmZvICYmIG9UZXh0SW5mby5mdWxsVGV4dCkgfHwgb0RhdGFPYmplY3Rbb0luRGF0YS5kYXRhUHJvcGVydHldLFxuXHRcdFx0XHRcdFx0XHRcdFwia2V5XCI6IHNQcm9wZXJ0eUtleSxcblx0XHRcdFx0XHRcdFx0XHRcInRleHRJbmZvXCI6IG9UZXh0SW5mb1xuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5wdXNoKGVudHJ5KTtcblx0XHRcdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV1bXCJzZWxlY3RPcHRpb25zXCJdLnB1c2goZW50cnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b0Rpc3RpbmN0VmFsdWVNYXBbc1Byb3BlcnR5S2V5XSA9IG9EYXRhT2JqZWN0W29JbkRhdGEuZGF0YVByb3BlcnR5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKG9JbkRhdGEudW5pdFByb3BlcnR5ICYmIG9EYXRhT2JqZWN0W29JbkRhdGEudW5pdFByb3BlcnR5XSkge1xuXHRcdFx0XHRcdFx0c1VuaXRQcm9wZXJ0eU5hbWUgPSBgJHtvSW5EYXRhLnVuaXRQcm9wZXJ0eX0vJHtvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV19YDtcblx0XHRcdFx0XHRcdGlmICghb0Rpc3RpbmN0VW5pdE1hcFtzVW5pdFByb3BlcnR5TmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9JbkRhdGEuaW5wdXRUeXBlICE9IFwiQ2hlY2tCb3hcIikge1xuXHRcdFx0XHRcdFx0XHRcdG9UZXh0SW5mbyA9IE1hc3NFZGl0SGVscGVyLmdldFRleHRBcnJhbmdlbWVudEluZm8oXG5cdFx0XHRcdFx0XHRcdFx0XHRvSW5EYXRhLnVuaXRQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0XHRcdG9JbkRhdGEuZGVzY3JpcHRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRcdFx0b0luRGF0YS5kaXNwbGF5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdW5pdEVudHJ5ID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XCJ0ZXh0XCI6IChvVGV4dEluZm8gJiYgb1RleHRJbmZvLmZ1bGxUZXh0KSB8fCBvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRcImtleVwiOiBzVW5pdFByb3BlcnR5TmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFwidGV4dEluZm9cIjogb1RleHRJbmZvXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnB1c2godW5pdEVudHJ5KTtcblx0XHRcdFx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldW1wic2VsZWN0T3B0aW9uc1wiXS5wdXNoKHVuaXRFbnRyeSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0b0Rpc3RpbmN0VW5pdE1hcFtzVW5pdFByb3BlcnR5TmFtZV0gPSBvRGF0YU9iamVjdFtvSW5EYXRhLnVuaXRQcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldLnRleHRJbmZvID0ge1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uUGF0aDogb0luRGF0YS5kZXNjcmlwdGlvblBhdGgsXG5cdFx0XHRcdFx0dmFsdWVQYXRoOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRkaXNwbGF5TW9kZTogb0luRGF0YS5kaXNwbGF5XG5cdFx0XHRcdH07XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RWYWx1ZU1hcCkubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0ZGlhbG9nQ29udGV4dC5zZXRQcm9wZXJ0eShvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgc1Byb3BlcnR5S2V5ICYmIG9EaXN0aW5jdFZhbHVlTWFwW3NQcm9wZXJ0eUtleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRGlzdGluY3RVbml0TWFwKS5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRkaWFsb2dDb250ZXh0LnNldFByb3BlcnR5KG9JbkRhdGEudW5pdFByb3BlcnR5LCBzVW5pdFByb3BlcnR5TmFtZSAmJiBvRGlzdGluY3RVbml0TWFwW3NVbml0UHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRhRGF0YUFycmF5LmZvckVhY2goZnVuY3Rpb24gKG9JbkRhdGE6IGFueSkge1xuXHRcdFx0bGV0IHZhbHVlczogYW55ID0ge307XG5cdFx0XHRpZiAob0luRGF0YS5kYXRhUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0XHRjb25zdCBzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUgPSBNYXNzRWRpdEhlbHBlci5nZXRWYWx1ZUZvck11bHRpTGV2ZWxQYXRoKG9JbkRhdGEuZGF0YVByb3BlcnR5LCBhVmFsdWVzKTtcblx0XHRcdFx0aWYgKCFzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUpIHtcblx0XHRcdFx0XHRzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUucHVzaCh7IHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSwga2V5OiBgRW1wdHkvJHtvSW5EYXRhLmRhdGFQcm9wZXJ0eX1gIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLnNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyhzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWUsIG9EZWZhdWx0VmFsdWVzLCBvSW5EYXRhKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YWx1ZXMgPSBzTXVsdGlMZXZlbFByb3BQYXRoVmFsdWU7XG5cdFx0XHR9IGVsc2UgaWYgKGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldKSB7XG5cdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldID0gYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0gfHwgW107XG5cdFx0XHRcdE1hc3NFZGl0SGVscGVyLnNldERlZmF1bHRWYWx1ZXNUb0RpYWxvZyhhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSwgb0RlZmF1bHRWYWx1ZXMsIG9JbkRhdGEpO1xuXHRcdFx0XHR2YWx1ZXMgPSBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0gJiYgYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5sZW5ndGgpIHtcblx0XHRcdFx0TWFzc0VkaXRIZWxwZXIuc2V0RGVmYXVsdFZhbHVlc1RvRGlhbG9nKGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0sIG9EZWZhdWx0VmFsdWVzLCBvSW5EYXRhLCB0cnVlKTtcblx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS50ZXh0SW5mbyA9IHt9O1xuXHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldLnNlbGVjdGVkS2V5ID0gTWFzc0VkaXRIZWxwZXIuZ2V0RGVmYXVsdFNlbGVjdGlvblBhdGhDb21ib0JveChcblx0XHRcdFx0XHRhQ29udGV4dHMsXG5cdFx0XHRcdFx0b0luRGF0YS51bml0UHJvcGVydHlcblx0XHRcdFx0KTtcblx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5pbnB1dFR5cGUgPSBvSW5EYXRhLmlucHV0VHlwZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiBhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XSAmJiAhYVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0ubGVuZ3RoKSB8fFxuXHRcdFx0XHQob0luRGF0YS51bml0UHJvcGVydHkgJiYgYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XSAmJiAhYVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5sZW5ndGgpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMgPVxuXHRcdFx0XHRcdGFWYWx1ZXNbb0luRGF0YS5kYXRhUHJvcGVydHldICYmXG5cdFx0XHRcdFx0YVZhbHVlc1tvSW5EYXRhLmRhdGFQcm9wZXJ0eV0uc29tZShmdW5jdGlvbiAob2JqOiBhbnkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvYmoudGV4dCA9PT0gXCI8IENsZWFyIFZhbHVlcyA+XCIgfHwgb2JqLnRleHQgPT09IFwiPCBMZWF2ZSBCbGFuayA+XCI7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvSW5EYXRhLmRhdGFQcm9wZXJ0eSAmJiAhYkNsZWFyRmllbGRPckJsYW5rVmFsdWVFeGlzdHMpIHtcblx0XHRcdFx0XHRhVmFsdWVzW29JbkRhdGEuZGF0YVByb3BlcnR5XS5wdXNoKHsgdGV4dDogb0RlZmF1bHRWYWx1ZXMubGVhdmVCbGFua1ZhbHVlLCBrZXk6IGBFbXB0eS8ke29JbkRhdGEuZGF0YVByb3BlcnR5fWAgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgYkNsZWFyRmllbGRPckJsYW5rVW5pdFZhbHVlRXhpc3RzID1cblx0XHRcdFx0XHRhVW5pdERhdGFbb0luRGF0YS51bml0UHJvcGVydHldICYmXG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS5zb21lKGZ1bmN0aW9uIChvYmo6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai50ZXh0ID09PSBcIjwgQ2xlYXIgVmFsdWVzID5cIiB8fCBvYmoudGV4dCA9PT0gXCI8IExlYXZlIEJsYW5rID5cIjtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0aWYgKG9JbkRhdGEudW5pdFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0aWYgKCFiQ2xlYXJGaWVsZE9yQmxhbmtVbml0VmFsdWVFeGlzdHMpIHtcblx0XHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0ucHVzaCh7XG5cdFx0XHRcdFx0XHRcdHRleHQ6IG9EZWZhdWx0VmFsdWVzLmxlYXZlQmxhbmtWYWx1ZSxcblx0XHRcdFx0XHRcdFx0a2V5OiBgRW1wdHkvJHtvSW5EYXRhLnVuaXRQcm9wZXJ0eX1gXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YVVuaXREYXRhW29JbkRhdGEudW5pdFByb3BlcnR5XS50ZXh0SW5mbyA9IHt9O1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uc2VsZWN0ZWRLZXkgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0U2VsZWN0aW9uUGF0aENvbWJvQm94KFxuXHRcdFx0XHRcdFx0YUNvbnRleHRzLFxuXHRcdFx0XHRcdFx0b0luRGF0YS51bml0UHJvcGVydHlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGFVbml0RGF0YVtvSW5EYXRhLnVuaXRQcm9wZXJ0eV0uaW5wdXRUeXBlID0gb0luRGF0YS5pbnB1dFR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvSW5EYXRhLmlzUHJvcGVydHlSZWFkT25seSAmJiB0eXBlb2Ygb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRcdGFSZWFkT25seUZpZWxkSW5mby5wdXNoKHsgXCJwcm9wZXJ0eVwiOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSwgdmFsdWU6IG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5LCB0eXBlOiBcIkRlZmF1bHRcIiB9KTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5ICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQxICYmXG5cdFx0XHRcdG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQyXG5cdFx0XHQpIHtcblx0XHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSByZWZhY3RvcmVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUmVhZE9ubHlFeHByZXNzaW9uIGNoYW5nZVxuXHRcdFx0XHRhUmVhZE9ubHlGaWVsZEluZm8ucHVzaCh7XG5cdFx0XHRcdFx0XCJwcm9wZXJ0eVwiOiBvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IG9JbkRhdGEuaXNQcm9wZXJ0eVJlYWRPbmx5Lm9wZXJhbmRzWzBdLm9wZXJhbmQxLnBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogb0luRGF0YS5pc1Byb3BlcnR5UmVhZE9ubHkub3BlcmFuZHNbMF0ub3BlcmFuZDIudmFsdWUsXG5cdFx0XHRcdFx0dHlwZTogXCJQYXRoXCJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldHRpbmcgdmlzYmlsaXR5IG9mIHRoZSBtYXNzIGVkaXQgZmllbGQuXG5cdFx0XHRpZiAob0luRGF0YS5lZGl0TW9kZSkge1xuXHRcdFx0XHR2YWx1ZXMudmlzaWJsZSA9XG5cdFx0XHRcdFx0b0luRGF0YS5lZGl0TW9kZSA9PT0gRWRpdE1vZGUuRWRpdGFibGUgfHxcblx0XHRcdFx0XHRhQ29udGV4dHMuc29tZShcblx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLmdldEZpZWxkVmlzaWJsaXR5LmJpbmQoXG5cdFx0XHRcdFx0XHRcdE1hc3NFZGl0SGVscGVyLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmVkaXRNb2RlLFxuXHRcdFx0XHRcdFx0XHRvRGlhbG9nRGF0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRvSW5EYXRhLmRhdGFQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFx0dmFsdWVzXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlcy52aXNpYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHZhbHVlcy5zZWxlY3RlZEtleSA9IE1hc3NFZGl0SGVscGVyLmdldERlZmF1bHRTZWxlY3Rpb25QYXRoQ29tYm9Cb3goYUNvbnRleHRzLCBvSW5EYXRhLmRhdGFQcm9wZXJ0eSk7XG5cdFx0XHR2YWx1ZXMuaW5wdXRUeXBlID0gb0luRGF0YS5pbnB1dFR5cGU7XG5cdFx0XHR2YWx1ZXMudW5pdFByb3BlcnR5ID0gb0luRGF0YS51bml0UHJvcGVydHk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb0RpYWxvZ0RhdGFNb2RlbDtcblx0fSxcblx0LyoqXG5cdCAqIEdldHMgdHJhbnNpZW50IGNvbnRleHQgZm9yIGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIHRhYmxlIEluc3RhbmNlIG9mIFRhYmxlLlxuXHQgKiBAcGFyYW0gZGlhbG9nIE1hc3MgRWRpdCBEaWFsb2cuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGdldERpYWxvZ0NvbnRleHQ6IGZ1bmN0aW9uICh0YWJsZTogVGFibGUsIGRpYWxvZz86IERpYWxvZyk6IENvbnRleHQge1xuXHRcdGxldCB0cmFuc0N0eDogQ29udGV4dCA9IChkaWFsb2cgJiYgZGlhbG9nLmdldEJpbmRpbmdDb250ZXh0KCkpIGFzIENvbnRleHQ7XG5cblx0XHRpZiAoIXRyYW5zQ3R4KSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IHRhYmxlLmdldE1vZGVsKCk7XG5cdFx0XHRjb25zdCBsaXN0QmluZGluZyA9IHRhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGNvbnN0IHRyYW5zaWVudExpc3RCaW5kaW5nID0gbW9kZWwuYmluZExpc3QobGlzdEJpbmRpbmcuZ2V0UGF0aCgpLCBsaXN0QmluZGluZy5nZXRDb250ZXh0KCksIFtdLCBbXSwge1xuXHRcdFx0XHQkJHVwZGF0ZUdyb3VwSWQ6IFwic3VibWl0TGF0ZXJcIlxuXHRcdFx0fSkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0XHRcdCh0cmFuc2llbnRMaXN0QmluZGluZyBhcyBhbnkpLnJlZnJlc2hJbnRlcm5hbCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0LyogKi9cblx0XHRcdH07XG5cdFx0XHR0cmFuc0N0eCA9IHRyYW5zaWVudExpc3RCaW5kaW5nLmNyZWF0ZSh7fSwgdHJ1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRyYW5zQ3R4O1xuXHR9LFxuXG5cdG9uRGlhbG9nT3BlbjogZnVuY3Rpb24gKGV2ZW50OiBhbnkpOiB2b2lkIHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRjb25zdCBmaWVsZHNJbmZvTW9kZWwgPSBzb3VyY2UuZ2V0TW9kZWwoXCJmaWVsZHNJbmZvXCIpO1xuXHRcdGZpZWxkc0luZm9Nb2RlbC5zZXRQcm9wZXJ0eShcIi9pc09wZW5cIiwgdHJ1ZSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgbWFzcyBlZGl0IGRpYWxvZy5cblx0ICpcblx0ICogQHBhcmFtIG9UYWJsZSBJbnN0YW5jZSBvZiBUYWJsZVxuXHQgKiBAcGFyYW0gYUNvbnRleHRzIENvbnRleHRzIGZvciBtYXNzIGVkaXRcblx0ICogQHBhcmFtIG9Db250cm9sbGVyIENvbnRyb2xsZXIgZm9yIHRoZSB2aWV3XG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmV0dXJuaW5nIGluc3RhbmNlIG9mIGRpYWxvZy5cblx0ICovXG5cdGNyZWF0ZURpYWxvZzogYXN5bmMgZnVuY3Rpb24gKG9UYWJsZTogVGFibGUsIGFDb250ZXh0czogYW55W10sIG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgc0ZyYWdtZW50TmFtZSA9IFwic2FwL2ZlL2NvcmUvY29udHJvbHMvbWFzc0VkaXQvTWFzc0VkaXREaWFsb2dcIixcblx0XHRcdGFEYXRhQXJyYXk6IGFueVtdID0gW10sXG5cdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdFx0b0RlZmF1bHRWYWx1ZXMgPSBNYXNzRWRpdEhlbHBlci5nZXREZWZhdWx0VGV4dHNGb3JEaWFsb2cob1Jlc291cmNlQnVuZGxlLCBhQ29udGV4dHMubGVuZ3RoLCBvVGFibGUpLFxuXHRcdFx0b0RhdGFGaWVsZE1vZGVsID0gTWFzc0VkaXRIZWxwZXIucHJlcGFyZURhdGFGb3JEaWFsb2cob1RhYmxlLCBhQ29udGV4dHMsIGFEYXRhQXJyYXkpLFxuXHRcdFx0ZGlhbG9nQ29udGV4dCA9IE1hc3NFZGl0SGVscGVyLmdldERpYWxvZ0NvbnRleHQob1RhYmxlKSxcblx0XHRcdG9EaWFsb2dEYXRhTW9kZWwgPSBNYXNzRWRpdEhlbHBlci5zZXRSdW50aW1lTW9kZWxPbkRpYWxvZyhhQ29udGV4dHMsIGFEYXRhQXJyYXksIG9EZWZhdWx0VmFsdWVzLCBkaWFsb2dDb250ZXh0KTtcblxuXHRcdGNvbnN0IG9GcmFnbWVudCA9IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpO1xuXHRcdGNvbnN0IG9DcmVhdGVkRnJhZ21lbnQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG5cdFx0XHRYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0b0ZyYWdtZW50LFxuXHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkTW9kZWw6IG9EYXRhRmllbGRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIilcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkTW9kZWw6IG9EYXRhRmllbGRNb2RlbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0KVxuXHRcdCk7XG5cdFx0Y29uc3Qgb0RpYWxvZ0NvbnRlbnQgPSBhd2FpdCBGcmFnbWVudC5sb2FkKHsgZGVmaW5pdGlvbjogb0NyZWF0ZWRGcmFnbWVudCB9KTtcblx0XHRjb25zdCBEcmFmdFN0YXR1cyA9IEZFTGlicmFyeS5EcmFmdFN0YXR1cztcblx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHRyZXNpemFibGU6IHRydWUsXG5cdFx0XHR0aXRsZTogb0RlZmF1bHRWYWx1ZXMubWFzc0VkaXRUaXRsZSxcblx0XHRcdGNvbnRlbnQ6IFtvRGlhbG9nQ29udGVudCBhcyBhbnldLFxuXHRcdFx0YWZ0ZXJPcGVuOiBNYXNzRWRpdEhlbHBlci5vbkRpYWxvZ09wZW4sXG5cdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdHRleHQ6IE1hc3NFZGl0SGVscGVyLmhlbHBlcnMuZ2V0RXhwQmluZGluZ0ZvckFwcGx5QnV0dG9uVHh0KG9EZWZhdWx0VmFsdWVzLCBvRGF0YUZpZWxkTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKSksXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRwcmVzczogYXN5bmMgZnVuY3Rpb24gKG9FdmVudDogYW55KSB7XG5cdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCk/LnNldFByb3BlcnR5KFwic2tpcFBhdGNoSGFuZGxlcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdFx0Y29uc3Qgb0luRGlhbG9nID0gb0V2ZW50LmdldFNvdXJjZSgpLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9JbkRpYWxvZy5nZXRNb2RlbChcImZpZWxkc0luZm9cIik7XG5cdFx0XHRcdFx0Y29uc3QgYVJlc3VsdHMgPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVzdWx0c1wiKTtcblx0XHRcdFx0XHRjb25zdCBhUHJvcGVydHlSZWFkYWJsZUluZm8gPSBvTW9kZWwuZ2V0UHJvcGVydHkoXCIvcmVhZGFibGVQcm9wZXJ0eURhdGFcIik7XG5cdFx0XHRcdFx0Y29uc3QgY2hhbmdlUHJvbWlzZTogYW55W10gPSBbXTtcblx0XHRcdFx0XHRsZXQgYlJlYWRPbmx5RmllbGQgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgZ3JvdXBJZDtcblx0XHRcdFx0XHRjb25zdCBlcnJvclZhbHVlczogYW55W10gPSBbXTtcblx0XHRcdFx0XHRhQ29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAob1NlbGVjdGVkQ29udGV4dDogYW55LCBpZHg6IG51bWJlcikge1xuXHRcdFx0XHRcdFx0YVJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc3VsdDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdC8vVE9ETyAtIEFkZCBzYXZlIGltcGxlbWVudGF0aW9uIGZvciBWYWx1ZSBIZWxwLlxuXHRcdFx0XHRcdFx0XHRpZiAoYVByb3BlcnR5UmVhZGFibGVJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdFx0YlJlYWRPbmx5RmllbGQgPSBhUHJvcGVydHlSZWFkYWJsZUluZm8uc29tZShmdW5jdGlvbiAob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Jlc3VsdC5rZXlWYWx1ZSA9PT0gb1Byb3BlcnR5SW5mby5wcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mby50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnZhbHVlID09PSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9Qcm9wZXJ0eUluZm8udHlwZSA9PT0gXCJQYXRoXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUHJvcGVydHlJbmZvLnByb3BlcnR5UGF0aFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3Qob1Byb3BlcnR5SW5mby5wcm9wZXJ0eVBhdGgpID09PSBvUHJvcGVydHlJbmZvLnByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRncm91cElkID0gYCRhdXRvLiR7aWR4fWA7XG5cdFx0XHRcdFx0XHRcdC8vaW5kZXggKz0gMTtcblx0XHRcdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXRGbG93LnNldERyYWZ0U3RhdHVzKERyYWZ0U3RhdHVzLlNhdmluZyk7XG5cdFx0XHRcdFx0XHRcdC8vbGV0IHByb21pc2VDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdGlmIChvUmVzdWx0LmtleVZhbHVlICYmIG9SZXN1bHQudmFsdWUgIT09IFwiRGVmYXVsdFwiICYmICFiUmVhZE9ubHlGaWVsZCkge1xuXHRcdFx0XHRcdFx0XHRcdGNoYW5nZVByb21pc2UucHVzaChcblx0XHRcdFx0XHRcdFx0XHRcdG9TZWxlY3RlZENvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnNldFByb3BlcnR5KG9SZXN1bHQua2V5VmFsdWUsIG9SZXN1bHQudmFsdWUsIGdyb3VwSWQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb1NlbGVjdGVkQ29udGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yVmFsdWVzLnB1c2gob1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiTWFzcyBFZGl0OiBTb21ldGhpbmcgd2VudCB3cm9uZyBpbiB1cGRhdGluZyBlbnRyaWVzLlwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0YXdhaXQgKFByb21pc2UgYXMgYW55KS5hbGxTZXR0bGVkKGNoYW5nZVByb21pc2UpO1xuXG5cdFx0XHRcdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0XHRjb25zdCBvRXh0ZW5zaW9uQVBJID0gb0NvbnRyb2xsZXIgJiYgKG9Db250cm9sbGVyLmdldEV4dGVuc2lvbkFQSSgpIGFzIGFueSk7XG5cdFx0XHRcdFx0YXdhaXQgb0V4dGVuc2lvbkFQSS5yZWZyZXNoKG9MaXN0QmluZGluZy5nZXRQYXRoKCkpO1xuXG5cdFx0XHRcdFx0Y29uc3Qgc3VidGl0bGVDb2x1bW4gPSBDb21tb25VdGlscy5nZXRNZXNzYWdlQ29sdW1uKG9UYWJsZSk7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZXMgPSBzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCkuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdGNvbnN0IGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dHMgPSBbXSBhcyBhbnk7XG5cdFx0XHRcdFx0bWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAobWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBtZXNzYWdlVGFyZ2V0cyA9IG1lc3NhZ2UuZ2V0VGFyZ2V0cygpO1xuXHRcdFx0XHRcdFx0aWYgKG1lc3NhZ2VUYXJnZXRzICYmIG1lc3NhZ2VUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiBtZXNzYWdlVGFyZ2V0c1swXS5sZW5ndGggJiYgbWVzc2FnZS5wZXJzaXN0ZW50ID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dCA9IGFDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1lc3NhZ2UuZ2V0VGFyZ2V0KCkuaW5kZXhPZihvQ29udGV4dC5nZXRQYXRoKCkpICE9PSAtMTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dHMucHVzaChib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlLmFkZGl0aW9uYWxUZXh0ID0gYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0PyBib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHQuZ2V0T2JqZWN0KClbc3VidGl0bGVDb2x1bW5dXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCA+IDAgJiYgYm91bmRUcmFuc2l0aW9uRXJyb3JDb250ZXh0cy5sZW5ndGggPT09IDAgJiYgZXJyb3JWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdEZsb3cuc2V0RHJhZnRTdGF0dXMoRHJhZnRTdGF0dXMuU2F2ZWQpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc3VjY2Vzc1RvYXN0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01BU1NfRURJVF9TVUNDRVNTX1RPQVNUXCIpO1xuXHRcdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coc3VjY2Vzc1RvYXN0KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGVycm9yVmFsdWVzLmxlbmd0aCArIGJvdW5kVHJhbnNpdGlvbkVycm9yQ29udGV4dHMubGVuZ3RoIDwgKG9UYWJsZSBhcyBhbnkpLmdldFNlbGVjdGVkQ29udGV4dHMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5TYXZlZCk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChlcnJvclZhbHVlcy5sZW5ndGggKyBib3VuZFRyYW5zaXRpb25FcnJvckNvbnRleHRzLmxlbmd0aCA9PT0gKG9UYWJsZSBhcyBhbnkpLmdldFNlbGVjdGVkQ29udGV4dHMoKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0Rmxvdy5zZXREcmFmdFN0YXR1cyhEcmFmdFN0YXR1cy5DbGVhcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9Db250cm9sbGVyLl9lZGl0Rmxvdy5nZXRNZXNzYWdlSGFuZGxlcigpLnNob3dNZXNzYWdlcygpO1xuXHRcdFx0XHRcdGlmIChvSW5EaWFsb2cuaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdG9JbkRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0b0luRGlhbG9nLmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpPy5zZXRQcm9wZXJ0eShcblx0XHRcdFx0XHRcdFx0XCJza2lwUGF0Y2hIYW5kbGVyc1wiLFxuXHRcdFx0XHRcdFx0XHRmYWxzZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogb0RlZmF1bHRWYWx1ZXMuY2FuY2VsQnV0dG9uVGV4dCxcblx0XHRcdFx0dmlzaWJsZTogTWFzc0VkaXRIZWxwZXIuaGVscGVycy5oYXNFZGl0YWJsZUZpZWxkc0JpbmRpbmcob0RhdGFGaWVsZE1vZGVsLmdldE9iamVjdChcIi9cIiksIHRydWUpIGFzIGFueSxcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uIChvRXZlbnQ6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IG9JbkRpYWxvZyA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRQYXJlbnQoKTtcblx0XHRcdFx0XHRvSW5EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRvSW5EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0pO1xuXHRcdGNvbnN0IG1vZGVsID0gb1RhYmxlLmdldE1vZGVsKCk7XG5cdFx0b0RpYWxvZy5zZXRNb2RlbChvRGlhbG9nRGF0YU1vZGVsLCBcImZpZWxkc0luZm9cIik7XG5cdFx0b0RpYWxvZy5zZXRNb2RlbChtb2RlbCk7XG5cdFx0b0RpYWxvZy5zZXRCaW5kaW5nQ29udGV4dChkaWFsb2dDb250ZXh0KTtcblx0XHRyZXR1cm4gb0RpYWxvZztcblx0fSxcblxuXHRoZWxwZXJzOiB7XG5cdFx0Z2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzOiAoZmllbGRzOiBhbnksIGVkaXRhYmxlOiBib29sZWFuKSA9PiB7XG5cdFx0XHRjb25zdCB0b3RhbEV4cCA9IGZpZWxkcy5yZWR1Y2UoXG5cdFx0XHRcdChleHByZXNzaW9uOiBhbnksIGZpZWxkOiBhbnkpID0+XG5cdFx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0XHRleHByZXNzaW9uLFxuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWwoXCIvdmFsdWVzL1wiICsgZmllbGQuZGF0YVByb3BlcnR5ICsgXCIvdmlzaWJsZVwiLCBcImZpZWxkc0luZm9cIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0Y29uc3RhbnQoZmFsc2UpXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGVkaXRhYmxlID8gdG90YWxFeHAgOiBub3QodG90YWxFeHApO1xuXHRcdH0sXG5cblx0XHRnZXRFeHBCaW5kaW5nRm9yQXBwbHlCdXR0b25UeHQ6IChkZWZhdWx0VmFsdWVzOiBhbnksIGZpZWxkczogYm9vbGVhbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRpdGFibGVFeHAgPSBNYXNzRWRpdEhlbHBlci5oZWxwZXJzLmdldEJpbmRpbmdFeHBGb3JIYXNFZGl0YWJsZUZpZWxkcyhmaWVsZHMsIHRydWUpO1xuXHRcdFx0Y29uc3QgdG90YWxFeHAgPSBpZkVsc2UoZWRpdGFibGVFeHAsIGNvbnN0YW50KGRlZmF1bHRWYWx1ZXMuYXBwbHlCdXR0b25UZXh0KSwgY29uc3RhbnQoZGVmYXVsdFZhbHVlcy5va0J1dHRvblRleHQpKTtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0b3RhbEV4cCk7XG5cdFx0fSxcblxuXHRcdGhhc0VkaXRhYmxlRmllbGRzQmluZGluZzogKGZpZWxkczogYW55LCBlZGl0YWJsZTogYm9vbGVhbikgPT4ge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKE1hc3NFZGl0SGVscGVyLmhlbHBlcnMuZ2V0QmluZGluZ0V4cEZvckhhc0VkaXRhYmxlRmllbGRzKGZpZWxkcywgZWRpdGFibGUpKTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1hc3NFZGl0SGVscGVyO1xuIl19
|