@sapui5/sap.fe.core 1.121.2 → 1.123.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -2,27 +2,25 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "./PropertyHelper", "./UIFormatters"], function (MetaModelConverter, DataModelPathHelper, PropertyHelper, UIFormatters) {
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "./PropertyHelper", "./UIFormatters"], function (MetaModelConverter, TypeGuards, DataModelPathHelper, PropertyHelper, UIFormatters) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var getConverterContext = UIFormatters.getConverterContext;
|
|
10
10
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
11
11
|
var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
|
|
12
|
+
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
12
13
|
var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
|
|
13
14
|
const getProperty = function (oContext, oInterface) {
|
|
14
15
|
const sPath = oInterface.context.getPath();
|
|
15
16
|
if (!oContext) {
|
|
16
17
|
throw new Error(`Unresolved context path ${sPath}`);
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
-
if (typeof oContext === "object" && oContext.hasOwnProperty("$Path")) {
|
|
20
|
-
isPath = true;
|
|
21
|
-
} else if (typeof oContext === "object" && oContext.hasOwnProperty("$kind") && oContext.$kind !== "Property") {
|
|
19
|
+
if (typeof oContext === "object" && oContext.hasOwnProperty("$kind") && oContext.$kind !== "Property") {
|
|
22
20
|
throw new Error(`Context does not resolve to a Property object but to a ${oContext.$kind}`);
|
|
23
21
|
}
|
|
24
22
|
let oConverterContext = getConverterContext(oContext, oInterface);
|
|
25
|
-
if (
|
|
23
|
+
if (isPathAnnotationExpression(oConverterContext)) {
|
|
26
24
|
oConverterContext = oConverterContext.$target;
|
|
27
25
|
}
|
|
28
26
|
return oConverterContext;
|
|
@@ -37,7 +35,7 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
|
|
|
37
35
|
throw new Error(`Context does not resolve to a Property object but to a ${oContext.$kind}`);
|
|
38
36
|
}
|
|
39
37
|
let involvedDataModelObjects = getInvolvedDataModelObjects(oInterface.context);
|
|
40
|
-
if (involvedDataModelObjects.targetObject
|
|
38
|
+
if (isPathAnnotationExpression(involvedDataModelObjects.targetObject)) {
|
|
41
39
|
involvedDataModelObjects = enhanceDataModelPath(involvedDataModelObjects, involvedDataModelObjects.targetObject.path);
|
|
42
40
|
}
|
|
43
41
|
return involvedDataModelObjects;
|
|
@@ -85,4 +83,4 @@ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templat
|
|
|
85
83
|
_exports.getRelativePropertyPath = getRelativePropertyPath;
|
|
86
84
|
return _exports;
|
|
87
85
|
}, false);
|
|
88
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRQcm9wZXJ0eSIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsInNQYXRoIiwiY29udGV4dCIsImdldFBhdGgiLCJFcnJvciIsImhhc093blByb3BlcnR5IiwiJGtpbmQiLCJvQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHQiLCJpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiIsIiR0YXJnZXQiLCJnZXRQcm9wZXJ0eU9iamVjdFBhdGgiLCJpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRPYmplY3QiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInBhdGgiLCJpc0tleSIsIm9Qcm9wZXJ0eSIsIlByb3BlcnR5SGVscGVyIiwiaGFzVmFsdWVIZWxwIiwiaGFzRGF0ZVR5cGUiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJnZXROYW1lIiwibmFtZSIsImdldExhYmVsIiwiZ2V0UHJvcGVydHlQYXRoIiwicHJvcGVydHlQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsImdldFJlbGF0aXZlUHJvcGVydHlQYXRoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJQcm9wZXJ0eUZvcm1hdHRlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUhlbHBlciBmcm9tIFwiLi9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UsIE1ldGFNb2RlbENvbnRleHQgfSBmcm9tIFwiLi9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldENvbnZlcnRlckNvbnRleHQgfSBmcm9tIFwiLi9VSUZvcm1hdHRlcnNcIjtcblxuZXhwb3J0IGNvbnN0IGdldFByb3BlcnR5ID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBQcm9wZXJ0eSB7XG5cdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0aWYgKCFvQ29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBjb250ZXh0IHBhdGggJHtzUGF0aH1gKTtcblx0fVxuXHRpZiAodHlwZW9mIG9Db250ZXh0ID09PSBcIm9iamVjdFwiICYmIG9Db250ZXh0Lmhhc093blByb3BlcnR5KFwiJGtpbmRcIikgJiYgb0NvbnRleHQuJGtpbmQgIT09IFwiUHJvcGVydHlcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29udGV4dCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgUHJvcGVydHkgb2JqZWN0IGJ1dCB0byBhICR7b0NvbnRleHQuJGtpbmR9YCk7XG5cdH1cblx0bGV0IG9Db252ZXJ0ZXJDb250ZXh0OiBQcm9wZXJ0eSB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQcm9wZXJ0eT4gPSBnZXRDb252ZXJ0ZXJDb250ZXh0KG9Db250ZXh0LCBvSW50ZXJmYWNlKSBhc1xuXHRcdHwgUHJvcGVydHlcblx0XHR8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQcm9wZXJ0eT47XG5cdGlmIChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvQ29udmVydGVyQ29udGV4dCkpIHtcblx0XHRvQ29udmVydGVyQ29udGV4dCA9IG9Db252ZXJ0ZXJDb250ZXh0LiR0YXJnZXQhO1xuXHR9XG5cdHJldHVybiBvQ29udmVydGVyQ29udGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9wZXJ0eU9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0IHwgc3RyaW5nLFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGg8UHJvcGVydHk+IHtcblx0Y29uc3Qgc1BhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbnJlc29sdmVkIGNvbnRleHQgcGF0aCAke3NQYXRofWApO1xuXHR9XG5cdGlmICh0eXBlb2Ygb0NvbnRleHQgPT09IFwib2JqZWN0XCIgJiYgb0NvbnRleHQuaGFzT3duUHJvcGVydHkoXCIka2luZFwiKSAmJiBvQ29udGV4dC4ka2luZCAhPT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb250ZXh0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBQcm9wZXJ0eSBvYmplY3QgYnV0IHRvIGEgJHtvQ29udGV4dC4ka2luZH1gKTtcblx0fVxuXHRsZXQgaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5PihvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHRpZiAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oaW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLnRhcmdldE9iamVjdCkpIHtcblx0XHRpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgPSBlbmhhbmNlRGF0YU1vZGVsUGF0aChpbnZvbHZlZERhdGFNb2RlbE9iamVjdHMsIGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cy50YXJnZXRPYmplY3QucGF0aCk7XG5cdH1cblx0cmV0dXJuIGludm9sdmVkRGF0YU1vZGVsT2JqZWN0cztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0tleSA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShvQ29udGV4dCwgb0ludGVyZmFjZSk7XG5cdHJldHVybiBQcm9wZXJ0eUhlbHBlci5pc0tleShvUHJvcGVydHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShvQ29udGV4dCwgb0ludGVyZmFjZSk7XG5cdHJldHVybiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHAob1Byb3BlcnR5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNEYXRlVHlwZSA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShvQ29udGV4dCwgb0ludGVyZmFjZSk7XG5cdHJldHVybiBQcm9wZXJ0eUhlbHBlci5oYXNEYXRlVHlwZShvUHJvcGVydHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogYm9vbGVhbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShvQ29udGV4dCwgb0ludGVyZmFjZSk7XG5cdHJldHVybiBQcm9wZXJ0eUhlbHBlci5oYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMob1Byb3BlcnR5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROYW1lID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcge1xuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gZ2V0UHJvcGVydHkob0NvbnRleHQsIG9JbnRlcmZhY2UpO1xuXHRyZXR1cm4gb1Byb3BlcnR5Lm5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSBnZXRQcm9wZXJ0eShvQ29udGV4dCwgb0ludGVyZmFjZSk7XG5cdHJldHVybiBQcm9wZXJ0eUhlbHBlci5nZXRMYWJlbChvUHJvcGVydHkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UHJvcGVydHlPYmplY3RQYXRoKG9Db250ZXh0LCBvSW50ZXJmYWNlKTtcblx0cmV0dXJuIGdldFRhcmdldE9iamVjdFBhdGgocHJvcGVydHlQYXRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGZ1bmN0aW9uIChvQ29udGV4dDogTWV0YU1vZGVsQ29udGV4dCwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHtcblx0Y29uc3QgcHJvcGVydHlQYXRoID0gZ2V0UHJvcGVydHlPYmplY3RQYXRoKG9Db250ZXh0LCBvSW50ZXJmYWNlKTtcblx0cmV0dXJuIGdldFRhcmdldE9iamVjdFBhdGgocHJvcGVydHlQYXRoLCB0cnVlKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFTTyxNQUFNQSxXQUFXLEdBQUcsVUFBVUMsUUFBMEIsRUFBRUMsVUFBdUMsRUFBWTtJQUNuSCxNQUFNQyxLQUFLLEdBQUdELFVBQVUsQ0FBQ0UsT0FBTyxDQUFDQyxPQUFPLEVBQUU7SUFDMUMsSUFBSSxDQUFDSixRQUFRLEVBQUU7TUFDZCxNQUFNLElBQUlLLEtBQUssQ0FBRSwyQkFBMEJILEtBQU0sRUFBQyxDQUFDO0lBQ3BEO0lBQ0EsSUFBSSxPQUFPRixRQUFRLEtBQUssUUFBUSxJQUFJQSxRQUFRLENBQUNNLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSU4sUUFBUSxDQUFDTyxLQUFLLEtBQUssVUFBVSxFQUFFO01BQ3RHLE1BQU0sSUFBSUYsS0FBSyxDQUFFLDBEQUF5REwsUUFBUSxDQUFDTyxLQUFNLEVBQUMsQ0FBQztJQUM1RjtJQUNBLElBQUlDLGlCQUFnRSxHQUFHQyxtQkFBbUIsQ0FBQ1QsUUFBUSxFQUFFQyxVQUFVLENBRTFFO0lBQ3JDLElBQUlTLDBCQUEwQixDQUFDRixpQkFBaUIsQ0FBQyxFQUFFO01BQ2xEQSxpQkFBaUIsR0FBR0EsaUJBQWlCLENBQUNHLE9BQVE7SUFDL0M7SUFDQSxPQUFPSCxpQkFBaUI7RUFDekIsQ0FB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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Property } from "@sap-ux/vocabularies-types";
|
|
1
|
+
import type { PathAnnotationExpression, Property } from "@sap-ux/vocabularies-types";
|
|
2
2
|
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
3
|
+
import { isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
3
4
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
4
5
|
import { enhanceDataModelPath, getTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
5
6
|
import * as PropertyHelper from "./PropertyHelper";
|
|
@@ -11,15 +12,14 @@ export const getProperty = function (oContext: MetaModelContext, oInterface: Com
|
|
|
11
12
|
if (!oContext) {
|
|
12
13
|
throw new Error(`Unresolved context path ${sPath}`);
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
if (typeof oContext === "object" && oContext.hasOwnProperty("$Path")) {
|
|
16
|
-
isPath = true;
|
|
17
|
-
} else if (typeof oContext === "object" && oContext.hasOwnProperty("$kind") && oContext.$kind !== "Property") {
|
|
15
|
+
if (typeof oContext === "object" && oContext.hasOwnProperty("$kind") && oContext.$kind !== "Property") {
|
|
18
16
|
throw new Error(`Context does not resolve to a Property object but to a ${oContext.$kind}`);
|
|
19
17
|
}
|
|
20
|
-
let oConverterContext = getConverterContext(oContext, oInterface) as
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
let oConverterContext: Property | PathAnnotationExpression<Property> = getConverterContext(oContext, oInterface) as
|
|
19
|
+
| Property
|
|
20
|
+
| PathAnnotationExpression<Property>;
|
|
21
|
+
if (isPathAnnotationExpression(oConverterContext)) {
|
|
22
|
+
oConverterContext = oConverterContext.$target!;
|
|
23
23
|
}
|
|
24
24
|
return oConverterContext;
|
|
25
25
|
};
|
|
@@ -27,7 +27,7 @@ export const getProperty = function (oContext: MetaModelContext, oInterface: Com
|
|
|
27
27
|
export const getPropertyObjectPath = function (
|
|
28
28
|
oContext: MetaModelContext | string,
|
|
29
29
|
oInterface: ComputedAnnotationInterface
|
|
30
|
-
): DataModelObjectPath {
|
|
30
|
+
): DataModelObjectPath<Property> {
|
|
31
31
|
const sPath = oInterface.context.getPath();
|
|
32
32
|
if (!oContext) {
|
|
33
33
|
throw new Error(`Unresolved context path ${sPath}`);
|
|
@@ -35,8 +35,8 @@ export const getPropertyObjectPath = function (
|
|
|
35
35
|
if (typeof oContext === "object" && oContext.hasOwnProperty("$kind") && oContext.$kind !== "Property") {
|
|
36
36
|
throw new Error(`Context does not resolve to a Property object but to a ${oContext.$kind}`);
|
|
37
37
|
}
|
|
38
|
-
let involvedDataModelObjects = getInvolvedDataModelObjects(oInterface.context);
|
|
39
|
-
if (involvedDataModelObjects.targetObject
|
|
38
|
+
let involvedDataModelObjects = getInvolvedDataModelObjects<Property>(oInterface.context);
|
|
39
|
+
if (isPathAnnotationExpression(involvedDataModelObjects.targetObject)) {
|
|
40
40
|
involvedDataModelObjects = enhanceDataModelPath(involvedDataModelObjects, involvedDataModelObjects.targetObject.path);
|
|
41
41
|
}
|
|
42
42
|
return involvedDataModelObjects;
|
|
@@ -54,7 +54,7 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/Semanti
|
|
|
54
54
|
const semanticKeys = (_contextDataModelObje = contextDataModelObject.contextLocation) === null || _contextDataModelObje === void 0 ? void 0 : (_contextDataModelObje2 = _contextDataModelObje.targetEntityType) === null || _contextDataModelObje2 === void 0 ? void 0 : (_contextDataModelObje3 = _contextDataModelObje2.annotations) === null || _contextDataModelObje3 === void 0 ? void 0 : (_contextDataModelObje4 = _contextDataModelObje3.Common) === null || _contextDataModelObje4 === void 0 ? void 0 : _contextDataModelObje4.SemanticKey;
|
|
55
55
|
return (semanticKeys === null || semanticKeys === void 0 ? void 0 : semanticKeys.some(function (key) {
|
|
56
56
|
var _key$$target;
|
|
57
|
-
return (key === null || key === void 0 ? void 0 : (_key$$target = key.$target) === null || _key$$target === void 0 ? void 0 : _key$$target.fullyQualifiedName) === property.fullyQualifiedName;
|
|
57
|
+
return (key === null || key === void 0 ? void 0 : (_key$$target = key.$target) === null || _key$$target === void 0 ? void 0 : _key$$target.fullyQualifiedName) === (property === null || property === void 0 ? void 0 : property.fullyQualifiedName);
|
|
58
58
|
})) ?? false;
|
|
59
59
|
};
|
|
60
60
|
|
|
@@ -203,7 +203,7 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/Semanti
|
|
|
203
203
|
_exports.getStaticTimezone = getStaticTimezone;
|
|
204
204
|
const getAssociatedTextPropertyPath = function (oProperty) {
|
|
205
205
|
var _oProperty$annotation35, _oProperty$annotation36, _oProperty$annotation37, _oProperty$annotation38;
|
|
206
|
-
return isPathAnnotationExpression((_oProperty$annotation35 = oProperty.annotations) === null || _oProperty$annotation35 === void 0 ? void 0 : (_oProperty$annotation36 = _oProperty$annotation35.Common) === null || _oProperty$annotation36 === void 0 ? void 0 : _oProperty$annotation36.Text) ? (_oProperty$annotation37 = oProperty.annotations) === null || _oProperty$annotation37 === void 0 ? void 0 : (_oProperty$annotation38 = _oProperty$annotation37.Common) === null || _oProperty$annotation38 === void 0 ? void 0 : _oProperty$annotation38.Text.path : undefined;
|
|
206
|
+
return isPathAnnotationExpression(oProperty === null || oProperty === void 0 ? void 0 : (_oProperty$annotation35 = oProperty.annotations) === null || _oProperty$annotation35 === void 0 ? void 0 : (_oProperty$annotation36 = _oProperty$annotation35.Common) === null || _oProperty$annotation36 === void 0 ? void 0 : _oProperty$annotation36.Text) ? oProperty === null || oProperty === void 0 ? void 0 : (_oProperty$annotation37 = oProperty.annotations) === null || _oProperty$annotation37 === void 0 ? void 0 : (_oProperty$annotation38 = _oProperty$annotation37.Common) === null || _oProperty$annotation38 === void 0 ? void 0 : _oProperty$annotation38.Text.path : undefined;
|
|
207
207
|
};
|
|
208
208
|
|
|
209
209
|
/**
|
|
@@ -367,4 +367,4 @@ sap.ui.define(["sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/Semanti
|
|
|
367
367
|
_exports.isTimezone = isTimezone;
|
|
368
368
|
return _exports;
|
|
369
369
|
}, false);
|
|
370
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImlzU2VtYW50aWNLZXkiLCJwcm9wZXJ0eSIsImNvbnRleHREYXRhTW9kZWxPYmplY3QiLCJzZW1hbnRpY0tleXMiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJzb21lIiwia2V5IiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImhhc0RhdGVUeXBlIiwiaW5jbHVkZXMiLCJ0eXBlIiwiZ2V0TGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiaGFzU2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdEhlbHBlciIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJUaW1lem9uZSIsInVuZGVmaW5lZCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsInBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5IiwiVGV4dCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiSVNPQ3VycmVuY3kiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSIsInVuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJzdGF0aWNUaW1lem9uZSIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiaGFzVmFsdWVIZWxwIiwiVmFsdWVMaXN0IiwiVmFsdWVMaXN0UmVmZXJlbmNlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdE1hcHBpbmciLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImhhc1RpbWV6b25lIiwiaXNVbml0IiwiSXNVbml0IiwiaGFzVGV4dCIsImlzSW1hZ2VVUkwiLCJVSSIsIklzSW1hZ2VVUkwiLCJpc0N1cnJlbmN5IiwiSXNDdXJyZW5jeSIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImlzR3VpZCIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwiaXNNdWx0aUxpbmVUZXh0IiwicGFyYW1ldGVyIiwiTXVsdGlMaW5lVGV4dCIsImlzVGltZXpvbmUiLCJJc1RpbWV6b25lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJQcm9wZXJ0eUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db3JlPy5Db21wdXRlZD8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuSW1tdXRhYmxlIGFubm90YXRpb24gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0J3MgaW1tdXRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ltbXV0YWJsZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29yZT8uSW1tdXRhYmxlPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga2V5IG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0tleSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBzZW1hbnRpY0tleSBmb3IgdGhlIGNvbnRleHQgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3QgVGhlIERhdGFNb2RlbE9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWBpZiBpdCdzIGEgc2VtYW50aWMga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NlbWFudGljS2V5ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSwgY29udGV4dERhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRjb25zdCBzZW1hbnRpY0tleXMgPSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0LmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdHJldHVybiAoXG5cdFx0c2VtYW50aWNLZXlzPy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBrZXk/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gcHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdH0pID8/IGZhbHNlXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSBkYXRlIHRpbWUgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBpcyBvZiB0eXBlIGRhdGUgLyBkYXRldGltZSAvIGRhdGV0aW1lb2Zmc2V0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNEYXRlVHlwZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBbXCJFZG0uRGF0ZVwiLCBcIkVkbS5EYXRlVGltZVwiLCBcIkVkbS5EYXRlVGltZU9mZnNldFwiXS5pbmNsdWRlcyhvUHJvcGVydHkudHlwZSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIHRoZSBsYWJlbCBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGxhYmVsIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0TGFiZWwgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB7XG5cdHJldHVybiBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHwgXCJcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgc2VtYW50aWMgb2JqZWN0IGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgc2VtYW50aWMgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNTZW1hbnRpY09iamVjdCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuIFNlbWFudGljT2JqZWN0SGVscGVyLmhhc1NlbWFudGljT2JqZWN0KHByb3BlcnR5KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB0aW1lem9uZSBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSlcblx0XHQ/IChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUuJHRhcmdldCBhcyB1bmtub3duIGFzIFByb3BlcnR5KVxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHRpbWV6b25lIHByb3BlcnR5IHBhdGggYXNzb2NpYXRlZCB0byB0aGUgcHJvcGVydHksIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdGltZXpvbmUgcHJvcGVydHkgcGF0aCwgaWYgaXQgZXhpc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkVGltZXpvbmVQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lKVxuXHRcdD8gb1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZT8ucGF0aFxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgdGV4dCBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRleHQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KVxuXHRcdD8gKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0LiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSlcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB1bml0IHByb3BlcnR5IGFzc29jaWF0ZWQgdG8gdGhlIHByb3BlcnR5LCBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gb1Byb3BlcnR5ICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdClcblx0XHQ/IG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdC4kdGFyZ2V0XG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdCkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0LnBhdGggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXNzb2NpYXRlZCBjdXJyZW5jeSBwcm9wZXJ0eSBmb3IgdGhhdCBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdW5pdCBwcm9wZXJ0eSwgaWYgaXQgZXhpc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgdW5kZWZpbmVkKTogUHJvcGVydHkgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gb1Byb3BlcnR5ICYmIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpXG5cdFx0PyBvUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5LiR0YXJnZXRcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHk/LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kpXG5cdFx0PyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeS5wYXRoXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXNzb2NpYXRlZCBzdGF0aWMgY3VycmVuY3kgb3IgdW5pdCBmb3IgYSBnaXZlbiBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB1bml0IG9yIGN1cnJlbmN5IHN0YXRpYyB2YWx1ZSwgaWYgaXQgZXhpc3RzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCB1bml0T3JDdXJyZW5jeSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgPz8gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAoIXVuaXRPckN1cnJlbmN5IHx8IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXRPckN1cnJlbmN5KSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGAke3VuaXRPckN1cnJlbmN5fWA7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXNzb2NpYXRlZCB0aW1lem9uZSBzdGF0aWMgdGV4dCBhIGdpdmVuIHByb3BlcnR5IGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHN0YXRpYyB2YWx1ZSwgaWYgaXQgZXhpc3RzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFN0YXRpY1RpbWV6b25lID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHN0YXRpY1RpbWV6b25lID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGlmICghc3RhdGljVGltZXpvbmUgfHwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24oc3RhdGljVGltZXpvbmUpKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRyZXR1cm4gYCR7c3RhdGljVGltZXpvbmV9YDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBDb21tb24uVGV4dCBwcm9wZXJ0eSBwYXRoIG9yIHVuZGVmaW5lZCBpZiBpdCBkb2VzIG5vdCBleGlzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRleHRQcm9wZXJ0eVBhdGggPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCkgPyBvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIGFubm90YXRpb24gZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdCB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVmZXJlbmNlcyB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIHx8XG5cdFx0ISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RNYXBwaW5nXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgd2l0aCBmaXhlZCB2YWx1ZSBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgZm9yIHZhbGlkYXRpb24gYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RGb3JWYWxpZGF0aW9uICE9PSB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVGltZXpvbmUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICE9PSB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdW5pdFxuICovXG5leHBvcnQgY29uc3QgaXNVbml0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHRleHQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBUZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNUZXh0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGFuIEltYWdlVVJMLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGFuIEltYWdlVVJMXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ltYWdlVVJMID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2VVUkw/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgY3VycmVuY3kgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ3VycmVuY3kgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNDdXJyZW5jeT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgY3VycmVuY3kgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdW5pdCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB1bml0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGhhc1VuaXQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgIT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IHR5cGUgaGFzIEVkbS5HdWlkLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgR3VpZFxuICovXG5leHBvcnQgY29uc3QgaXNHdWlkID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uR3VpZFwiO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGhhcyBhIHN0YXRpYyB1bml0IHRoYXQgaXMgJS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbm5vdGF0ZWQgd2l0aCB0aGUgc3RhdGljIHVuaXQgJVxuICovXG5leHBvcnQgY29uc3QgaGFzU3RhdGljUGVyY2VudFVuaXQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0Py50b1N0cmluZygpID09PSBcIiVcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm0gZWxlbWVudCBvciBhY3Rpb24gcGFyYW1ldGVyIHN1cHBvcnRzIG11bHRpIGxpbmUgdGV4dCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVyIFByb3BlcnR5IG9yIEFjdGlvblBhcmFtZXRlci5cbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlMaW5lVGV4dChwYXJhbWV0ZXI6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXJhbWV0ZXI/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIHRpbWV6b25lIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdGltZXpvbmUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZXpvbmUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmU/LnZhbHVlT2YoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEsVUFBVSxHQUFHLFVBQVVDLFNBQW1CLEVBQVc7SUFBQTtJQUNqRSxPQUFPLENBQUMsMkJBQUNBLFNBQVMsQ0FBQ0MsV0FBVyw0RUFBckIsc0JBQXVCQyxJQUFJLDZFQUEzQix1QkFBNkJDLFFBQVEsbURBQXJDLHVCQUF1Q0MsT0FBTyxFQUFFO0VBQzFELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNQyxXQUFXLEdBQUcsVUFBVUwsU0FBbUIsRUFBVztJQUFBO0lBQ2xFLE9BQU8sQ0FBQyw0QkFBQ0EsU0FBUyxDQUFDQyxXQUFXLDZFQUFyQix1QkFBdUJDLElBQUksNkVBQTNCLHVCQUE2QkksU0FBUyxtREFBdEMsdUJBQXdDRixPQUFPLEVBQUU7RUFDM0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1HLEtBQUssR0FBRyxVQUFVUCxTQUFtQixFQUFXO0lBQzVELE9BQU8sQ0FBQyxDQUFDQSxTQUFTLENBQUNPLEtBQUs7RUFDekIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BO0VBT08sTUFBTUMsYUFBYSxHQUFHLFVBQVVDLFFBQWtCLEVBQUVDLHNCQUEyQyxFQUFFO0lBQUE7SUFDdkcsTUFBTUMsWUFBWSw0QkFBR0Qsc0JBQXNCLENBQUNFLGVBQWUsb0ZBQXRDLHNCQUF3Q0MsZ0JBQWdCLHFGQUF4RCx1QkFBMERaLFdBQVcscUZBQXJFLHVCQUF1RWEsTUFBTSwyREFBN0UsdUJBQStFQyxXQUFXO0lBQy9HLE9BQ0MsQ0FBQUosWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZ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
|
|
370
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0NvbXB1dGVkIiwib1Byb3BlcnR5IiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiQ29tcHV0ZWQiLCJ2YWx1ZU9mIiwiaXNJbW11dGFibGUiLCJJbW11dGFibGUiLCJpc0tleSIsImlzU2VtYW50aWNLZXkiLCJwcm9wZXJ0eSIsImNvbnRleHREYXRhTW9kZWxPYmplY3QiLCJzZW1hbnRpY0tleXMiLCJjb250ZXh0TG9jYXRpb24iLCJ0YXJnZXRFbnRpdHlUeXBlIiwiQ29tbW9uIiwiU2VtYW50aWNLZXkiLCJzb21lIiwia2V5IiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImhhc0RhdGVUeXBlIiwiaW5jbHVkZXMiLCJ0eXBlIiwiZ2V0TGFiZWwiLCJMYWJlbCIsInRvU3RyaW5nIiwiaGFzU2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdEhlbHBlciIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCJUaW1lem9uZSIsInVuZGVmaW5lZCIsImdldEFzc29jaWF0ZWRUaW1lem9uZVByb3BlcnR5UGF0aCIsInBhdGgiLCJnZXRBc3NvY2lhdGVkVGV4dFByb3BlcnR5IiwiVGV4dCIsImdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkiLCJNZWFzdXJlcyIsIlVuaXQiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5UGF0aCIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiSVNPQ3VycmVuY3kiLCJnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eVBhdGgiLCJnZXRTdGF0aWNVbml0T3JDdXJyZW5jeSIsInVuaXRPckN1cnJlbmN5IiwiZ2V0U3RhdGljVGltZXpvbmUiLCJzdGF0aWNUaW1lem9uZSIsImdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoIiwiaGFzVmFsdWVIZWxwIiwiVmFsdWVMaXN0IiwiVmFsdWVMaXN0UmVmZXJlbmNlcyIsIlZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlZhbHVlTGlzdE1hcHBpbmciLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImhhc1RpbWV6b25lIiwiaXNVbml0IiwiSXNVbml0IiwiaGFzVGV4dCIsImlzSW1hZ2VVUkwiLCJVSSIsIklzSW1hZ2VVUkwiLCJpc0N1cnJlbmN5IiwiSXNDdXJyZW5jeSIsImhhc0N1cnJlbmN5IiwiaGFzVW5pdCIsImlzR3VpZCIsImhhc1N0YXRpY1BlcmNlbnRVbml0IiwiaXNNdWx0aUxpbmVUZXh0IiwicGFyYW1ldGVyIiwiTXVsdGlMaW5lVGV4dCIsImlzVGltZXpvbmUiLCJJc1RpbWV6b25lIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJQcm9wZXJ0eUhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvblBhcmFtZXRlciwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgU2VtYW50aWNPYmplY3RIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvU2VtYW50aWNPYmplY3RIZWxwZXJcIjtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuQ29tcHV0ZWQgYW5ub3RhdGlvbiBvciBub3QuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkXG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbXB1dGVkID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db3JlPy5Db21wdXRlZD8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgdGhlIENvcmUuSW1tdXRhYmxlIGFubm90YXRpb24gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0J3MgaW1tdXRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ltbXV0YWJsZSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29yZT8uSW1tdXRhYmxlPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEga2V5IG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCdzIGEga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0tleSA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eS5pc0tleTtcbn07XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSBzZW1hbnRpY0tleSBmb3IgdGhlIGNvbnRleHQgZW50aXR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVxuICogQHBhcmFtIGNvbnRleHREYXRhTW9kZWxPYmplY3QgVGhlIERhdGFNb2RlbE9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0XG4gKiBAcmV0dXJucyBgdHJ1ZWBpZiBpdCdzIGEgc2VtYW50aWMga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1NlbWFudGljS2V5ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCwgY29udGV4dERhdGFNb2RlbE9iamVjdDogRGF0YU1vZGVsT2JqZWN0UGF0aDx1bmtub3duPik6IGJvb2xlYW4ge1xuXHRjb25zdCBzZW1hbnRpY0tleXMgPSBjb250ZXh0RGF0YU1vZGVsT2JqZWN0LmNvbnRleHRMb2NhdGlvbj8udGFyZ2V0RW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNLZXk7XG5cdHJldHVybiAoXG5cdFx0c2VtYW50aWNLZXlzPy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBrZXk/LiR0YXJnZXQ/LmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gcHJvcGVydHk/LmZ1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHR9KSA/PyBmYWxzZVxuXHQpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgZGF0ZSB0aW1lIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5XG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgb2YgdHlwZSBkYXRlIC8gZGF0ZXRpbWUgLyBkYXRldGltZW9mZnNldFxuICovXG5leHBvcnQgY29uc3QgaGFzRGF0ZVR5cGUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gW1wiRWRtLkRhdGVcIiwgXCJFZG0uRGF0ZVRpbWVcIiwgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIl0uaW5jbHVkZXMob1Byb3BlcnR5LnR5cGUpO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgbGFiZWwgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBsYWJlbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExhYmVsID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IFwiXCI7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHNlbWFudGljIG9iamVjdCBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHNlbWFudGljIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgaGFzU2VtYW50aWNPYmplY3QgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBTZW1hbnRpY09iamVjdEhlbHBlci5oYXNTZW1hbnRpY09iamVjdChwcm9wZXJ0eSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdGltZXpvbmUgcHJvcGVydHkgYXNzb2NpYXRlZCB0byB0aGUgcHJvcGVydHksIGlmIGFwcGxpY2FibGUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdGltZXpvbmUgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHkgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmUpXG5cdFx0PyAob1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lLiR0YXJnZXQgYXMgdW5rbm93biBhcyBQcm9wZXJ0eSlcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0aW1lem9uZSBwcm9wZXJ0eSBwYXRoIGFzc29jaWF0ZWQgdG8gdGhlIHByb3BlcnR5LCBpZiBhcHBsaWNhYmxlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHRpbWV6b25lIHByb3BlcnR5IHBhdGgsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZFRpbWV6b25lUHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZSlcblx0XHQ/IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU/LnBhdGhcblx0XHQ6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhc3NvY2lhdGVkIHRleHQgcHJvcGVydHkgZm9yIHRoYXQgcHJvcGVydHksIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB0ZXh0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHkgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dClcblx0XHQ/IChvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dC4kdGFyZ2V0IGFzIHVua25vd24gYXMgUHJvcGVydHkpXG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdW5pdCBwcm9wZXJ0eSBhc3NvY2lhdGVkIHRvIHRoZSBwcm9wZXJ0eSwgaWYgYXBwbGljYWJsZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB1bml0IHByb3BlcnR5LCBpZiBpdCBleGlzdHNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQpXG5cdFx0PyBvUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LlVuaXQuJHRhcmdldFxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQpID8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgY3VycmVuY3kgcHJvcGVydHkgZm9yIHRoYXQgcHJvcGVydHkgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIHVuaXQgcHJvcGVydHksIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IHVuZGVmaW5lZCk6IFByb3BlcnR5IHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eSAmJiBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHkuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5KVxuXHRcdD8gb1Byb3BlcnR5LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeS4kdGFyZ2V0XG5cdFx0OiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5KVxuXHRcdD8gb1Byb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kucGF0aFxuXHRcdDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgc3RhdGljIGN1cnJlbmN5IG9yIHVuaXQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgdW5pdCBvciBjdXJyZW5jeSBzdGF0aWMgdmFsdWUsIGlmIGl0IGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgZ2V0U3RhdGljVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdW5pdE9yQ3VycmVuY3kgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5LmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKCF1bml0T3JDdXJyZW5jeSB8fCBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0T3JDdXJyZW5jeSkpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBgJHt1bml0T3JDdXJyZW5jeX1gO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGFzc29jaWF0ZWQgdGltZXpvbmUgc3RhdGljIHRleHQgYSBnaXZlbiBwcm9wZXJ0eSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSB0aW1lem9uZSBzdGF0aWMgdmFsdWUsIGlmIGl0IGV4aXN0c1xuICovXG5cbmV4cG9ydCBjb25zdCBnZXRTdGF0aWNUaW1lem9uZSA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzdGF0aWNUaW1lem9uZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lO1xuXHRpZiAoIXN0YXRpY1RpbWV6b25lIHx8IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHN0YXRpY1RpbWV6b25lKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGAke3N0YXRpY1RpbWV6b25lfWA7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgQ29tbW9uLlRleHQgcHJvcGVydHkgcGF0aCBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgQ29tbW9uLlRleHQgcHJvcGVydHkgcGF0aCBvciB1bmRlZmluZWQgaWYgaXQgZG9lcyBub3QgZXhpc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFzc29jaWF0ZWRUZXh0UHJvcGVydHlQYXRoID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0KSA/IG9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dC5wYXRoIDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBoYXMgYSB2YWx1ZSBoZWxwIGFubm90YXRpb24gZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscCA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIChcblx0XHQhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdCB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0UmVmZXJlbmNlcyB8fFxuXHRcdCEhcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIHx8XG5cdFx0ISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RNYXBwaW5nXG5cdCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgd2l0aCBmaXhlZCB2YWx1ZSBhbm5vdGF0aW9uIGRlZmluZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBhIHZhbHVlIGhlbHBcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyKTogYm9vbGVhbiB7XG5cdHJldHVybiAhIW9Qcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzPy52YWx1ZU9mKCk7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHZhbHVlIGhlbHAgZm9yIHZhbGlkYXRpb24gYW5ub3RhdGlvbiBkZWZpbmVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB2YWx1ZSBoZWxwXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBBY3Rpb25QYXJhbWV0ZXIpOiBib29sZWFuIHtcblx0cmV0dXJuIG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RGb3JWYWxpZGF0aW9uICE9PSB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVGltZXpvbmUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gb1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlRpbWV6b25lICE9PSB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaXMgYSB1bml0IHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdW5pdFxuICovXG5leHBvcnQgY29uc3QgaXNVbml0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5Jc1VuaXQ/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGhhcyBhIHRleHQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaXMgYSBUZXh0XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNUZXh0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGFuIEltYWdlVVJMLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGFuIEltYWdlVVJMXG4gKi9cbmV4cG9ydCBjb25zdCBpc0ltYWdlVVJMID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LklzSW1hZ2VVUkw/LnZhbHVlT2YoKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGEgY3VycmVuY3kgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQ3VycmVuY3kgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNDdXJyZW5jeT8udmFsdWVPZigpO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgY3VycmVuY3kgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgaXQgaGFzIGEgY3VycmVuY3lcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc0N1cnJlbmN5ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkuYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSAhPT0gdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgcHJvcGVydHkgaGFzIGEgdW5pdCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGJlIGNoZWNrZWRcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSB1bml0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGhhc1VuaXQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQgIT09IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3BlcnR5IHR5cGUgaGFzIEVkbS5HdWlkLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgR3VpZFxuICovXG5leHBvcnQgY29uc3QgaXNHdWlkID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IEFjdGlvblBhcmFtZXRlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gcHJvcGVydHkudHlwZSA9PT0gXCJFZG0uR3VpZFwiO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3BlcnR5IGhhcyBhIHN0YXRpYyB1bml0IHRoYXQgaXMgJS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHkgVGhlIHRhcmdldCBwcm9wZXJ0eVxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBhbm5vdGF0ZWQgd2l0aCB0aGUgc3RhdGljIHVuaXQgJVxuICovXG5leHBvcnQgY29uc3QgaGFzU3RhdGljUGVyY2VudFVuaXQgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0Py50b1N0cmluZygpID09PSBcIiVcIjtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGZvcm0gZWxlbWVudCBvciBhY3Rpb24gcGFyYW1ldGVyIHN1cHBvcnRzIG11bHRpIGxpbmUgdGV4dCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1ldGVyIFByb3BlcnR5IG9yIEFjdGlvblBhcmFtZXRlci5cbiAqIEByZXR1cm5zIEJvb2xlYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTXVsdGlMaW5lVGV4dChwYXJhbWV0ZXI6IFByb3BlcnR5IHwgQWN0aW9uUGFyYW1ldGVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXJhbWV0ZXI/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhIHRpbWV6b25lIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0IGlzIGEgdGltZXpvbmUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGltZXpvbmUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIXByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzVGltZXpvbmU/LnZhbHVlT2YoKTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEsVUFBVSxHQUFHLFVBQVVDLFNBQW1CLEVBQVc7SUFBQTtJQUNqRSxPQUFPLENBQUMsMkJBQUNBLFNBQVMsQ0FBQ0MsV0FBVyw0RUFBckIsc0JBQXVCQyxJQUFJLDZFQUEzQix1QkFBNkJDLFFBQVEsbURBQXJDLHVCQUF1Q0MsT0FBTyxFQUFFO0VBQzFELENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNQyxXQUFXLEdBQUcsVUFBVUwsU0FBbUIsRUFBVztJQUFBO0lBQ2xFLE9BQU8sQ0FBQyw0QkFBQ0EsU0FBUyxDQUFDQyxXQUFXLDZFQUFyQix1QkFBdUJDLElBQUksNkVBQTNCLHVCQUE2QkksU0FBUyxtREFBdEMsdUJBQXdDRixPQUFPLEVBQUU7RUFDM0QsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1HLEtBQUssR0FBRyxVQUFVUCxTQUFtQixFQUFXO0lBQzVELE9BQU8sQ0FBQyxDQUFDQSxTQUFTLENBQUNPLEtBQUs7RUFDekIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BO0VBT08sTUFBTUMsYUFBYSxHQUFHLFVBQVVDLFFBQThCLEVBQUVDLHNCQUFvRCxFQUFXO0lBQUE7SUFDckksTUFBTUMsWUFBWSw0QkFBR0Qsc0JBQXNCLENBQUNFLGVBQWUsb0ZBQXRDLHNCQUF3Q0MsZ0JBQWdCLHFGQUF4RCx1QkFBMERaLFdBQVcscUZBQXJFLHVCQUF1RWEsTUFBTSwyREFBN0UsdUJBQStFQyxXQUFXO0lBQy9HLE9BQ0MsQ0FBQUosWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVLLElBQUksQ0FBQyxVQUFVQyxHQUFHLEVBQUU7TUFBQTtNQUNqQyxPQUFPLENBQUFBLEdBQUcsYUFBSEEsR0FBRyx1Q0FBSEEsR0FBRyxDQUFFQyxPQUFPLGlEQUFaLGFBQWNDLGtCQUFrQixPQUFLVixRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRVUsa0JBQWtCO0lBQ3pFLENBQUMsQ0FBQyxLQUFJLEtBQUs7RUFFYixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUMsV0FBVyxHQUFHLFVBQVVwQixTQUFtQixFQUFXO0lBQ2xFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixDQUFDLENBQUNxQixRQUFRLENBQUNyQixTQUFTLENBQUNzQixJQUFJLENBQUM7RUFDbkYsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1DLFFBQVEsR0FBRyxVQUFVdkIsU0FBbUIsRUFBVTtJQUFBO0lBQzlELE9BQU8sMkJBQUFBLFNBQVMsQ0FBQ0MsV0FBVyxxRkFBckIsdUJBQXVCYSxNQUFNLHFGQUE3Qix1QkFBK0JVLEtBQUssMkRBQXBDLHVCQUFzQ0MsUUFBUSxFQUFFLEtBQUksRUFBRTtFQUM5RCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUMsaUJBQWlCLEdBQUcsVUFBVWpCLFFBQWtCLEVBQVc7SUFDdkUsT0FBT2tCLG9CQUFvQixDQUFDRCxpQkFBaUIsQ0FBQ2pCLFFBQVEsQ0FBQztFQUN4RCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTW1CLDZCQUE2QixHQUFHLFVBQVU1QixTQUFtQixFQUF3QjtJQUFBO0lBQ2pHLE9BQU82QiwwQkFBMEIsQ0FBQzdCLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JhLE1BQU0sNERBQTlCLHdCQUFnQ2dCLFFBQVEsQ0FBQyw4QkFDdkU5QixTQUFTLENBQUNDLFdBQVcsdUZBQXJCLHdCQUF1QmEsTUFBTSw0REFBN0Isd0JBQStCZ0IsUUFBUSxDQUFDWixPQUFPLEdBQ2hEYSxTQUFTO0VBQ2IsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1DLGlDQUFpQyxHQUFHLFVBQVVoQyxTQUFtQixFQUFzQjtJQUFBO0lBQ25HLE9BQU82QiwwQkFBMEIsQ0FBQzdCLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JhLE1BQU0sNERBQTlCLHdCQUFnQ2dCLFFBQVEsQ0FBQyxHQUN4RTlCLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JhLE1BQU0sdUZBQTlCLHdCQUFnQ2dCLFFBQVEsNERBQXhDLHdCQUEwQ0csSUFBSSxHQUM5Q0YsU0FBUztFQUNiLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNRyx5QkFBeUIsR0FBRyxVQUFVbEMsU0FBbUIsRUFBd0I7SUFBQTtJQUM3RixPQUFPNkIsMEJBQTBCLENBQUM3QixTQUFTLGFBQVRBLFNBQVMsa0RBQVRBLFNBQVMsQ0FBRUMsV0FBVyx1RkFBdEIsd0JBQXdCYSxNQUFNLDREQUE5Qix3QkFBZ0NxQixJQUFJLENBQUMsOEJBQ25FbkMsU0FBUyxDQUFDQyxXQUFXLHVGQUFyQix3QkFBdUJhLE1BQU0sNERBQTdCLHdCQUErQnFCLElBQUksQ0FBQ2pCLE9BQU8sR0FDNUNhLFNBQVM7RUFDYixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUsseUJBQXlCLEdBQUcsVUFBVXBDLFNBQStCLEVBQXdCO0lBQUE7SUFDekcsT0FBT0EsU0FBUyxJQUFJNkIsMEJBQTBCLDRCQUFDN0IsU0FBUyxDQUFDQyxXQUFXLENBQUNvQyxRQUFRLDREQUE5Qix3QkFBZ0NDLElBQUksQ0FBQyw4QkFDakZ0QyxTQUFTLENBQUNDLFdBQVcsQ0FBQ29DLFFBQVEsNERBQTlCLHdCQUFnQ0MsSUFBSSxDQUFDcEIsT0FBTyxHQUM1Q2EsU0FBUztFQUNiLENBQUM7RUFBQztFQUVLLE1BQU1RLDZCQUE2QixHQUFHLFVBQVV2QyxTQUFtQixFQUFzQjtJQUFBO0lBQy9GLE9BQU82QiwwQkFBMEIsQ0FBQzdCLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JvQyxRQUFRLDREQUFoQyx3QkFBa0NDLElBQUksQ0FBQyw4QkFBR3RDLFNBQVMsQ0FBQ0MsV0FBVyx1RkFBckIsd0JBQXVCb0MsUUFBUSw0REFBL0Isd0JBQWlDQyxJQUFJLENBQUNMLElBQUksR0FBR0YsU0FBUztFQUNuSSxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTVMsNkJBQTZCLEdBQUcsVUFBVXhDLFNBQStCLEVBQXdCO0lBQUE7SUFDN0csT0FBT0EsU0FBUyxJQUFJNkIsMEJBQTBCLDRCQUFDN0IsU0FBUyxDQUFDQyxXQUFXLENBQUNvQyxRQUFRLDREQUE5Qix3QkFBZ0NJLFdBQVcsQ0FBQyw4QkFDeEZ6QyxTQUFTLENBQUNDLFdBQVcsQ0FBQ29DLFFBQVEsNERBQTlCLHdCQUFnQ0ksV0FBVyxDQUFDdkIsT0FBTyxHQUNuRGEsU0FBUztFQUNiLENBQUM7RUFBQztFQUVLLE1BQU1XLGlDQUFpQyxHQUFHLFVBQVUxQyxTQUFtQixFQUFzQjtJQUFBO0lBQ25HLE9BQU82QiwwQkFBMEIsQ0FBQzdCLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JvQyxRQUFRLDREQUFoQyx3QkFBa0NJLFdBQVcsQ0FBQyw4QkFDN0V6QyxTQUFTLENBQUNDLFdBQVcsdUZBQXJCLHdCQUF1Qm9DLFFBQVEsNERBQS9CLHdCQUFpQ0ksV0FBVyxDQUFDUixJQUFJLEdBQ2pERixTQUFTO0VBQ2IsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1ZLHVCQUF1QixHQUFHLFVBQVVsQyxRQUFrQixFQUFzQjtJQUFBO0lBQ3hGLE1BQU1tQyxjQUFjLEdBQUcsMEJBQUFuQyxRQUFRLENBQUNSLFdBQVcsb0ZBQXBCLHNCQUFzQm9DLFFBQVEsMkRBQTlCLHVCQUFnQ0ksV0FBVyxnQ0FBSWhDLFFBQVEsQ0FBQ1IsV0FBVyxxRkFBcEIsdUJBQXNCb0MsUUFBUSwyREFBOUIsdUJBQWdDQyxJQUFJO0lBQzFHLElBQUksQ0FBQ00sY0FBYyxJQUFJZiwwQkFBMEIsQ0FBQ2UsY0FBYyxDQUFDLEVBQUU7TUFDbEUsT0FBT2IsU0FBUztJQUNqQjtJQUNBLE9BQVEsR0FBRWEsY0FBZSxFQUFDO0VBQzNCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFPTyxNQUFNQyxpQkFBaUIsR0FBRyxVQUFVcEMsUUFBa0IsRUFBc0I7SUFBQTtJQUNsRixNQUFNcUMsY0FBYyw2QkFBR3JDLFFBQVEsQ0FBQ1IsV0FBVyxxRkFBcEIsdUJBQXNCYSxNQUFNLDJEQUE1Qix1QkFBOEJnQixRQUFRO0lBQzdELElBQUksQ0FBQ2dCLGNBQWMsSUFBSWpCLDBCQUEwQixDQUFDaUIsY0FBYyxDQUFDLEVBQUU7TUFDbEUsT0FBT2YsU0FBUztJQUNqQjtJQUNBLE9BQVEsR0FBRWUsY0FBZSxFQUFDO0VBQzNCLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNQyw2QkFBNkIsR0FBRyxVQUFVL0MsU0FBK0IsRUFBc0I7SUFBQTtJQUMzRyxPQUFPNkIsMEJBQTBCLENBQUM3QixTQUFTLGFBQVRBLFNBQVMsa0RBQVRBLFNBQVMsQ0FBRUMsV0FBVyx1RkFBdEIsd0JBQXdCYSxNQUFNLDREQUE5Qix3QkFBZ0NxQixJQUFJLENBQUMsR0FBR25DLFNBQVMsYUFBVEEsU0FBUyxrREFBVEEsU0FBUyxDQUFFQyxXQUFXLHVGQUF0Qix3QkFBd0JhLE1BQU0sNERBQTlCLHdCQUFnQ3FCLElBQUksQ0FBQ0YsSUFBSSxHQUFHRixTQUFTO0VBQ2hJLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNaUIsWUFBWSxHQUFHLFVBQVV2QyxRQUFvQyxFQUFXO0lBQUE7SUFDcEYsT0FDQyxDQUFDLDRCQUFDQSxRQUFRLENBQUNSLFdBQVcsNkVBQXBCLHVCQUFzQmEsTUFBTSxtREFBNUIsdUJBQThCbUMsU0FBUyxLQUN6QyxDQUFDLDRCQUFDeEMsUUFBUSxDQUFDUixXQUFXLDhFQUFwQix1QkFBc0JhLE1BQU0sb0RBQTVCLHdCQUE4Qm9DLG1CQUFtQixLQUNuRCxDQUFDLDZCQUFDekMsUUFBUSxDQUFDUixXQUFXLCtFQUFwQix3QkFBc0JhLE1BQU0sb0RBQTVCLHdCQUE4QnFDLHdCQUF3QixLQUN4RCxDQUFDLDZCQUFDMUMsUUFBUSxDQUFDUixXQUFXLCtFQUFwQix3QkFBc0JhLE1BQU0sb0RBQTVCLHdCQUE4QnNDLGdCQUFnQjtFQUVsRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUMsMkJBQTJCLEdBQUcsVUFBVXJELFNBQXFDLEVBQVc7SUFBQTtJQUNwRyxPQUFPLENBQUMsRUFBQ0EsU0FBUyxhQUFUQSxTQUFTLDBDQUFUQSxTQUFTLENBQUVDLFdBQVcsK0VBQXRCLHdCQUF3QmEsTUFBTSwrRUFBOUIsd0JBQWdDcUMsd0JBQXdCLG9EQUF4RCx3QkFBMEQvQyxPQUFPLEVBQUU7RUFDN0UsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU1rRCx5QkFBeUIsR0FBRyxVQUFVdEQsU0FBcUMsRUFBVztJQUFBO0lBQ2xHLE9BQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBVyx1RkFBckIsd0JBQXVCYSxNQUFNLDREQUE3Qix3QkFBK0J5QyxzQkFBc0IsTUFBS3hCLFNBQVM7RUFDM0UsQ0FBQztFQUFDO0VBRUssTUFBTXlCLFdBQVcsR0FBRyxVQUFVeEQsU0FBbUIsRUFBVztJQUFBO0lBQ2xFLE9BQU8sNEJBQUFBLFNBQVMsQ0FBQ0MsV0FBVyx1RkFBckIsd0JBQXVCYSxNQUFNLDREQUE3Qix3QkFBK0JnQixRQUFRLE1BQUtDLFNBQVM7RUFDN0QsQ0FBQztFQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTTBCLE1BQU0sR0FBRyxVQUFVaEQsUUFBb0MsRUFBVztJQUFBO0lBQzlFLE9BQU8sQ0FBQyw2QkFBQ0EsUUFBUSxDQUFDUixXQUFXLCtFQUFwQix3QkFBc0JhLE1BQU0sK0VBQTVCLHdCQUE4QjRDLE1BQU0sb0RBQXBDLHdCQUFzQ3RELE9BQU8sRUFBRTtFQUN6RCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTXVELE9BQU8sR0FBRyxVQUFVbEQsUUFBa0IsRUFBVztJQUFBO0lBQzdELE9BQU8sNEJBQUFBLFFBQVEsQ0FBQ1IsV0FBVyx1RkFBcEIsd0JBQXNCYSxNQUFNLDREQUE1Qix3QkFBOEJxQixJQUFJLE1BQUtKLFNBQVM7RUFDeEQsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU02QixVQUFVLEdBQUcsVUFBVW5ELFFBQWtCLEVBQVc7SUFBQTtJQUNoRSxPQUFPLENBQUMsNkJBQUNBLFFBQVEsQ0FBQ1IsV0FBVywrRUFBcEIsd0JBQXNCNEQsRUFBRSwrRUFBeEIsd0JBQTBCQyxVQUFVLG9EQUFwQyx3QkFBc0MxRCxPQUFPLEVBQUU7RUFDekQsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU0yRCxVQUFVLEdBQUcsVUFBVS9ELFNBQXFDLEVBQVc7SUFBQTtJQUNuRixPQUFPLENBQUMsNkJBQUNBLFNBQVMsQ0FBQ0MsV0FBVywrRUFBckIsd0JBQXVCYSxNQUFNLCtFQUE3Qix3QkFBK0JrRCxVQUFVLG9EQUF6Qyx3QkFBMkM1RCxPQUFPLEVBQUU7RUFDOUQsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMQTtFQU1PLE1BQU02RCxXQUFXLEdBQUcsVUFBVXhELFFBQWtCLEVBQVc7SUFBQTtJQUNqRSxPQUFPLDRCQUFBQSxRQUFRLENBQUNSLFdBQVcsdUZBQXBCLHdCQUFzQm9DLFFBQVEsNERBQTlCLHdCQUFnQ0ksV0FBVyxNQUFLVixTQUFTO0VBQ2pFLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFPTyxNQUFNbUMsT0FBTyxHQUFHLFVBQVV6RCxRQUFrQixFQUFXO0lBQUE7SUFDN0QsT0FBTyw0QkFBQUEsUUFBUSxDQUFDUixXQUFXLHVGQUFwQix3QkFBc0JvQyxRQUFRLDREQUE5Qix3QkFBZ0NDLElBQUksTUFBS1AsU0FBUztFQUMxRCxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTW9DLE1BQU0sR0FBRyxVQUFVMUQsUUFBb0MsRUFBVztJQUM5RSxPQUFPQSxRQUFRLENBQUNhLElBQUksS0FBSyxVQUFVO0VBQ3BDLENBQUM7O0VBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxNQUFNOEMsb0JBQW9CLEdBQUcsVUFBVTNELFFBQWtCLEVBQVc7SUFBQTtJQUMxRSxPQUFPLENBQUFBLFFBQVEsYUFBUkEsUUFBUSxrREFBUkEsUUFBUSxDQUFFUixXQUFXLHVGQUFyQix3QkFBdUJvQyxRQUFRLHVGQUEvQix3QkFBaUNDLElBQUksNERBQXJDLHdCQUF1Q2IsUUFBUSxFQUFFLE1BQUssR0FBRztFQUNqRSxDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sU0FBUzRDLGVBQWUsQ0FBQ0MsU0FBaUQsRUFBVztJQUFBO0lBQzNGLE9BQU8sQ0FBQUEsU0FBUyxhQUFUQSxTQUFTLGdEQUFUQSxTQUFTLENBQUVyRSxXQUFXLG9GQUF0QixzQkFBd0I0RCxFQUFFLHFGQUExQix1QkFBNEJVLGFBQWEsMkRBQXpDLHVCQUEyQ25FLE9BQU8sRUFBRSxNQUFLLElBQUk7RUFDckU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEE7RUFNTyxTQUFTb0UsVUFBVSxDQUFDL0QsUUFBa0IsRUFBVztJQUFBO0lBQ3ZELE9BQU8sQ0FBQyw2QkFBQ0EsUUFBUSxDQUFDUixXQUFXLCtFQUFwQix3QkFBc0JhLE1BQU0sK0VBQTVCLHdCQUE4QjJELFVBQVUsb0RBQXhDLHdCQUEwQ3JFLE9BQU8sRUFBRTtFQUM3RDtFQUFDO0VBQUE7QUFBQSJ9
|
|
@@ -40,11 +40,11 @@ export const isKey = function (oProperty: Property): boolean {
|
|
|
40
40
|
* @param contextDataModelObject The DataModelObject that holds the context
|
|
41
41
|
* @returns `true`if it's a semantic key
|
|
42
42
|
*/
|
|
43
|
-
export const isSemanticKey = function (property: Property, contextDataModelObject: DataModelObjectPath) {
|
|
43
|
+
export const isSemanticKey = function (property: Property | undefined, contextDataModelObject: DataModelObjectPath<unknown>): boolean {
|
|
44
44
|
const semanticKeys = contextDataModelObject.contextLocation?.targetEntityType?.annotations?.Common?.SemanticKey;
|
|
45
45
|
return (
|
|
46
46
|
semanticKeys?.some(function (key) {
|
|
47
|
-
return key?.$target?.fullyQualifiedName === property
|
|
47
|
+
return key?.$target?.fullyQualifiedName === property?.fullyQualifiedName;
|
|
48
48
|
}) ?? false
|
|
49
49
|
);
|
|
50
50
|
};
|
|
@@ -184,8 +184,8 @@ export const getStaticTimezone = function (property: Property): string | undefin
|
|
|
184
184
|
* @param oProperty The target property
|
|
185
185
|
* @returns The Common.Text property path or undefined if it does not exist
|
|
186
186
|
*/
|
|
187
|
-
export const getAssociatedTextPropertyPath = function (oProperty: Property): string | undefined {
|
|
188
|
-
return isPathAnnotationExpression(oProperty
|
|
187
|
+
export const getAssociatedTextPropertyPath = function (oProperty: Property | undefined): string | undefined {
|
|
188
|
+
return isPathAnnotationExpression(oProperty?.annotations?.Common?.Text) ? oProperty?.annotations?.Common?.Text.path : undefined;
|
|
189
189
|
};
|
|
190
190
|
|
|
191
191
|
/**
|
|
@@ -2,18 +2,26 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define([], function () {
|
|
5
|
+
sap.ui.define(["sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards"], function (BindingToolkit, TypeGuards) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
+
var isNavigationProperty = TypeGuards.isNavigationProperty;
|
|
10
|
+
var isAnnotationOfTerm = TypeGuards.isAnnotationOfTerm;
|
|
11
|
+
var resolveBindingString = BindingToolkit.resolveBindingString;
|
|
12
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
13
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
9
14
|
/**
|
|
10
|
-
* Get the path of the semantic
|
|
15
|
+
* Get the path of the semantic object if it is a dynamic SemanticObject.
|
|
11
16
|
*
|
|
12
17
|
* @param semanticObject The value of the Common.SemanticObject annotation.
|
|
13
|
-
* @returns The path of the semantic
|
|
18
|
+
* @returns The path of the semantic object if it is a dynamic SemanticObject null otherwise.
|
|
14
19
|
*/
|
|
15
20
|
const getDynamicPathFromSemanticObject = semanticObject => {
|
|
16
21
|
const dynamicSemObjectRegex = semanticObject === null || semanticObject === void 0 ? void 0 : semanticObject.match(/{(.*?)}/);
|
|
22
|
+
if (semanticObject !== null && semanticObject !== void 0 && semanticObject.startsWith("{=")) {
|
|
23
|
+
return semanticObject;
|
|
24
|
+
}
|
|
17
25
|
if (dynamicSemObjectRegex !== null && dynamicSemObjectRegex !== void 0 && dynamicSemObjectRegex.length && dynamicSemObjectRegex.length > 1) {
|
|
18
26
|
return dynamicSemObjectRegex[1];
|
|
19
27
|
}
|
|
@@ -47,9 +55,9 @@ sap.ui.define([], function () {
|
|
|
47
55
|
const _propertyCommonAnnotations = (_property$annotations2 = property.annotations) === null || _property$annotations2 === void 0 ? void 0 : _property$annotations2.Common;
|
|
48
56
|
if (_propertyCommonAnnotations) {
|
|
49
57
|
for (const key in _propertyCommonAnnotations) {
|
|
50
|
-
|
|
51
|
-
if ((
|
|
52
|
-
semanticObjects.push(
|
|
58
|
+
const annotation = _propertyCommonAnnotations[key];
|
|
59
|
+
if (isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObject")) {
|
|
60
|
+
semanticObjects.push(annotation);
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
63
|
}
|
|
@@ -62,9 +70,9 @@ sap.ui.define([], function () {
|
|
|
62
70
|
const _propertyCommonAnnotations = (_property$annotations3 = property.annotations) === null || _property$annotations3 === void 0 ? void 0 : _property$annotations3.Common;
|
|
63
71
|
if (_propertyCommonAnnotations) {
|
|
64
72
|
for (const key in _propertyCommonAnnotations) {
|
|
65
|
-
|
|
66
|
-
if ((
|
|
67
|
-
semanticObjectMappings.push(
|
|
73
|
+
const annotation = _propertyCommonAnnotations[key];
|
|
74
|
+
if (isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectMapping")) {
|
|
75
|
+
semanticObjectMappings.push(annotation);
|
|
68
76
|
}
|
|
69
77
|
}
|
|
70
78
|
}
|
|
@@ -77,15 +85,151 @@ sap.ui.define([], function () {
|
|
|
77
85
|
const _propertyCommonAnnotations = (_property$annotations4 = property.annotations) === null || _property$annotations4 === void 0 ? void 0 : _property$annotations4.Common;
|
|
78
86
|
if (_propertyCommonAnnotations) {
|
|
79
87
|
for (const key in _propertyCommonAnnotations) {
|
|
80
|
-
|
|
81
|
-
if ((
|
|
82
|
-
semanticObjectUnavailableActions.push(
|
|
88
|
+
const annotation = _propertyCommonAnnotations[key];
|
|
89
|
+
if (isAnnotationOfTerm(annotation, "com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions")) {
|
|
90
|
+
semanticObjectUnavailableActions.push(annotation);
|
|
83
91
|
}
|
|
84
92
|
}
|
|
85
93
|
}
|
|
86
94
|
return semanticObjectUnavailableActions;
|
|
87
95
|
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get the property or the navigation property in its relative path that holds semanticObject annotation if it exists.
|
|
99
|
+
*
|
|
100
|
+
* @param dataModelObjectPath
|
|
101
|
+
* @returns A property or a NavProperty or undefined
|
|
102
|
+
*/
|
|
88
103
|
_exports.getSemanticObjectUnavailableActions = getSemanticObjectUnavailableActions;
|
|
104
|
+
const getPropertyWithSemanticObject = function (dataModelObjectPath) {
|
|
105
|
+
let propertyWithSemanticObject;
|
|
106
|
+
if (dataModelObjectPath.targetObject && hasSemanticObject(dataModelObjectPath.targetObject)) {
|
|
107
|
+
propertyWithSemanticObject = dataModelObjectPath.targetObject;
|
|
108
|
+
} else if (dataModelObjectPath.navigationProperties.length > 0) {
|
|
109
|
+
// there are no semantic objects on the property itself so we look for some on nav properties
|
|
110
|
+
for (const navProperty of dataModelObjectPath.navigationProperties) {
|
|
111
|
+
var _dataModelObjectPath$;
|
|
112
|
+
if (!((_dataModelObjectPath$ = dataModelObjectPath.contextLocation) !== null && _dataModelObjectPath$ !== void 0 && _dataModelObjectPath$.navigationProperties.find(contextNavProp => contextNavProp.fullyQualifiedName === navProperty.fullyQualifiedName)) && !propertyWithSemanticObject && hasSemanticObject(navProperty)) {
|
|
113
|
+
propertyWithSemanticObject = navProperty;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return propertyWithSemanticObject;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Get the semanticObject compile binding from metadata and a map to the qualifiers.
|
|
122
|
+
*
|
|
123
|
+
* @param propertyWithSemanticObject The property that holds semanticObject annotataions if it exists
|
|
124
|
+
* @returns An object containing semanticObjectList and qualifierMap
|
|
125
|
+
*/
|
|
126
|
+
_exports.getPropertyWithSemanticObject = getPropertyWithSemanticObject;
|
|
127
|
+
const getSemanticObjectsAndQualifierMap = function (propertyWithSemanticObject) {
|
|
128
|
+
const qualifierMap = {};
|
|
129
|
+
const semanticObjectsList = [];
|
|
130
|
+
const semanticObjectsExpressionList = [];
|
|
131
|
+
if (propertyWithSemanticObject !== undefined) {
|
|
132
|
+
for (const semanticObject of getSemanticObjects(propertyWithSemanticObject)) {
|
|
133
|
+
const semanticObjectExpression = getExpressionFromAnnotation(semanticObject);
|
|
134
|
+
const compiledSemanticObject = compileExpression(semanticObjectExpression);
|
|
135
|
+
// this should not happen, but we make sure not to add twice the semanticObject otherwise the mdcLink crashes
|
|
136
|
+
if (compiledSemanticObject && !semanticObjectsList.includes(compiledSemanticObject)) {
|
|
137
|
+
qualifierMap[semanticObject.qualifier || ""] = compiledSemanticObject;
|
|
138
|
+
semanticObjectsList.push(compiledSemanticObject);
|
|
139
|
+
semanticObjectsExpressionList.push(semanticObjectExpression);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
semanticObjectsList,
|
|
145
|
+
semanticObjectsExpressionList,
|
|
146
|
+
qualifierMap
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Determines if the current user can navigate to semantic objects based on the provided lists.
|
|
152
|
+
*
|
|
153
|
+
* @param semanticObjectsCurrentUserCanNavigateTo The list of semantic objects the current user can navigate to.
|
|
154
|
+
* @param semanticObjectList An object containing lists and maps of semantic objects.
|
|
155
|
+
* @param semanticObjectList.semanticObjectsList The list of all semantic objects.
|
|
156
|
+
* @param semanticObjectList.semanticObjectsExpressionList The list of expressions for semantic objects.
|
|
157
|
+
* @param semanticObjectList.qualifierMap A map of qualifiers to compiled expressions.
|
|
158
|
+
* @returns An object containing information about static and dynamic semantic objects.
|
|
159
|
+
*/
|
|
160
|
+
_exports.getSemanticObjectsAndQualifierMap = getSemanticObjectsAndQualifierMap;
|
|
161
|
+
const getReachableSemanticObjectsSettings = function (semanticObjectsCurrentUserCanNavigateTo, semanticObjectList) {
|
|
162
|
+
const dynamicSemanticObjectsList = [];
|
|
163
|
+
let result = false;
|
|
164
|
+
if (semanticObjectsCurrentUserCanNavigateTo) {
|
|
165
|
+
for (const semanticObject of semanticObjectsCurrentUserCanNavigateTo) {
|
|
166
|
+
for (const actualSemanticObject of semanticObjectList.semanticObjectsList) {
|
|
167
|
+
if (semanticObject === actualSemanticObject) {
|
|
168
|
+
result = true;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (result) {
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
semanticObjectList.semanticObjectsExpressionList.forEach(semanticObjectExpression => {
|
|
177
|
+
if (semanticObjectExpression._type !== "Constant") {
|
|
178
|
+
dynamicSemanticObjectsList.push(semanticObjectExpression);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
hasReachableStaticSemanticObject: result,
|
|
184
|
+
dynamicSemanticObjects: dynamicSemanticObjectsList
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Check the user rights to navigate to the semantic objects.
|
|
190
|
+
*
|
|
191
|
+
* @param semanticObject The semantic object name
|
|
192
|
+
* @param dataModelPath The DataModelObjectPath of the property
|
|
193
|
+
* @param settings The TemplateProcessorSettings of the internal field
|
|
194
|
+
* @returns An object containing semanticObjectList and qualifierMap
|
|
195
|
+
*/
|
|
196
|
+
_exports.getReachableSemanticObjectsSettings = getReachableSemanticObjectsSettings;
|
|
197
|
+
const manageSemanticObjectsForCurrentUser = function (semanticObject, dataModelPath, settings) {
|
|
198
|
+
var _settings$appComponen;
|
|
199
|
+
const property = dataModelPath.targetObject;
|
|
200
|
+
const internalDataModel = settings.models.internal || ((_settings$appComponen = settings.appComponent) === null || _settings$appComponen === void 0 ? void 0 : _settings$appComponen.getModel("internal"));
|
|
201
|
+
const semanticObjectsCurrentUserCanNavigateTo = internalDataModel === null || internalDataModel === void 0 ? void 0 : internalDataModel.getProperty("/semanticObjects");
|
|
202
|
+
const propertySemanticObjectList = getSemanticObjectsAndQualifierMap(property);
|
|
203
|
+
|
|
204
|
+
// semantic object is in navigation
|
|
205
|
+
const propertyWithSemanticObjectFromNavigation = getPropertyWithSemanticObject(dataModelPath);
|
|
206
|
+
if (isNavigationProperty(propertyWithSemanticObjectFromNavigation)) {
|
|
207
|
+
var _propertyWithSemantic, _propertyWithSemantic2;
|
|
208
|
+
const semanticObjectExpression = getExpressionFromAnnotation(propertyWithSemanticObjectFromNavigation === null || propertyWithSemanticObjectFromNavigation === void 0 ? void 0 : (_propertyWithSemantic = propertyWithSemanticObjectFromNavigation.annotations) === null || _propertyWithSemantic === void 0 ? void 0 : (_propertyWithSemantic2 = _propertyWithSemantic.Common) === null || _propertyWithSemantic2 === void 0 ? void 0 : _propertyWithSemantic2.SemanticObject);
|
|
209
|
+
const semanticObjectValue = compileExpression(semanticObjectExpression);
|
|
210
|
+
propertySemanticObjectList.semanticObjectsExpressionList.push(semanticObjectExpression);
|
|
211
|
+
propertySemanticObjectList.semanticObjectsList.push(semanticObjectValue);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// custom semanticObject from field property
|
|
215
|
+
if (semanticObject !== undefined && semanticObject !== "") {
|
|
216
|
+
if (semanticObject[0] === "[") {
|
|
217
|
+
const customSemanticObjects = JSON.parse(semanticObject);
|
|
218
|
+
customSemanticObjects.forEach(internalSemanticObject => {
|
|
219
|
+
propertySemanticObjectList.semanticObjectsList.push(internalSemanticObject);
|
|
220
|
+
});
|
|
221
|
+
} else {
|
|
222
|
+
propertySemanticObjectList.semanticObjectsList.push(semanticObject);
|
|
223
|
+
// The semanticObject property of the field contains a formatter or a binding expression
|
|
224
|
+
if (semanticObject.startsWith("{") || semanticObject.startsWith("{=")) {
|
|
225
|
+
const semanticObjectExpressionFromField = resolveBindingString(semanticObject);
|
|
226
|
+
propertySemanticObjectList.semanticObjectsExpressionList.push(semanticObjectExpressionFromField);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return getReachableSemanticObjectsSettings(semanticObjectsCurrentUserCanNavigateTo, propertySemanticObjectList);
|
|
231
|
+
};
|
|
232
|
+
_exports.manageSemanticObjectsForCurrentUser = manageSemanticObjectsForCurrentUser;
|
|
89
233
|
return _exports;
|
|
90
234
|
}, false);
|
|
91
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREeW5hbWljUGF0aEZyb21TZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbU9iamVjdFJlZ2V4IiwibWF0Y2giLCJsZW5ndGgiLCJoYXNTZW1hbnRpY09iamVjdCIsInByb3BlcnR5IiwiX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsImtleSIsInRlcm0iLCJnZXRTZW1hbnRpY09iamVjdHMiLCJzZW1hbnRpY09iamVjdHMiLCJwdXNoIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInNlbWFudGljT2JqZWN0TWFwcGluZ3MiLCJnZXRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsInNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTZW1hbnRpY09iamVjdEhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0U2VtYW50aWNPYmplY3QsXG5cdFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5cbi8qKlxuICogR2V0IHRoZSBwYXRoIG9mIHRoZSBzZW1hbnRpYyBPYmplY3QgaWYgaXQgaXMgYSBkeW5hbWljIFNlbWFudGljT2JqZWN0LlxuICpcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBUaGUgdmFsdWUgb2YgdGhlIENvbW1vbi5TZW1hbnRpY09iamVjdCBhbm5vdGF0aW9uLlxuICogQHJldHVybnMgIFRoZSBwYXRoIG9mIHRoZSBzZW1hbnRpYyBPYmplY3QgaWYgaXQgaXMgYSBkeW5hbWljIFNlbWFudGljT2JqZWN0IG51bGwgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0RHluYW1pY1BhdGhGcm9tU2VtYW50aWNPYmplY3QgPSAoc2VtYW50aWNPYmplY3Q6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCBudWxsID0+IHtcblx0Y29uc3QgZHluYW1pY1NlbU9iamVjdFJlZ2V4ID0gc2VtYW50aWNPYmplY3Q/Lm1hdGNoKC97KC4qPyl9Lyk7XG5cdGlmIChkeW5hbWljU2VtT2JqZWN0UmVnZXg/Lmxlbmd0aCAmJiBkeW5hbWljU2VtT2JqZWN0UmVnZXgubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBkeW5hbWljU2VtT2JqZWN0UmVnZXhbMV07XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm9wZXJ0eSBvciBhIE5hdmlnYXRpb25Qcm9wZXJ0eSBoYXMgYSBzZW1hbnRpYyBvYmplY3QgZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSk6IGJvb2xlYW4ge1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZDtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldPy50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3RbXSA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZDtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldPy50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzLnB1c2goX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZW1hbnRpY09iamVjdHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkpOiBTZW1hbnRpY09iamVjdE1hcHBpbmdbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0TWFwcGluZ3MgPSBbXTtcblx0Y29uc3QgX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMgPSBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQ7XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRpZiAoX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XT8udGVybSA9PT0gQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmdzLnB1c2goX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZW1hbnRpY09iamVjdE1hcHBpbmdzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSk6IFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW10ge1xuXHRjb25zdCBzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZDtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldPy50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMucHVzaChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zO1xufTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNQSxnQ0FBZ0MsR0FBSUMsY0FBNkIsSUFBb0I7SUFDakcsTUFBTUMscUJBQXFCLEdBQUdELGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFRSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQzlELElBQUlELHFCQUFxQixhQUFyQkEscUJBQXFCLGVBQXJCQSxxQkFBcUIsQ0FBRUUsTUFBTSxJQUFJRixxQkFBcUIsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RSxPQUFPRixxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFDQSxPQUFPLElBQUk7RUFDWixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUcsaUJBQWlCLEdBQUcsVUFBVUMsUUFBdUMsRUFBVztJQUFBO0lBQzVGLE1BQU1DLDBCQUEwQiw0QkFBR0QsUUFBUSxDQUFDRSxXQUFXLDBEQUFwQixzQkFBc0JDLE1BQTRDO0lBQ3JHLElBQUlGLDBCQUEwQixFQUFFO01BQy9CLEtBQUssTUFBTUcsR0FBRyxJQUFJSCwwQkFBMEIsRUFBRTtRQUFBO1FBQzdDLElBQUksMEJBQUFBLDBCQUEwQixDQUFDRyxHQUFHLENBQUMsMERBQS9CLHNCQUFpQ0MsSUFBSSxxREFBeUMsRUFBRTtVQUNuRixPQUFPLElBQUk7UUFDWjtNQUNEO0lBQ0Q7SUFDQSxPQUFPLEtBQUs7RUFDYixDQUFDO0VBQUM7RUFFSyxNQUFNQyxrQkFBa0IsR0FBRyxVQUFVTixRQUF1QyxFQUFvQjtJQUFBO0lBQ3RHLE1BQU1PLGVBQWlDLEdBQUcsRUFBRTtJQUM1QyxNQUFNTiwwQkFBMEIsNkJBQUdELFFBQVEsQ0FBQ0UsV0FBVywyREFBcEIsdUJBQXNCQyxNQUE0QztJQUNyRyxJQUFJRiwwQkFBMEIsRUFBRTtNQUMvQixLQUFLLE1BQU1HLEdBQUcsSUFBSUgsMEJBQTBCLEVBQUU7UUFBQTtRQUM3QyxJQUFJLDJCQUFBQSwwQkFBMEIsQ0FBQ0csR0FBRyxDQUFDLDJEQUEvQix1QkFBaUNDLElBQUkscURBQXlDLEVBQUU7VUFDbkZFLGVBQWUsQ0FBQ0MsSUFBSSxDQUFDUCwwQkFBMEIsQ0FBQ0csR0FBRyxDQUFDLENBQUM7UUFDdEQ7TUFDRDtJQUNEO0lBQ0EsT0FBT0csZUFBZTtFQUN2QixDQUFDO0VBQUM7RUFFSyxNQUFNRSx5QkFBeUIsR0FBRyxVQUFVVCxRQUF1QyxFQUEyQjtJQUFBO0lBQ3BILE1BQU1VLHNCQUFzQixHQUFHLEVBQUU7SUFDakMsTUFBTVQsMEJBQTBCLDZCQUFHRCxRQUFRLENBQUNFLFdBQVcsMkRBQXBCLHVCQUFzQkMsTUFBNEM7SUFDckcsSUFBSUYsMEJBQTBCLEVBQUU7TUFDL0IsS0FBSyxNQUFNRyxHQUFHLElBQUlILDBCQUEwQixFQUFFO1FBQUE7UUFDN0MsSUFBSSwyQkFBQUEsMEJBQTBCLENBQUNHLEdBQUcsQ0FBQywyREFBL0IsdUJBQWlDQyxJQUFJLDREQUFnRCxFQUFFO1VBQzFGSyxzQkFBc0IsQ0FBQ0YsSUFBSSxDQUFDUCwwQkFBMEIsQ0FBQ0csR0FBRyxDQUFDLENBQUM7UUFDN0Q7TUFDRDtJQUNEO0lBQ0EsT0FBT00sc0JBQXNCO0VBQzlCLENBQUM7RUFBQztFQUVLLE1BQU1DLG1DQUFtQyxHQUFHLFVBQVVYLFFBQXVDLEVBQXNDO0lBQUE7SUFDekksTUFBTVksZ0NBQWdDLEdBQUcsRUFBRTtJQUMzQyxNQUFNWCwwQkFBMEIsNkJBQUdELFFBQVEsQ0FBQ0UsV0FBVywyREFBcEIsdUJBQXNCQyxNQUE0QztJQUNyRyxJQUFJRiwwQkFBMEIsRUFBRTtNQUMvQixLQUFLLE1BQU1HLEdBQUcsSUFBSUgsMEJBQTBCLEVBQUU7UUFBQTtRQUM3QyxJQUFJLDJCQUFBQSwwQkFBMEIsQ0FBQ0csR0FBRyxDQUFDLDJEQUEvQix1QkFBaUNDLElBQUksdUVBQTJELEVBQUU7VUFDckdPLGdDQUFnQyxDQUFDSixJQUFJLENBQUNQLDBCQUEwQixDQUFDRyxHQUFHLENBQUMsQ0FBQztRQUN2RTtNQUNEO0lBQ0Q7SUFDQSxPQUFPUSxnQ0FBZ0M7RUFDeEMsQ0FBQztFQUFDO0VBQUE7QUFBQSJ9
|
|
235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREeW5hbWljUGF0aEZyb21TZW1hbnRpY09iamVjdCIsInNlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbU9iamVjdFJlZ2V4IiwibWF0Y2giLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaGFzU2VtYW50aWNPYmplY3QiLCJwcm9wZXJ0eSIsIl9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJrZXkiLCJ0ZXJtIiwiZ2V0U2VtYW50aWNPYmplY3RzIiwic2VtYW50aWNPYmplY3RzIiwiYW5ub3RhdGlvbiIsImlzQW5ub3RhdGlvbk9mVGVybSIsInB1c2giLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwic2VtYW50aWNPYmplY3RNYXBwaW5ncyIsImdldFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJnZXRQcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdCIsInRhcmdldE9iamVjdCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibmF2UHJvcGVydHkiLCJjb250ZXh0TG9jYXRpb24iLCJmaW5kIiwiY29udGV4dE5hdlByb3AiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJnZXRTZW1hbnRpY09iamVjdHNBbmRRdWFsaWZpZXJNYXAiLCJxdWFsaWZpZXJNYXAiLCJzZW1hbnRpY09iamVjdHNMaXN0Iiwic2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QiLCJ1bmRlZmluZWQiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb24iLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJjb21waWxlZFNlbWFudGljT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJpbmNsdWRlcyIsInF1YWxpZmllciIsImdldFJlYWNoYWJsZVNlbWFudGljT2JqZWN0c1NldHRpbmdzIiwic2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvIiwic2VtYW50aWNPYmplY3RMaXN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QiLCJyZXN1bHQiLCJhY3R1YWxTZW1hbnRpY09iamVjdCIsImZvckVhY2giLCJfdHlwZSIsImhhc1JlYWNoYWJsZVN0YXRpY1NlbWFudGljT2JqZWN0IiwiZHluYW1pY1NlbWFudGljT2JqZWN0cyIsIm1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyIiwiZGF0YU1vZGVsUGF0aCIsInNldHRpbmdzIiwiaW50ZXJuYWxEYXRhTW9kZWwiLCJtb2RlbHMiLCJpbnRlcm5hbCIsImFwcENvbXBvbmVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCIsInByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0RnJvbU5hdmlnYXRpb24iLCJpc05hdmlnYXRpb25Qcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0Iiwic2VtYW50aWNPYmplY3RWYWx1ZSIsImN1c3RvbVNlbWFudGljT2JqZWN0cyIsIkpTT04iLCJwYXJzZSIsImludGVybmFsU2VtYW50aWNPYmplY3QiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb25Gcm9tRmllbGQiLCJyZXNvbHZlQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiU2VtYW50aWNPYmplY3RIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdFNlbWFudGljT2JqZWN0LFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBEYXRhUG9pbnRUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRyZXNvbHZlQmluZGluZ1N0cmluZyxcblx0dHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sXG5cdHR5cGUgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5cbnR5cGUgUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eSA9IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIEdldCB0aGUgcGF0aCBvZiB0aGUgc2VtYW50aWMgb2JqZWN0IGlmIGl0IGlzIGEgZHluYW1pYyBTZW1hbnRpY09iamVjdC5cbiAqXG4gKiBAcGFyYW0gc2VtYW50aWNPYmplY3QgVGhlIHZhbHVlIG9mIHRoZSBDb21tb24uU2VtYW50aWNPYmplY3QgYW5ub3RhdGlvbi5cbiAqIEByZXR1cm5zICBUaGUgcGF0aCBvZiB0aGUgc2VtYW50aWMgb2JqZWN0IGlmIGl0IGlzIGEgZHluYW1pYyBTZW1hbnRpY09iamVjdCBudWxsIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldER5bmFtaWNQYXRoRnJvbVNlbWFudGljT2JqZWN0ID0gKHNlbWFudGljT2JqZWN0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcblx0Y29uc3QgZHluYW1pY1NlbU9iamVjdFJlZ2V4ID0gc2VtYW50aWNPYmplY3Q/Lm1hdGNoKC97KC4qPyl9Lyk7XG5cdGlmIChzZW1hbnRpY09iamVjdD8uc3RhcnRzV2l0aChcIns9XCIpKSB7XG5cdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0O1xuXHR9XG5cdGlmIChkeW5hbWljU2VtT2JqZWN0UmVnZXg/Lmxlbmd0aCAmJiBkeW5hbWljU2VtT2JqZWN0UmVnZXgubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBkeW5hbWljU2VtT2JqZWN0UmVnZXhbMV07XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBwcm9wZXJ0eSBvciBhIE5hdmlnYXRpb25Qcm9wZXJ0eSBoYXMgYSBzZW1hbnRpYyBvYmplY3QgZGVmaW5lZCBvciBub3QuXG4gKlxuICogQHBhcmFtIHByb3BlcnR5IFRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBpdCBoYXMgYSBzZW1hbnRpYyBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1NlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlKTogYm9vbGVhbiB7XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldPy50ZXJtID09PSBDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0czogU2VtYW50aWNPYmplY3RbXSA9IFtdO1xuXHRjb25zdCBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucyA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24gYXMgUmVjb3JkPHN0cmluZywgeyB0ZXJtPzogQ29tbW9uQW5ub3RhdGlvblRlcm1zOyBxdWFsaWZpZXI/OiBzdHJpbmcgfT47XG5cdGlmIChfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9ucykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnNba2V5XTtcblx0XHRcdGlmIChpc0Fubm90YXRpb25PZlRlcm08U2VtYW50aWNPYmplY3Q+KGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzLnB1c2goYW5ub3RhdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzZW1hbnRpY09iamVjdHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyA9IGZ1bmN0aW9uIChwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkpOiBTZW1hbnRpY09iamVjdE1hcHBpbmdbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0TWFwcGluZ3M6IFNlbWFudGljT2JqZWN0TWFwcGluZ1tdID0gW107XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldO1xuXHRcdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxTZW1hbnRpY09iamVjdE1hcHBpbmc+KGFubm90YXRpb24sIENvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmcpKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChhbm5vdGF0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5KTogU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNbXSB7XG5cdGNvbnN0IHNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zOiBTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tdID0gW107XG5cdGNvbnN0IF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbiBhcyBSZWNvcmQ8c3RyaW5nLCB7IHRlcm0/OiBDb21tb25Bbm5vdGF0aW9uVGVybXM7IHF1YWxpZmllcj86IHN0cmluZyB9Pjtcblx0aWYgKF9wcm9wZXJ0eUNvbW1vbkFubm90YXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gX3Byb3BlcnR5Q29tbW9uQW5ub3RhdGlvbnMpIHtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSBfcHJvcGVydHlDb21tb25Bbm5vdGF0aW9uc1trZXldO1xuXHRcdFx0aWYgKGlzQW5ub3RhdGlvbk9mVGVybTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz4oYW5ub3RhdGlvbiwgQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zKSkge1xuXHRcdFx0XHRzZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucy5wdXNoKGFubm90YXRpb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM7XG59O1xuXG4vKipcbiAqIEdldCB0aGUgcHJvcGVydHkgb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgaW4gIGl0cyByZWxhdGl2ZSBwYXRoIHRoYXQgaG9sZHMgc2VtYW50aWNPYmplY3QgYW5ub3RhdGlvbiBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGhcbiAqIEByZXR1cm5zIEEgcHJvcGVydHkgb3IgYSBOYXZQcm9wZXJ0eSBvciB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRkYXRhTW9kZWxPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5IHwgTmF2aWdhdGlvblByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB8IERhdGFQb2ludFR5cGU+XG4pOiBQcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5IHtcblx0bGV0IHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0OiBQcm9wZXJ0eU9yTmF2aWdhdGlvblByb3BlcnR5O1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgJiYgaGFzU2VtYW50aWNPYmplY3QoZGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QpKSB7XG5cdFx0cHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0fSBlbHNlIGlmIChkYXRhTW9kZWxPYmplY3RQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHQvLyB0aGVyZSBhcmUgbm8gc2VtYW50aWMgb2JqZWN0cyBvbiB0aGUgcHJvcGVydHkgaXRzZWxmIHNvIHdlIGxvb2sgZm9yIHNvbWUgb24gbmF2IHByb3BlcnRpZXNcblx0XHRmb3IgKGNvbnN0IG5hdlByb3BlcnR5IG9mIGRhdGFNb2RlbE9iamVjdFBhdGgubmF2aWdhdGlvblByb3BlcnRpZXMpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0IWRhdGFNb2RlbE9iamVjdFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kKFxuXHRcdFx0XHRcdChjb250ZXh0TmF2UHJvcCkgPT4gY29udGV4dE5hdlByb3AuZnVsbHlRdWFsaWZpZWROYW1lID09PSBuYXZQcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdFx0KSAmJlxuXHRcdFx0XHQhcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0aGFzU2VtYW50aWNPYmplY3QobmF2UHJvcGVydHkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgPSBuYXZQcm9wZXJ0eTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0O1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHNlbWFudGljT2JqZWN0IGNvbXBpbGUgYmluZGluZyBmcm9tIG1ldGFkYXRhIGFuZCBhIG1hcCB0byB0aGUgcXVhbGlmaWVycy5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgVGhlIHByb3BlcnR5IHRoYXQgaG9sZHMgc2VtYW50aWNPYmplY3QgYW5ub3RhdGFpb25zIGlmIGl0IGV4aXN0c1xuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgc2VtYW50aWNPYmplY3RMaXN0IGFuZCBxdWFsaWZpZXJNYXBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlbWFudGljT2JqZWN0c0FuZFF1YWxpZmllck1hcCA9IGZ1bmN0aW9uIChwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdDogUHJvcGVydHlPck5hdmlnYXRpb25Qcm9wZXJ0eSk6IHtcblx0c2VtYW50aWNPYmplY3RzTGlzdDogc3RyaW5nW107XG5cdHNlbWFudGljT2JqZWN0c0V4cHJlc3Npb25MaXN0OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdO1xuXHRxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcbn0ge1xuXHRjb25zdCBxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPiA9IHt9O1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNMaXN0OiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSA9IFtdO1xuXHRpZiAocHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdGZvciAoY29uc3Qgc2VtYW50aWNPYmplY3Qgb2YgZ2V0U2VtYW50aWNPYmplY3RzKHByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0KSkge1xuXHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uID0gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHNlbWFudGljT2JqZWN0KTtcblx0XHRcdGNvbnN0IGNvbXBpbGVkU2VtYW50aWNPYmplY3QgPSBjb21waWxlRXhwcmVzc2lvbihzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0Ly8gdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIG1ha2Ugc3VyZSBub3QgdG8gYWRkIHR3aWNlIHRoZSBzZW1hbnRpY09iamVjdCBvdGhlcndpc2UgdGhlIG1kY0xpbmsgY3Jhc2hlc1xuXHRcdFx0aWYgKGNvbXBpbGVkU2VtYW50aWNPYmplY3QgJiYgIXNlbWFudGljT2JqZWN0c0xpc3QuaW5jbHVkZXMoY29tcGlsZWRTZW1hbnRpY09iamVjdCkpIHtcblx0XHRcdFx0cXVhbGlmaWVyTWFwW3NlbWFudGljT2JqZWN0LnF1YWxpZmllciB8fCBcIlwiXSA9IGNvbXBpbGVkU2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0c0xpc3QucHVzaChjb21waWxlZFNlbWFudGljT2JqZWN0KTtcblx0XHRcdFx0c2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4geyBzZW1hbnRpY09iamVjdHNMaXN0LCBzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdCwgcXVhbGlmaWVyTWFwIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBjYW4gbmF2aWdhdGUgdG8gc2VtYW50aWMgb2JqZWN0cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbGlzdHMuXG4gKlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0c0N1cnJlbnRVc2VyQ2FuTmF2aWdhdGVUbyBUaGUgbGlzdCBvZiBzZW1hbnRpYyBvYmplY3RzIHRoZSBjdXJyZW50IHVzZXIgY2FuIG5hdmlnYXRlIHRvLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdCBBbiBvYmplY3QgY29udGFpbmluZyBsaXN0cyBhbmQgbWFwcyBvZiBzZW1hbnRpYyBvYmplY3RzLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0IFRoZSBsaXN0IG9mIGFsbCBzZW1hbnRpYyBvYmplY3RzLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdCBUaGUgbGlzdCBvZiBleHByZXNzaW9ucyBmb3Igc2VtYW50aWMgb2JqZWN0cy5cbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdExpc3QucXVhbGlmaWVyTWFwIEEgbWFwIG9mIHF1YWxpZmllcnMgdG8gY29tcGlsZWQgZXhwcmVzc2lvbnMuXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBzdGF0aWMgYW5kIGR5bmFtaWMgc2VtYW50aWMgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFJlYWNoYWJsZVNlbWFudGljT2JqZWN0c1NldHRpbmdzID0gZnVuY3Rpb24gKFxuXHRzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG86IHN0cmluZ1tdLFxuXHRzZW1hbnRpY09iamVjdExpc3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdHNMaXN0OiBzdHJpbmdbXTtcblx0XHRzZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXTtcblx0XHRxdWFsaWZpZXJNYXA6IFJlY29yZDxzdHJpbmcsIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPjtcblx0fVxuKTogeyBoYXNSZWFjaGFibGVTdGF0aWNTZW1hbnRpY09iamVjdDogYm9vbGVhbjsgZHluYW1pY1NlbWFudGljT2JqZWN0czogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSB9IHtcblx0Y29uc3QgZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3Q6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gPSBbXTtcblx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRpZiAoc2VtYW50aWNPYmplY3RzQ3VycmVudFVzZXJDYW5OYXZpZ2F0ZVRvKSB7XG5cdFx0Zm9yIChjb25zdCBzZW1hbnRpY09iamVjdCBvZiBzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8pIHtcblx0XHRcdGZvciAoY29uc3QgYWN0dWFsU2VtYW50aWNPYmplY3Qgb2Ygc2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0xpc3QpIHtcblx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ID09PSBhY3R1YWxTZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdHJlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdC5mb3JFYWNoKChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pID0+IHtcblx0XHRcdGlmIChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24uX3R5cGUgIT09IFwiQ29uc3RhbnRcIikge1xuXHRcdFx0XHRkeW5hbWljU2VtYW50aWNPYmplY3RzTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHsgaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3Q6IHJlc3VsdCwgZHluYW1pY1NlbWFudGljT2JqZWN0czogZHluYW1pY1NlbWFudGljT2JqZWN0c0xpc3QgfTtcbn07XG5cbi8qKlxuICogQ2hlY2sgdGhlIHVzZXIgcmlnaHRzIHRvIG5hdmlnYXRlIHRvIHRoZSBzZW1hbnRpYyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBUaGUgc2VtYW50aWMgb2JqZWN0IG5hbWVcbiAqIEBwYXJhbSBkYXRhTW9kZWxQYXRoIFRoZSBEYXRhTW9kZWxPYmplY3RQYXRoIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHNldHRpbmdzIFRoZSBUZW1wbGF0ZVByb2Nlc3NvclNldHRpbmdzIG9mIHRoZSBpbnRlcm5hbCBmaWVsZFxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgc2VtYW50aWNPYmplY3RMaXN0IGFuZCBxdWFsaWZpZXJNYXBcbiAqL1xuZXhwb3J0IGNvbnN0IG1hbmFnZVNlbWFudGljT2JqZWN0c0ZvckN1cnJlbnRVc2VyID0gZnVuY3Rpb24gKFxuXHRzZW1hbnRpY09iamVjdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRkYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pixcblx0c2V0dGluZ3M6IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3Ncbik6IHsgaGFzUmVhY2hhYmxlU3RhdGljU2VtYW50aWNPYmplY3Q6IGJvb2xlYW47IGR5bmFtaWNTZW1hbnRpY09iamVjdHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+W10gfSB7XG5cdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0ITtcblx0Y29uc3QgaW50ZXJuYWxEYXRhTW9kZWwgPSBzZXR0aW5ncy5tb2RlbHMuaW50ZXJuYWwgfHwgc2V0dGluZ3MuYXBwQ29tcG9uZW50Py5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRjb25zdCBzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8gPSBpbnRlcm5hbERhdGFNb2RlbD8uZ2V0UHJvcGVydHkoXCIvc2VtYW50aWNPYmplY3RzXCIpO1xuXHRjb25zdCBwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdCA9IGdldFNlbWFudGljT2JqZWN0c0FuZFF1YWxpZmllck1hcChwcm9wZXJ0eSk7XG5cblx0Ly8gc2VtYW50aWMgb2JqZWN0IGlzIGluIG5hdmlnYXRpb25cblx0Y29uc3QgcHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3RGcm9tTmF2aWdhdGlvbiA9IGdldFByb3BlcnR5V2l0aFNlbWFudGljT2JqZWN0KGRhdGFNb2RlbFBhdGgpO1xuXHRpZiAoaXNOYXZpZ2F0aW9uUHJvcGVydHkocHJvcGVydHlXaXRoU2VtYW50aWNPYmplY3RGcm9tTmF2aWdhdGlvbikpIHtcblx0XHRjb25zdCBzZW1hbnRpY09iamVjdEV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRwcm9wZXJ0eVdpdGhTZW1hbnRpY09iamVjdEZyb21OYXZpZ2F0aW9uPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdFxuXHRcdCk7XG5cdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RWYWx1ZSA9IGNvbXBpbGVFeHByZXNzaW9uKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzRXhwcmVzc2lvbkxpc3QucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0LnNlbWFudGljT2JqZWN0c0xpc3QucHVzaChzZW1hbnRpY09iamVjdFZhbHVlIGFzIHN0cmluZyk7XG5cdH1cblxuXHQvLyBjdXN0b20gc2VtYW50aWNPYmplY3QgZnJvbSBmaWVsZCBwcm9wZXJ0eVxuXHRpZiAoc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJiBzZW1hbnRpY09iamVjdCAhPT0gXCJcIikge1xuXHRcdGlmIChzZW1hbnRpY09iamVjdFswXSA9PT0gXCJbXCIpIHtcblx0XHRcdGNvbnN0IGN1c3RvbVNlbWFudGljT2JqZWN0cyA9IEpTT04ucGFyc2Uoc2VtYW50aWNPYmplY3QpO1xuXHRcdFx0Y3VzdG9tU2VtYW50aWNPYmplY3RzLmZvckVhY2goKGludGVybmFsU2VtYW50aWNPYmplY3Q6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNMaXN0LnB1c2goaW50ZXJuYWxTZW1hbnRpY09iamVjdCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcGVydHlTZW1hbnRpY09iamVjdExpc3Quc2VtYW50aWNPYmplY3RzTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0KTtcblx0XHRcdC8vIFRoZSBzZW1hbnRpY09iamVjdCBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgY29udGFpbnMgYSBmb3JtYXR0ZXIgb3IgYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdGlmIChzZW1hbnRpY09iamVjdC5zdGFydHNXaXRoKFwie1wiKSB8fCBzZW1hbnRpY09iamVjdC5zdGFydHNXaXRoKFwiez1cIikpIHtcblx0XHRcdFx0Y29uc3Qgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uRnJvbUZpZWxkID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoc2VtYW50aWNPYmplY3QpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRcdFx0XHRwcm9wZXJ0eVNlbWFudGljT2JqZWN0TGlzdC5zZW1hbnRpY09iamVjdHNFeHByZXNzaW9uTGlzdC5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbkZyb21GaWVsZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnZXRSZWFjaGFibGVTZW1hbnRpY09iamVjdHNTZXR0aW5ncyhzZW1hbnRpY09iamVjdHNDdXJyZW50VXNlckNhbk5hdmlnYXRlVG8sIHByb3BlcnR5U2VtYW50aWNPYmplY3RMaXN0KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUEsZ0NBQWdDLEdBQUlDLGNBQXNCLElBQW9CO0lBQzFGLE1BQU1DLHFCQUFxQixHQUFHRCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM5RCxJQUFJRixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDckMsT0FBT0gsY0FBYztJQUN0QjtJQUNBLElBQUlDLHFCQUFxQixhQUFyQkEscUJBQXFCLGVBQXJCQSxxQkFBcUIsQ0FBRUcsTUFBTSxJQUFJSCxxQkFBcUIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN0RSxPQUFPSCxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDaEM7SUFDQSxPQUFPLElBQUk7RUFDWixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBO0VBTU8sTUFBTUksaUJBQWlCLEdBQUcsVUFBVUMsUUFBZ0YsRUFBVztJQUFBO0lBQ3JJLE1BQU1DLDBCQUEwQiw0QkFBR0QsUUFBUSxDQUFDRSxXQUFXLDBEQUFwQixzQkFBc0JDLE1BQThFO0lBQ3ZJLElBQUlGLDBCQUEwQixFQUFFO01BQy9CLEtBQUssTUFBTUcsR0FBRyxJQUFJSCwwQkFBMEIsRUFBRTtRQUFBO1FBQzdDLElBQUksMEJBQUFBLDBCQUEwQixDQUFDRyxHQUFHLENBQUMsMERBQS9CLHNCQUFpQ0MsSUFBSSxxREFBeUMsRUFB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
|