@sapui5/sap.fe.core 1.141.2 → 1.142.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
SAP UI development toolkit for HTML5 (SAPUI5)
|
|
7
7
|
(c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
8
8
|
</copyright>
|
|
9
|
-
<version>1.
|
|
9
|
+
<version>1.142.1</version>
|
|
10
10
|
|
|
11
11
|
<documentation>UI5 library: sap.fe.core</documentation>
|
|
12
12
|
|
|
@@ -30,6 +30,9 @@
|
|
|
30
30
|
<dependency>
|
|
31
31
|
<libraryName>sap.m</libraryName>
|
|
32
32
|
</dependency>
|
|
33
|
+
<dependency>
|
|
34
|
+
<libraryName>sap.ui.fl</libraryName>
|
|
35
|
+
</dependency>
|
|
33
36
|
<dependency>
|
|
34
37
|
<libraryName>sap.ui.layout</libraryName>
|
|
35
38
|
<lazy>true</lazy>
|
|
@@ -73,14 +73,38 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
const ActionRuntime = {
|
|
76
|
+
/**
|
|
77
|
+
* Checks if a required parameter field is empty.
|
|
78
|
+
* @param parameterInfo Information identifying an action parameter
|
|
79
|
+
* @returns True if the field is empty, false otherwise
|
|
80
|
+
*/
|
|
81
|
+
isRequiredFieldEmpty: function (parameterInfo) {
|
|
82
|
+
const fieldId = parameterInfo.field.getId();
|
|
83
|
+
const allMessages = Messaging.getMessageModel().getData();
|
|
84
|
+
const relevantMessages = allMessages.filter(msg => msg.getControlIds().some(controlId => controlId.includes(fieldId)));
|
|
85
|
+
if (relevantMessages.length > 0) {
|
|
86
|
+
return false;
|
|
87
|
+
} else if (parameterInfo.isMultiValue) {
|
|
88
|
+
return parameterInfo.value === undefined || Array.isArray(parameterInfo.value) && parameterInfo.value.length === 0;
|
|
89
|
+
} else {
|
|
90
|
+
const fieldValue = parameterInfo.field.getValue();
|
|
91
|
+
const isFieldArray = Array.isArray(parameterInfo.field.getValue());
|
|
92
|
+
if (isFieldArray) {
|
|
93
|
+
// only first value check is enough as the field value comes on [0] rest of the array includes currency and currency code
|
|
94
|
+
// both of which can or cannot be null, so we shall check only the field value
|
|
95
|
+
return fieldValue[0] === null || fieldValue[0] === "";
|
|
96
|
+
}
|
|
97
|
+
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
98
|
+
}
|
|
99
|
+
},
|
|
76
100
|
/**
|
|
77
101
|
* Adds error messages for an action parameter field to the message manager.
|
|
78
102
|
* @param messageParameters Information identifying an action parameter and messages referring to this parameter
|
|
79
103
|
*/
|
|
80
104
|
_addMessageForActionParameter: function (messageParameters) {
|
|
81
|
-
|
|
105
|
+
const messages = messageParameters.map(messageParameter => {
|
|
82
106
|
const binding = messageParameter.actionParameterInfo.field.getBinding(messageParameter.actionParameterInfo.isMultiValue ? "items" : "value");
|
|
83
|
-
|
|
107
|
+
const message = new Message({
|
|
84
108
|
message: messageParameter.message,
|
|
85
109
|
type: MessageType.Error,
|
|
86
110
|
processor: binding?.getModel() ?? undefined,
|
|
@@ -88,7 +112,26 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core
|
|
|
88
112
|
persistent: true,
|
|
89
113
|
target: binding?.getResolvedPath()
|
|
90
114
|
});
|
|
91
|
-
|
|
115
|
+
|
|
116
|
+
// Attach change handler to validate value and remove message if field is not empty
|
|
117
|
+
if (binding) {
|
|
118
|
+
const changeHandler = () => {
|
|
119
|
+
// Check if the field is no longer empty using the extracted validation function
|
|
120
|
+
if (!ActionRuntime.isRequiredFieldEmpty(messageParameter.actionParameterInfo)) {
|
|
121
|
+
// Remove the message
|
|
122
|
+
Messaging.removeMessages([message]);
|
|
123
|
+
// Detach the change handler
|
|
124
|
+
binding.detachChange(changeHandler);
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
// There might be sceanrios like value help out parameters where the field is not explicitly changed instead property value changes due to setProperty.
|
|
128
|
+
// In such cases, field change is not called and is not a reliable event to validate the field value again.
|
|
129
|
+
// So we use value/items binding change to re-validate the property value to remove the messages.
|
|
130
|
+
binding.attachChange(changeHandler);
|
|
131
|
+
}
|
|
132
|
+
return message;
|
|
133
|
+
});
|
|
134
|
+
Messaging.addMessages(messages);
|
|
92
135
|
},
|
|
93
136
|
/**
|
|
94
137
|
* Checks if all required action parameters contain data and checks for all action parameters if the
|
|
@@ -100,25 +143,7 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core
|
|
|
100
143
|
validateProperties: async function (actionParameterInfos, resourceModel) {
|
|
101
144
|
await Promise.allSettled(actionParameterInfos.map(actionParameterInfo => actionParameterInfo.validationPromise));
|
|
102
145
|
const requiredParameterInfos = actionParameterInfos.filter(parameterInfo => parameterInfo.field.getRequired && parameterInfo.field.getRequired());
|
|
103
|
-
const
|
|
104
|
-
const emptyRequiredFields = requiredParameterInfos.filter(requiredParameterInfo => {
|
|
105
|
-
const fieldId = requiredParameterInfo.field.getId();
|
|
106
|
-
const relevantMessages = allMessages.filter(msg => msg.getControlIds().some(controlId => controlId.includes(fieldId)));
|
|
107
|
-
if (relevantMessages.length > 0) {
|
|
108
|
-
return false;
|
|
109
|
-
} else if (requiredParameterInfo.isMultiValue) {
|
|
110
|
-
return requiredParameterInfo.value === undefined || !requiredParameterInfo.value.length;
|
|
111
|
-
} else {
|
|
112
|
-
const fieldValue = requiredParameterInfo.field.getValue();
|
|
113
|
-
const isFieldArray = Array.isArray(requiredParameterInfo.field.getValue());
|
|
114
|
-
if (isFieldArray) {
|
|
115
|
-
// only first value check is enough as the field value comes on [0] rest of the array includes currency and currency code
|
|
116
|
-
// both of which can or cannot be null, so we shall check only the field value
|
|
117
|
-
return fieldValue[0] === null || fieldValue[0] === "";
|
|
118
|
-
}
|
|
119
|
-
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
120
|
-
}
|
|
121
|
-
});
|
|
146
|
+
const emptyRequiredFields = requiredParameterInfos.filter(this.isRequiredFieldEmpty);
|
|
122
147
|
/* Message for missing mandatory value of the action parameter */
|
|
123
148
|
if (emptyRequiredFields.length) {
|
|
124
149
|
this._addMessageForActionParameter(emptyRequiredFields.map(actionParameterInfo => ({
|
|
@@ -310,4 +335,4 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core
|
|
|
310
335
|
};
|
|
311
336
|
return ActionRuntime;
|
|
312
337
|
}, false);
|
|
313
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbml0aWFsaXplVGFibGVBY3Rpb25Qcm9wZXJ0aWVzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJhY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInNldFByb3BlcnR5IiwiaGFuZGxlTm9TZWxlY3RlZENvbnRleHRzIiwicHJvbWlzZXMiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJ0aGVuIiwiaGFuZGxlU2VsZWN0ZWRDb250ZXh0cyIsInJlcXVlc3RQcm9taXNlcyIsImhhbmRsZVRhYmxlQ29udGV4dHMiLCJzZWxlY3RlZENvbnRleHRzIiwicHJvcGVydHkiLCJsZW5ndGgiLCJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiZ2V0VmlzaWJsZSIsImhhc0Vycm9yIiwiZ2V0VmFsdWVTdGF0ZSIsInNldFZpc2libGUiLCJmb2N1cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJzQ29udHJvbCIsImFyZ3VtZW50cyIsImFQcm9taXNlcyIsInNBY3Rpb24iLCJhUmVxdWVzdFByb21pc2VzIiwic1Byb3BlcnR5Iiwic2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImdldFByb3BlcnR5IiwiYWxsIiwicmVzdWx0cyIsImZsYXQiLCJzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaCIsIm9WaWV3Iiwib0xpc3RCaW5kaW5nIiwib0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSIsIm9Db250cm9scyIsImNvbnRyb2xzIiwic0tleSIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJvUm93QmluZGluZyIsImdldFJvd0JpbmRpbmciLCJ0YWJsZUFQSSIsImdldEJpbmRpbmdDb250ZXh0IiwiSlNPTiIsInBhcnNlIiwidGFibGVEZWZpbml0aW9uIiwib3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsImlzRWRpdGFibGUiLCJnZXRJc0VkaXRhYmxlIiwib0NvbnRleHQiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwic01ldGFQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRNZXRhUGF0aEZvckNvbnRleHQiLCJzRW50aXR5U2V0IiwiZ2V0Um9vdEVudGl0eVNldFBhdGgiLCJtZXRhQ29udGV4dCIsImdldE1ldGFNb2RlbCIsImdldENvbnRleHQiLCJnZXRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJnZXREaWFnbm9zdGljcyIsIm1lcmdlIiwiZW50aXR5U2V0IiwiZ2V0RW50aXR5U2V0IiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGUiLCJ1cGRhdGVIaWRkZW4iLCJiVXBkYXRlSGlkZGVuIiwiaXNFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiVXBkYXRlSGlkZGVuIiwidmFsdWVPZiIsImlzVXBkYXRlSGlkZGVuIiwic0VkaXRFbmFibGVCaW5kaW5nIiwiZ2V0RWRpdEJ1dHRvbkVuYWJsZWQiLCJkcmFmdFJvb3RQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNTdGlja3lSb290UGF0aCIsImdldFN0aWNreVJvb3RQYXRoIiwic1BhdGgiLCJvUm9vdENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInNIaWRkZW5FeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJlcXVhbCIsImdldEhpZGRlbkV4cHJlc3Npb24iLCJ1cGRhdGVFZGl0TW9kZWxDb250ZXh0Iiwic0JpbmRpbmdFeHByZXNzaW9uIiwib0hpZGRlbkVsZW1lbnQiLCJBbnlFbGVtZW50IiwiYW55VGV4dCIsInNldEJpbmRpbmdDb250ZXh0IiwiYWRkRGVwZW5kZW50IiwiJCRncm91cElkIiwiYXR0YWNoQ2hhbmdlIiwib0V2ZW50Iiwib05ld1ZhbHVlIiwiZ2V0U291cmNlIiwiZ2V0RXh0ZXJuYWxWYWx1ZSIsIm9TZWxlY3RlZENvbnRleHQiLCJzRW5hYmxlbWVudEZpZWxkTmFtZSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGlvblJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyLCBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgX1JlcXVlc3RlZFByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBGaWxlVXBsb2FkZXIgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRFZGl0QnV0dG9uRW5hYmxlZCwgZ2V0SGlkZGVuRXhwcmVzc2lvbiB9IGZyb20gXCIuL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0cGFyYW1ldGVyPzogRWRtQWN0aW9uUGFyYW1ldGVyO1xuXHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQgfCBGaWxlVXBsb2FkZXI7XG5cdGlzTXVsdGlWYWx1ZTogYm9vbGVhbjtcblx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgb2YgYSB0YWJsZSBhY3Rpb24gaW4gdGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQuXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgd2hlcmUgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzIGFyZSBzZXQuXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gZm9yIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGlzIGZvciBhIGNvbnRleHQgbWVudS5cbiAqL1xuZnVuY3Rpb24gaW5pdGlhbGl6ZVRhYmxlQWN0aW9uUHJvcGVydGllcyhpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsIGFjdGlvbjogc3RyaW5nLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IHZvaWQge1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHthY3Rpb259L2FBcHBsaWNhYmxlYCwgW10pO1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHthY3Rpb259L2FOb3RBcHBsaWNhYmxlYCwgW10pO1xuXHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHthY3Rpb259L2JFbmFibGVkRm9yQ29udGV4dE1lbnVgLCBmYWxzZSk7XG5cdH0gZWxzZSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufS9iRW5hYmxlZGAsIGZhbHNlKTtcblx0fVxufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBubyBjb250ZXh0cyBhcmUgc2VsZWN0ZWQgZm9yIGFuIGFjdGlvbi5cbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dCB3aGVyZSB0aGUgYWN0aW9uIHByb3BlcnRpZXMgYXJlIHNldC5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiBmb3Igd2hpY2ggcHJvcGVydGllcyBhcmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0gcHJvbWlzZXMgQW4gYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYWZ0ZXIgc2V0dGluZyB0aGUgYWN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyLlxuICovXG5mdW5jdGlvbiBoYW5kbGVOb1NlbGVjdGVkQ29udGV4dHMoXG5cdGludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YWN0aW9uOiBzdHJpbmcsXG5cdHByb21pc2VzOiBQcm9taXNlPHZvaWRbXT5bXSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHthY3Rpb259YCwge1xuXHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdH0pO1xuXHRwcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShpbnRlcm5hbE1vZGVsQ29udGV4dCwgW10sIGZvckNvbnRleHRNZW51KS50aGVuKCgpID0+IFtdKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyB0aGUgY2FzZSB3aGVuIGNvbnRleHRzIGFyZSBzZWxlY3RlZCBmb3IgYW4gYWN0aW9uLlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IHdoZXJlIHRoZSBhY3Rpb24gcHJvcGVydGllcyBhcmUgc2V0LlxuICogQHBhcmFtIHJlcXVlc3RQcm9taXNlcyBBbiBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBhZnRlciBzZXR0aW5nIHRoZSBhY3Rpb24gcHJvcGVydGllcy5cbiAqIEBwYXJhbSBwcm9taXNlc1x0QW4gYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYWZ0ZXIgc2V0dGluZyB0aGUgYWN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyLlxuICovXG5mdW5jdGlvbiBoYW5kbGVTZWxlY3RlZENvbnRleHRzKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdHJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10sXG5cdHByb21pc2VzOiBQcm9taXNlPHZvaWRbXT5bXSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW5cbik6IHZvaWQge1xuXHRwcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShpbnRlcm5hbE1vZGVsQ29udGV4dCwgcmVxdWVzdFByb21pc2VzLCBmb3JDb250ZXh0TWVudSkudGhlbigoKSA9PiBbXSkpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGFjdGlvbiBlbmFibGVtZW50IGZvciB0YWJsZSBjb250ZXh0cy5cbiAqIEBwYXJhbSBzZWxlY3RlZENvbnRleHRzICBTZWxlY3RlZCBjb250ZXh0cyBmb3IgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBcdEludGVybmFsIG1vZGVsIGNvbnRleHQgd2hlcmUgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzIGFyZSBzZXQuXG4gKiBAcGFyYW0gYWN0aW9uIE5hbWUgb2YgdGhlIGFjdGlvbiBmb3Igd2hpY2ggcHJvcGVydGllcyBhcmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0gcHJvcGVydHkgUHJvcGVydHkgdG8gYmUgY2hlY2tlZCBmb3IgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSByZXF1ZXN0UHJvbWlzZXMgUHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYWZ0ZXIgc2V0dGluZyB0aGUgYWN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgVHJ1ZSBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudSwgZmFsc2UgaWYgaXQgYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqIEBwYXJhbSBwcm9taXNlcyBQ4oCacm9taXNlcyB0byBiZSByZXNvbHZlZCBhZnRlciBzZXR0aW5nIHRoZSBhY3Rpb24gcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlVGFibGVDb250ZXh0cyhcblx0c2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFjdGlvbjogc3RyaW5nLFxuXHRwcm9wZXJ0eTogc3RyaW5nLFxuXHRyZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0cHJvbWlzZXM6IFByb21pc2U8dm9pZFtdPltdXG4pOiB2b2lkIHtcblx0aWYgKCFzZWxlY3RlZENvbnRleHRzLmxlbmd0aCkge1xuXHRcdGhhbmRsZU5vU2VsZWN0ZWRDb250ZXh0cyhpbnRlcm5hbE1vZGVsQ29udGV4dCwgYWN0aW9uLCBwcm9taXNlcywgZm9yQ29udGV4dE1lbnUpO1xuXHR9IGVsc2UgaWYgKHNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdGhhbmRsZVNlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQsIHJlcXVlc3RQcm9taXNlcywgcHJvbWlzZXMsIGZvckNvbnRleHRNZW51KTtcblx0fVxufVxuXG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUgPyBcIml0ZW1zXCIgOiBcInZhbHVlXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpID8/IHVuZGVmaW5lZCwgLy8gZ2V0TW9kZWwoKTogbnVsbCB8IE1vZGVsIH5+PiBwcm9jZXNzb3I/OiBNZXNzYWdlUHJvY2Vzc29yXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcihcblx0XHRcdChwYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHQocGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCkuZ2V0UmVxdWlyZWQgJiZcblx0XHRcdFx0KHBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQpLmdldFJlcXVpcmVkKClcblx0XHQpO1xuXG5cdFx0Y29uc3QgYWxsTWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGNvbnN0IGVtcHR5UmVxdWlyZWRGaWVsZHMgPSByZXF1aXJlZFBhcmFtZXRlckluZm9zLmZpbHRlcigocmVxdWlyZWRQYXJhbWV0ZXJJbmZvKSA9PiB7XG5cdFx0XHRjb25zdCBmaWVsZElkID0gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkLmdldElkKCk7XG5cdFx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRcdG1zZy5nZXRDb250cm9sSWRzKCkuc29tZSgoY29udHJvbElkOiBzdHJpbmcpID0+IGNvbnRyb2xJZC5pbmNsdWRlcyhmaWVsZElkKSlcblx0XHRcdCk7XG5cdFx0XHRpZiAocmVsZXZhbnRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlID09PSB1bmRlZmluZWQgfHwgIXJlcXVpcmVkUGFyYW1ldGVySW5mby52YWx1ZS5sZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaWVsZFZhbHVlID0gKHJlcXVpcmVkUGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdFx0Y29uc3QgaXNGaWVsZEFycmF5ID0gQXJyYXkuaXNBcnJheSgocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpKTtcblx0XHRcdFx0aWYgKGlzRmllbGRBcnJheSkge1xuXHRcdFx0XHRcdC8vIG9ubHkgZmlyc3QgdmFsdWUgY2hlY2sgaXMgZW5vdWdoIGFzIHRoZSBmaWVsZCB2YWx1ZSBjb21lcyBvbiBbMF0gcmVzdCBvZiB0aGUgYXJyYXkgaW5jbHVkZXMgY3VycmVuY3kgYW5kIGN1cnJlbmN5IGNvZGVcblx0XHRcdFx0XHQvLyBib3RoIG9mIHdoaWNoIGNhbiBvciBjYW5ub3QgYmUgbnVsbCwgc28gd2Ugc2hhbGwgY2hlY2sgb25seSB0aGUgZmllbGQgdmFsdWVcblx0XHRcdFx0XHRyZXR1cm4gZmllbGRWYWx1ZVswXSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlWzBdID09PSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGRWYWx1ZSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlID09PSBcIlwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdC8qIE1lc3NhZ2UgZm9yIG1pc3NpbmcgbWFuZGF0b3J5IHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyICovXG5cdFx0aWYgKGVtcHR5UmVxdWlyZWRGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFxuXHRcdFx0XHRlbXB0eVJlcXVpcmVkRmllbGRzLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gKHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBhY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIiwgW1xuXHRcdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UGFyZW50KCk/LmdldEFnZ3JlZ2F0aW9uKFwibGFiZWxcIikgYXMgTGFiZWwpLmdldFRleHQoKVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdH0pKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0LyogQ2hlY2sgdmFsdWUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlcnMgKi9cblx0XHRjb25zdCBmaXJzdEludmFsaWRQYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0KHBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpICYmXG5cdFx0XHRcdChwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yIHx8IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCIgfHwgZW1wdHlSZXF1aXJlZEZpZWxkcy5pbmNsdWRlcyhwYXJhbWV0ZXJJbmZvKSlcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gZW5hYmxlbWVudCBwcm9taXNlc1xuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdHNDb250cm9sOiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWRbXT4ge1xuXHRcdGNvbnN0IGFQcm9taXNlczogUHJvbWlzZTx2b2lkW10+W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aW5pdGlhbGl6ZVRhYmxlQWN0aW9uUHJvcGVydGllcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzID0gdGhpcy5fc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlKFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aGFuZGxlVGFibGVDb250ZXh0cyhcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0XHRhUHJvbWlzZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gdHJpZ2dlciBhbiBleHBsaWNpdCByZWZyZXNoIG9mIHRoZSBzZWxlY3RlZCBjb250ZXh0IHRvIHVwZGF0ZVxuXHRcdFx0Ly8gYWxzbyB0aGUgY29udGV4dHMgaW4gY2FzZSBvZiBjdXN0b20gYWN0aW9uc1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcykudGhlbigocmVzdWx0cykgPT4gcmVzdWx0cy5mbGF0KCkpO1xuXHR9LFxuXHRzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaDogZnVuY3Rpb24gKFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGEgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnN0IG9Db250cm9scyA9IChvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhPy5jb250cm9scyB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgeyBjb250cm9sSWQ/OiBzdHJpbmcgfT47XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db250cm9scykge1xuXHRcdFx0aWYgKG9Db250cm9sc1tzS2V5XSAmJiBvQ29udHJvbHNbc0tleV0uY29udHJvbElkKSB7XG5cdFx0XHRcdGNvbnN0IG9UYWJsZSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUgJiYgb1RhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZyA9PSBvTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBDb250ZXh0W10sXG5cdFx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KG9WaWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBpVmlld0xldmVsID0gKG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpPy52aWV3TGV2ZWwsXG5cdFx0XHRpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdFx0aWYgKChpVmlld0xldmVsIGFzIG51bWJlcikgPiAxICYmIGlzRWRpdGFibGUgIT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzTWV0YVBhdGgpO1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvQ29udGV4dFxuXHRcdFx0XHQ/LmdldE1vZGVsKClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uZ2V0Q29udGV4dChvQ29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRcdHNFbnRpdHlTZXQsXG5cdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRcdG1lcmdlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGxldCB1cGRhdGVIaWRkZW47XG5cdFx0XHQvL0ZpbmQgdGhlIFVwZGF0ZSBIaWRkZW4gb2YgdGhlIHJvb3QgZW50aXR5IHNldCBhbmQgYmluZCB0aGUgcHJvcGVydHkgdG8gQW55RWxlbWVudCwgYW55IGNoYW5nZXMgaW4gdGhlIHBhdGggb2YgdGhlIHJvb3QgVXBkYXRlSGlkZGVuIHdpbGwgYmUgdXBkYXRlZCB2aWEgdGhlIHByb3BlcnR5LCBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGlzIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHByb3BlcnR5XG5cdFx0XHRjb25zdCBiVXBkYXRlSGlkZGVuID0gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0aWYgKGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRcdFx0dXBkYXRlSGlkZGVuID0gTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHRcdC8vRmluZCB0aGUgb3BlcmF0aW9uIGF2YWlsYWJsZSBwcm9wZXJ0eSBvZiB0aGUgcm9vdCBlZGl0IGNvbmZpZ3VyYXRpb24gYW5kIGZldGNoIHRoZSBwcm9wZXJ0eSB1c2luZyBBbnlFbGVtZW50XG5cdFx0XHRjb25zdCBzRWRpdEVuYWJsZUJpbmRpbmcgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdGlja3lSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNQYXRoID0gZHJhZnRSb290UGF0aCB8fCBzU3RpY2t5Um9vdFBhdGg7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKHNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290Q29udGV4dCA9IG9WaWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQoc1BhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRpZiAodXBkYXRlSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBzSGlkZGVuRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSwgZmFsc2UpKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0hpZGRlbkV4cHJlc3Npb24sIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRWaXNpYmxlXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNFZGl0RW5hYmxlQmluZGluZykge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzRWRpdEVuYWJsZUJpbmRpbmcsIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRFbmFibGVkXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdE1vZGVsQ29udGV4dDogZnVuY3Rpb24gKFxuXHRcdHNCaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9Sb290Q29udGV4dDogQ29udGV4dCxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChzQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9IaWRkZW5FbGVtZW50ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBzQmluZGluZ0V4cHJlc3Npb24gfSk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdG9WaWV3LmFkZERlcGVuZGVudChvSGlkZGVuRWxlbWVudCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb0hpZGRlbkVsZW1lbnRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0Py5iaW5kQ29udGV4dChvUm9vdENvbnRleHQuZ2V0UGF0aCgpLCBvUm9vdENvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pXG5cdFx0XHRcdD8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudD8uZ2V0QmluZGluZyhcImFueVRleHRcIik/LmF0dGFjaENoYW5nZSgob0V2ZW50OiBFdmVudDx7fSwgUHJvcGVydHlCaW5kaW5nPikgPT4ge1xuXHRcdFx0XHRjb25zdCBvTmV3VmFsdWUgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc1Byb3BlcnR5LCBvTmV3VmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGU6IGZ1bmN0aW9uIChcblx0XHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10ge1xuXHRcdC8vIFJldHJpZXZlIHByZXZpb3VzbHkgY2hlY2tlZCBjb250ZXh0cyBpbiBjYXNlIG9mICFmb3JDb250ZXh0TWVudVxuXHRcdGNvbnN0IHNFbmFibGVtZW50RmllbGROYW1lID0gZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIiA6IFwiYkVuYWJsZWRcIixcblx0XHRcdGFBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSB8fCBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSB8fCBbXTtcblx0XHRsZXQgYkFjdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gKSB8fCBmYWxzZTtcblxuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUsIG9ubHkgdGhlIGNsaWNrZWQgY29udGV4dCBnb2VzIGludG8gdGhlIHByb2Nlc3NpbmcgLSBvdGhlciBzZWxlY3RlZCBjb250ZXh0cyBtdXN0IGJlIGtlcHQgaW4gdGhlIG1vZGVsXG5cdFx0XHRcdGJFbmFibGVkOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgKSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dERhdGEgPyBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRiQWN0aW9uRW5hYmxlZCA9IGJBY3Rpb25FbmFibGVkIHx8IHNSZXN1bHQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCBiQWN0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdChzUmVzdWx0ID09PSBcInRydWVcIiA/IGFBcHBsaWNhYmxlIDogYU5vdEFwcGxpY2FibGUpLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRDb21tb25VdGlscy5zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvU2VsZWN0ZWRDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChDb21tb25VdGlscy5yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhUmVxdWVzdFByb21pc2VzO1xuXHR9XG59O1xuZXhwb3J0IGRlZmF1bHQgQWN0aW9uUnVudGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7RUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsK0JBQStCQSxDQUFDQyxvQkFBMEMsRUFBRUMsTUFBYyxFQUFFQyxjQUF1QixFQUFRO0lBQ25JRixvQkFBb0IsQ0FBQ0csV0FBVyxDQUFDLGtCQUFrQkYsTUFBTSxjQUFjLEVBQUUsRUFBRSxDQUFDO0lBQzVFRCxvQkFBb0IsQ0FBQ0csV0FBVyxDQUFDLGtCQUFrQkYsTUFBTSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7SUFDL0UsSUFBSUMsY0FBYyxFQUFFO01BQ25CRixvQkFBb0IsQ0FBQ0csV0FBVyxDQUFDLGtCQUFrQkYsTUFBTSx5QkFBeUIsRUFBRSxLQUFLLENBQUM7SUFDM0YsQ0FBQyxNQUFNO01BQ05ELG9CQUFv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
|
|
338
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbml0aWFsaXplVGFibGVBY3Rpb25Qcm9wZXJ0aWVzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJhY3Rpb24iLCJmb3JDb250ZXh0TWVudSIsInNldFByb3BlcnR5IiwiaGFuZGxlTm9TZWxlY3RlZENvbnRleHRzIiwicHJvbWlzZXMiLCJiRW5hYmxlZCIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJwdXNoIiwiQ29tbW9uVXRpbHMiLCJzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJ0aGVuIiwiaGFuZGxlU2VsZWN0ZWRDb250ZXh0cyIsInJlcXVlc3RQcm9taXNlcyIsImhhbmRsZVRhYmxlQ29udGV4dHMiLCJzZWxlY3RlZENvbnRleHRzIiwicHJvcGVydHkiLCJsZW5ndGgiLCJBY3Rpb25SdW50aW1lIiwiaXNSZXF1aXJlZEZpZWxkRW1wdHkiLCJwYXJhbWV0ZXJJbmZvIiwiZmllbGRJZCIsImZpZWxkIiwiZ2V0SWQiLCJhbGxNZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJyZWxldmFudE1lc3NhZ2VzIiwiZmlsdGVyIiwibXNnIiwiZ2V0Q29udHJvbElkcyIsInNvbWUiLCJjb250cm9sSWQiLCJpbmNsdWRlcyIsImlzTXVsdGlWYWx1ZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5IiwiZmllbGRWYWx1ZSIsImdldFZhbHVlIiwiaXNGaWVsZEFycmF5IiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIm1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZ2V0QmluZGluZyIsIm1lc3NhZ2UiLCJNZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJwcm9jZXNzb3IiLCJnZXRNb2RlbCIsInBlcnNpc3RlbnQiLCJ0YXJnZXQiLCJnZXRSZXNvbHZlZFBhdGgiLCJjaGFuZ2VIYW5kbGVyIiwicmVtb3ZlTWVzc2FnZXMiLCJkZXRhY2hDaGFuZ2UiLCJhdHRhY2hDaGFuZ2UiLCJhZGRNZXNzYWdlcyIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZ2V0UmVxdWlyZWQiLCJlbXB0eVJlcXVpcmVkRmllbGRzIiwiZ2V0VGV4dCIsImdldFBhcmVudCIsImdldEFnZ3JlZ2F0aW9uIiwiZmlyc3RJbnZhbGlkUGFyYW1ldGVyIiwiZmluZCIsImdldFZpc2libGUiLCJoYXNFcnJvciIsImdldFZhbHVlU3RhdGUiLCJzZXRWaXNpYmxlIiwiZm9jdXMiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0ludGVybmFsTW9kZWxDb250ZXh0Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwic0NvbnRyb2wiLCJhcmd1bWVudHMiLCJhUHJvbWlzZXMiLCJzQWN0aW9uIiwiYVJlcXVlc3RQcm9taXNlcyIsInNQcm9wZXJ0eSIsInNlbGVjdGVkQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsImdldE9iamVjdCIsIl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUiLCJnZXRQcm9wZXJ0eSIsImFsbCIsInJlc3VsdHMiLCJmbGF0Iiwic2V0QWN0aW9uRW5hYmxlbWVudEFmdGVyUGF0Y2giLCJvVmlldyIsIm9MaXN0QmluZGluZyIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGEiLCJvQ29udHJvbHMiLCJjb250cm9scyIsInNLZXkiLCJvVGFibGUiLCJieUlkIiwiaXNBIiwib1Jvd0JpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwidGFibGVBUEkiLCJnZXRCaW5kaW5nQ29udGV4dCIsIkpTT04iLCJwYXJzZSIsInRhYmxlRGVmaW5pdGlvbiIsIm9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJpVmlld0xldmVsIiwiZ2V0Vmlld0RhdGEiLCJ2aWV3TGV2ZWwiLCJpc0VkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsIm9Db250ZXh0Iiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic0VudGl0eVNldCIsImdldFJvb3RFbnRpdHlTZXRQYXRoIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJnZXRDb250ZXh0IiwiZ2V0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiZ2V0RGlhZ25vc3RpY3MiLCJtZXJnZSIsImVudGl0eVNldCIsImdldEVudGl0eVNldCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwidXBkYXRlSGlkZGVuIiwiYlVwZGF0ZUhpZGRlbiIsImlzRW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJVSSIsIlVwZGF0ZUhpZGRlbiIsInZhbHVlT2YiLCJpc1VwZGF0ZUhpZGRlbiIsInNFZGl0RW5hYmxlQmluZGluZyIsImdldEVkaXRCdXR0b25FbmFibGVkIiwiZHJhZnRSb290UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJzU3RpY2t5Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNQYXRoIiwib1Jvb3RDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzSGlkZGVuRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiZXF1YWwiLCJnZXRIaWRkZW5FeHByZXNzaW9uIiwidXBkYXRlRWRpdE1vZGVsQ29udGV4dCIsInNCaW5kaW5nRXhwcmVzc2lvbiIsIm9IaWRkZW5FbGVtZW50IiwiQW55RWxlbWVudCIsImFueVRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsImFkZERlcGVuZGVudCIsIiQkZ3JvdXBJZCIsIm9FdmVudCIsIm9OZXdWYWx1ZSIsImdldFNvdXJjZSIsImdldEV4dGVybmFsVmFsdWUiLCJvU2VsZWN0ZWRDb250ZXh0Iiwic0VuYWJsZW1lbnRGaWVsZE5hbWUiLCJiQWN0aW9uRW5hYmxlZCIsImJFbmFibGVkRm9yQ29udGV4dE1lbnUiLCJhQXBwbGljYWJsZUZvckNvbnRleHRNZW51IiwiYU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudSIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwicmVxdWVzdFByb3BlcnR5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb25SdW50aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIGFzIEVkbUFjdGlvblBhcmFtZXRlciwgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBlcXVhbCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IF9SZXF1ZXN0ZWRQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGlzRW50aXR5U2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB0eXBlIExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgTWVzc2FnaW5nIGZyb20gXCJzYXAvdWkvY29yZS9NZXNzYWdpbmdcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGQgZnJvbSBcInNhcC91aS9tZGMvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkSXRlbSBmcm9tIFwic2FwL3VpL21kYy9maWVsZC9NdWx0aVZhbHVlRmllbGRJdGVtXCI7XG5pbXBvcnQgdHlwZSBQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Qcm9wZXJ0eUJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgRmlsZVVwbG9hZGVyIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBBbnlFbGVtZW50IGZyb20gXCIuL2NvbnRyb2xzL0FueUVsZW1lbnRcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0RWRpdEJ1dHRvbkVuYWJsZWQsIGdldEhpZGRlbkV4cHJlc3Npb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL29iamVjdFBhZ2UvSGVhZGVyQW5kRm9vdGVyQWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIEFjdGlvblBhcmFtZXRlckluZm8gPSB7XG5cdHBhcmFtZXRlcj86IEVkbUFjdGlvblBhcmFtZXRlcjtcblx0ZmllbGQ6IEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkIHwgRmlsZVVwbG9hZGVyO1xuXHRpc011bHRpVmFsdWU6IGJvb2xlYW47XG5cdHZhbHVlPzogc3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0dmFsaWRhdGlvblByb21pc2U/OiBQcm9taXNlPHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT47XG5cdGhhc0Vycm9yOiBib29sZWFuO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgdGFibGUgYWN0aW9uIGluIHRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0LlxuICogQHBhcmFtIGludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IHdoZXJlIHRoZSBhY3Rpb24gcHJvcGVydGllcyBhcmUgc2V0LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIGZvciB3aGljaCBwcm9wZXJ0aWVzIGFyZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBpcyBmb3IgYSBjb250ZXh0IG1lbnUuXG4gKi9cbmZ1bmN0aW9uIGluaXRpYWxpemVUYWJsZUFjdGlvblByb3BlcnRpZXMoaW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LCBhY3Rpb246IHN0cmluZywgZm9yQ29udGV4dE1lbnU6IGJvb2xlYW4pOiB2b2lkIHtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufS9hQXBwbGljYWJsZWAsIFtdKTtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufS9hTm90QXBwbGljYWJsZWAsIFtdKTtcblx0aWYgKGZvckNvbnRleHRNZW51KSB7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufS9iRW5hYmxlZEZvckNvbnRleHRNZW51YCwgZmFsc2UpO1xuXHR9IGVsc2Uge1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke2FjdGlvbn0vYkVuYWJsZWRgLCBmYWxzZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBjYXNlIHdoZW4gbm8gY29udGV4dHMgYXJlIHNlbGVjdGVkIGZvciBhbiBhY3Rpb24uXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgVGhlIGludGVybmFsIG1vZGVsIGNvbnRleHQgd2hlcmUgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzIGFyZSBzZXQuXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gZm9yIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHByb21pc2VzIEFuIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGFmdGVyIHNldHRpbmcgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlTm9TZWxlY3RlZENvbnRleHRzKFxuXHRpbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdGFjdGlvbjogc3RyaW5nLFxuXHRwcm9taXNlczogUHJvbWlzZTx2b2lkW10+W10sXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiB2b2lkIHtcblx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7YWN0aW9ufWAsIHtcblx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHR9KTtcblx0cHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoaW50ZXJuYWxNb2RlbENvbnRleHQsIFtdLCBmb3JDb250ZXh0TWVudSkudGhlbigoKSA9PiBbXSkpO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBjb250ZXh0cyBhcmUgc2VsZWN0ZWQgZm9yIGFuIGFjdGlvbi5cbiAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsQ29udGV4dCBUaGUgaW50ZXJuYWwgbW9kZWwgY29udGV4dCB3aGVyZSB0aGUgYWN0aW9uIHByb3BlcnRpZXMgYXJlIHNldC5cbiAqIEBwYXJhbSByZXF1ZXN0UHJvbWlzZXMgQW4gYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYWZ0ZXIgc2V0dGluZyB0aGUgYWN0aW9uIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gcHJvbWlzZXNcdEFuIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGFmdGVyIHNldHRpbmcgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhci5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU2VsZWN0ZWRDb250ZXh0cyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRyZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRwcm9taXNlczogUHJvbWlzZTx2b2lkW10+W10sXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuXG4pOiB2b2lkIHtcblx0cHJvbWlzZXMucHVzaChDb21tb25VdGlscy5zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUoaW50ZXJuYWxNb2RlbENvbnRleHQsIHJlcXVlc3RQcm9taXNlcywgZm9yQ29udGV4dE1lbnUpLnRoZW4oKCkgPT4gW10pKTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIHRoZSBhY3Rpb24gZW5hYmxlbWVudCBmb3IgdGFibGUgY29udGV4dHMuXG4gKiBAcGFyYW0gc2VsZWN0ZWRDb250ZXh0cyAgU2VsZWN0ZWQgY29udGV4dHMgZm9yIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHQgXHRJbnRlcm5hbCBtb2RlbCBjb250ZXh0IHdoZXJlIHRoZSBhY3Rpb24gcHJvcGVydGllcyBhcmUgc2V0LlxuICogQHBhcmFtIGFjdGlvbiBOYW1lIG9mIHRoZSBhY3Rpb24gZm9yIHdoaWNoIHByb3BlcnRpZXMgYXJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHByb3BlcnR5IFByb3BlcnR5IHRvIGJlIGNoZWNrZWQgZm9yIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gcmVxdWVzdFByb21pc2VzIFByb21pc2VzIHRvIGJlIHJlc29sdmVkIGFmdGVyIHNldHRpbmcgdGhlIGFjdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIGZvckNvbnRleHRNZW51IFRydWUgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUsIGZhbHNlIGlmIGl0IGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG4gKiBAcGFyYW0gcHJvbWlzZXMgUOKAmnJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYWZ0ZXIgc2V0dGluZyB0aGUgYWN0aW9uIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVRhYmxlQ29udGV4dHMoXG5cdHNlbGVjdGVkQ29udGV4dHM6IENvbnRleHRbXSxcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRhY3Rpb246IHN0cmluZyxcblx0cHJvcGVydHk6IHN0cmluZyxcblx0cmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHByb21pc2VzOiBQcm9taXNlPHZvaWRbXT5bXVxuKTogdm9pZCB7XG5cdGlmICghc2VsZWN0ZWRDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRoYW5kbGVOb1NlbGVjdGVkQ29udGV4dHMoaW50ZXJuYWxNb2RlbENvbnRleHQsIGFjdGlvbiwgcHJvbWlzZXMsIGZvckNvbnRleHRNZW51KTtcblx0fSBlbHNlIGlmIChzZWxlY3RlZENvbnRleHRzLmxlbmd0aCAmJiB0eXBlb2YgcHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRoYW5kbGVTZWxlY3RlZENvbnRleHRzKGludGVybmFsTW9kZWxDb250ZXh0LCByZXF1ZXN0UHJvbWlzZXMsIHByb21pc2VzLCBmb3JDb250ZXh0TWVudSk7XG5cdH1cbn1cblxuY29uc3QgQWN0aW9uUnVudGltZSA9IHtcblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHJlcXVpcmVkIHBhcmFtZXRlciBmaWVsZCBpcyBlbXB0eS5cblx0ICogQHBhcmFtIHBhcmFtZXRlckluZm8gSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBmaWVsZCBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc1JlcXVpcmVkRmllbGRFbXB0eTogZnVuY3Rpb24gKHBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm8pOiBib29sZWFuIHtcblx0XHRjb25zdCBmaWVsZElkID0gcGFyYW1ldGVySW5mby5maWVsZC5nZXRJZCgpO1xuXHRcdGNvbnN0IGFsbE1lc3NhZ2VzID0gTWVzc2FnaW5nLmdldE1lc3NhZ2VNb2RlbCgpLmdldERhdGEoKTtcblx0XHRjb25zdCByZWxldmFudE1lc3NhZ2VzID0gYWxsTWVzc2FnZXMuZmlsdGVyKChtc2c6IE1lc3NhZ2UpID0+XG5cdFx0XHRtc2cuZ2V0Q29udHJvbElkcygpLnNvbWUoKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBjb250cm9sSWQuaW5jbHVkZXMoZmllbGRJZCkpXG5cdFx0KTtcblx0XHRpZiAocmVsZXZhbnRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmIChwYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSkge1xuXHRcdFx0cmV0dXJuIHBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJJbmZvLnZhbHVlKSAmJiBwYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aCA9PT0gMCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCkuZ2V0VmFsdWUoKTtcblx0XHRcdGNvbnN0IGlzRmllbGRBcnJheSA9IEFycmF5LmlzQXJyYXkoKHBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0aWYgKGlzRmllbGRBcnJheSkge1xuXHRcdFx0XHQvLyBvbmx5IGZpcnN0IHZhbHVlIGNoZWNrIGlzIGVub3VnaCBhcyB0aGUgZmllbGQgdmFsdWUgY29tZXMgb24gWzBdIHJlc3Qgb2YgdGhlIGFycmF5IGluY2x1ZGVzIGN1cnJlbmN5IGFuZCBjdXJyZW5jeSBjb2RlXG5cdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRyZXR1cm4gZmllbGRWYWx1ZVswXSA9PT0gbnVsbCB8fCBmaWVsZFZhbHVlWzBdID09PSBcIlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0fVxuXHR9LFxuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlcyA9IG1lc3NhZ2VQYXJhbWV0ZXJzLm1hcCgobWVzc2FnZVBhcmFtZXRlcikgPT4ge1xuXHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRtZXNzYWdlUGFyYW1ldGVyLmFjdGlvblBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlID8gXCJpdGVtc1wiIDogXCJ2YWx1ZVwiXG5cdFx0XHQpO1xuXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcdFx0XHRwcm9jZXNzb3I6IGJpbmRpbmc/LmdldE1vZGVsKCkgPz8gdW5kZWZpbmVkLCAvLyBnZXRNb2RlbCgpOiBudWxsIHwgTW9kZWwgfn4+IHByb2Nlc3Nvcj86IE1lc3NhZ2VQcm9jZXNzb3Jcblx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0dGFyZ2V0OiBiaW5kaW5nPy5nZXRSZXNvbHZlZFBhdGgoKVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEF0dGFjaCBjaGFuZ2UgaGFuZGxlciB0byB2YWxpZGF0ZSB2YWx1ZSBhbmQgcmVtb3ZlIG1lc3NhZ2UgaWYgZmllbGQgaXMgbm90IGVtcHR5XG5cdFx0XHRpZiAoYmluZGluZykge1xuXHRcdFx0XHRjb25zdCBjaGFuZ2VIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBmaWVsZCBpcyBubyBsb25nZXIgZW1wdHkgdXNpbmcgdGhlIGV4dHJhY3RlZCB2YWxpZGF0aW9uIGZ1bmN0aW9uXG5cdFx0XHRcdFx0aWYgKCFBY3Rpb25SdW50aW1lLmlzUmVxdWlyZWRGaWVsZEVtcHR5KG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mbykpIHtcblx0XHRcdFx0XHRcdC8vIFJlbW92ZSB0aGUgbWVzc2FnZVxuXHRcdFx0XHRcdFx0TWVzc2FnaW5nLnJlbW92ZU1lc3NhZ2VzKFttZXNzYWdlXSk7XG5cdFx0XHRcdFx0XHQvLyBEZXRhY2ggdGhlIGNoYW5nZSBoYW5kbGVyXG5cdFx0XHRcdFx0XHRiaW5kaW5nLmRldGFjaENoYW5nZShjaGFuZ2VIYW5kbGVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdC8vIFRoZXJlIG1pZ2h0IGJlIHNjZWFucmlvcyBsaWtlIHZhbHVlIGhlbHAgb3V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGZpZWxkIGlzIG5vdCBleHBsaWNpdGx5IGNoYW5nZWQgaW5zdGVhZCBwcm9wZXJ0eSB2YWx1ZSBjaGFuZ2VzIGR1ZSB0byBzZXRQcm9wZXJ0eS5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgZmllbGQgY2hhbmdlIGlzIG5vdCBjYWxsZWQgYW5kIGlzIG5vdCBhIHJlbGlhYmxlIGV2ZW50IHRvIHZhbGlkYXRlIHRoZSBmaWVsZCB2YWx1ZSBhZ2Fpbi5cblx0XHRcdFx0Ly8gU28gd2UgdXNlIHZhbHVlL2l0ZW1zIGJpbmRpbmcgY2hhbmdlIHRvIHJlLXZhbGlkYXRlIHRoZSBwcm9wZXJ0eSB2YWx1ZSB0byByZW1vdmUgdGhlIG1lc3NhZ2VzLlxuXHRcdFx0XHRiaW5kaW5nLmF0dGFjaENoYW5nZShjaGFuZ2VIYW5kbGVyKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cdFx0fSk7XG5cblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMobWVzc2FnZXMpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcihcblx0XHRcdChwYXJhbWV0ZXJJbmZvKSA9PlxuXHRcdFx0XHQocGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCkuZ2V0UmVxdWlyZWQgJiZcblx0XHRcdFx0KHBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQgfCBNdWx0aVZhbHVlRmllbGQpLmdldFJlcXVpcmVkKClcblx0XHQpO1xuXG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKHRoaXMuaXNSZXF1aXJlZEZpZWxkRW1wdHkpO1xuXHRcdC8qIE1lc3NhZ2UgZm9yIG1pc3NpbmcgbWFuZGF0b3J5IHZhbHVlIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyICovXG5cdFx0aWYgKGVtcHR5UmVxdWlyZWRGaWVsZHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyKFxuXHRcdFx0XHRlbXB0eVJlcXVpcmVkRmllbGRzLm1hcCgoYWN0aW9uUGFyYW1ldGVySW5mbykgPT4gKHtcblx0XHRcdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvOiBhY3Rpb25QYXJhbWV0ZXJJbmZvLFxuXHRcdFx0XHRcdG1lc3NhZ2U6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfT1BFUkFUSU9OU19BQ1RJT05fUEFSQU1FVEVSX0RJQUxPR19NSVNTSU5HX01BTkRBVE9SWV9NU0dcIiwgW1xuXHRcdFx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8uZmllbGQuZ2V0UGFyZW50KCk/LmdldEFnZ3JlZ2F0aW9uKFwibGFiZWxcIikgYXMgTGFiZWwpLmdldFRleHQoKVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdH0pKVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0LyogQ2hlY2sgdmFsdWUgc3RhdGUgb2YgYWxsIHBhcmFtZXRlcnMgKi9cblx0XHRjb25zdCBmaXJzdEludmFsaWRQYXJhbWV0ZXIgPSBhY3Rpb25QYXJhbWV0ZXJJbmZvcy5maW5kKFxuXHRcdFx0KHBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmlzaWJsZSgpICYmXG5cdFx0XHRcdChwYXJhbWV0ZXJJbmZvLmhhc0Vycm9yIHx8IHBhcmFtZXRlckluZm8uZmllbGQuZ2V0VmFsdWVTdGF0ZSgpID09PSBcIkVycm9yXCIgfHwgZW1wdHlSZXF1aXJlZEZpZWxkcy5pbmNsdWRlcyhwYXJhbWV0ZXJJbmZvKSlcblx0XHQpO1xuXHRcdGlmIChmaXJzdEludmFsaWRQYXJhbWV0ZXIpIHtcblx0XHRcdGZpcnN0SW52YWxpZFBhcmFtZXRlci5maWVsZC5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLmZvY3VzKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogU2V0cyB0aGUgYWN0aW9uIGVuYWJsZW1lbnQuXG5cdCAqIEBwYXJhbSBvSW50ZXJuYWxNb2RlbENvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgbW9kZWxcblx0ICogQHBhcmFtIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgTWFwIGNvbnRhaW5pbmcgdGhlIG9wZXJhdGlvbiBhdmFpbGFiaWxpdHkgb2YgYWN0aW9uc1xuXHQgKiBAcGFyYW0gYVNlbGVjdGVkQ29udGV4dHMgQXJyYXkgY29udGFpbmluZyBzZWxlY3RlZCBjb250ZXh0cyBvZiB0aGUgY2hhcnRcblx0ICogQHBhcmFtIHNDb250cm9sIENvbnRyb2wgbmFtZVxuXHQgKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG5cdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gZW5hYmxlbWVudCBwcm9taXNlc1xuXHQgKi9cblx0c2V0QWN0aW9uRW5hYmxlbWVudDogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0b0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0XHRhU2VsZWN0ZWRDb250ZXh0czogQ29udGV4dFtdLFxuXHRcdHNDb250cm9sOiBzdHJpbmcsXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWRbXT4ge1xuXHRcdGNvbnN0IGFQcm9taXNlczogUHJvbWlzZTx2b2lkW10+W10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdFx0bGV0IGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdID0gW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc0FjdGlvbiwgZmFsc2UpO1xuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aW5pdGlhbGl6ZVRhYmxlQWN0aW9uUHJvcGVydGllcyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdGVkQ29udGV4dCBvZiBhU2VsZWN0ZWRDb250ZXh0cykge1xuXHRcdFx0XHRpZiAoc2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdFx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJjaGFydFwiKSB7XG5cdFx0XHRcdFx0XHRpZiAoKHNQcm9wZXJ0eSA9PT0gbnVsbCAmJiAhIW9Db250ZXh0RGF0YVtgIyR7c0FjdGlvbn1gXSkgfHwgc2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdChzUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzQWN0aW9uLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzID0gdGhpcy5fc2V0QWN0aW9uRW5hYmxlbWVudEZvclRhYmxlKFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0aGFuZGxlVGFibGVDb250ZXh0cyhcblx0XHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyxcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcyxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0XHRhUHJvbWlzZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gdHJpZ2dlciBhbiBleHBsaWNpdCByZWZyZXNoIG9mIHRoZSBzZWxlY3RlZCBjb250ZXh0IHRvIHVwZGF0ZVxuXHRcdFx0Ly8gYWxzbyB0aGUgY29udGV4dHMgaW4gY2FzZSBvZiBjdXN0b20gYWN0aW9uc1xuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRDb250ZXh0cyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIikgfHwgW107XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzZWxlY3RlZENvbnRleHRzXCIsIFtdKTtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInNlbGVjdGVkQ29udGV4dHNcIiwgc2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcykudGhlbigocmVzdWx0cykgPT4gcmVzdWx0cy5mbGF0KCkpO1xuXHR9LFxuXHRzZXRBY3Rpb25FbmFibGVtZW50QWZ0ZXJQYXRjaDogZnVuY3Rpb24gKFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9MaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGEgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldE9iamVjdCgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXHRcdGNvbnN0IG9Db250cm9scyA9IChvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhPy5jb250cm9scyB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgeyBjb250cm9sSWQ/OiBzdHJpbmcgfT47XG5cdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db250cm9scykge1xuXHRcdFx0aWYgKG9Db250cm9sc1tzS2V5XSAmJiBvQ29udHJvbHNbc0tleV0uY29udHJvbElkKSB7XG5cdFx0XHRcdGNvbnN0IG9UYWJsZSA9IG9WaWV3LmJ5SWQoc0tleSk7XG5cdFx0XHRcdGlmIChvVGFibGUgJiYgb1RhYmxlLmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRcdGlmIChvUm93QmluZGluZyA9PSBvTGlzdEJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRhYmxlQVBJID0gb1RhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZSh0YWJsZUFQSS50YWJsZURlZmluaXRpb24ub3BlcmF0aW9uQXZhaWxhYmxlTWFwKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBDb250ZXh0W10sXG5cdFx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KG9WaWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBpVmlld0xldmVsID0gKG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpPy52aWV3TGV2ZWwsXG5cdFx0XHRpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdFx0aWYgKChpVmlld0xldmVsIGFzIG51bWJlcikgPiAxICYmIGlzRWRpdGFibGUgIT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzTWV0YVBhdGgpO1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvQ29udGV4dFxuXHRcdFx0XHQ/LmdldE1vZGVsKClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uZ2V0Q29udGV4dChvQ29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRcdHNFbnRpdHlTZXQsXG5cdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRcdG1lcmdlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGxldCB1cGRhdGVIaWRkZW47XG5cdFx0XHQvL0ZpbmQgdGhlIFVwZGF0ZSBIaWRkZW4gb2YgdGhlIHJvb3QgZW50aXR5IHNldCBhbmQgYmluZCB0aGUgcHJvcGVydHkgdG8gQW55RWxlbWVudCwgYW55IGNoYW5nZXMgaW4gdGhlIHBhdGggb2YgdGhlIHJvb3QgVXBkYXRlSGlkZGVuIHdpbGwgYmUgdXBkYXRlZCB2aWEgdGhlIHByb3BlcnR5LCBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGlzIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHByb3BlcnR5XG5cdFx0XHRjb25zdCBiVXBkYXRlSGlkZGVuID0gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0aWYgKGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRcdFx0dXBkYXRlSGlkZGVuID0gTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHRcdC8vRmluZCB0aGUgb3BlcmF0aW9uIGF2YWlsYWJsZSBwcm9wZXJ0eSBvZiB0aGUgcm9vdCBlZGl0IGNvbmZpZ3VyYXRpb24gYW5kIGZldGNoIHRoZSBwcm9wZXJ0eSB1c2luZyBBbnlFbGVtZW50XG5cdFx0XHRjb25zdCBzRWRpdEVuYWJsZUJpbmRpbmcgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdGlja3lSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNQYXRoID0gZHJhZnRSb290UGF0aCB8fCBzU3RpY2t5Um9vdFBhdGg7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKHNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290Q29udGV4dCA9IG9WaWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQoc1BhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRpZiAodXBkYXRlSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBzSGlkZGVuRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSwgZmFsc2UpKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0hpZGRlbkV4cHJlc3Npb24sIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRWaXNpYmxlXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNFZGl0RW5hYmxlQmluZGluZykge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzRWRpdEVuYWJsZUJpbmRpbmcsIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRFbmFibGVkXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdE1vZGVsQ29udGV4dDogZnVuY3Rpb24gKFxuXHRcdHNCaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9Sb290Q29udGV4dDogQ29udGV4dCxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChzQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9IaWRkZW5FbGVtZW50ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBzQmluZGluZ0V4cHJlc3Npb24gfSk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdG9WaWV3LmFkZERlcGVuZGVudChvSGlkZGVuRWxlbWVudCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb0hpZGRlbkVsZW1lbnRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0Py5iaW5kQ29udGV4dChvUm9vdENvbnRleHQuZ2V0UGF0aCgpLCBvUm9vdENvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pXG5cdFx0XHRcdD8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudD8uZ2V0QmluZGluZyhcImFueVRleHRcIik/LmF0dGFjaENoYW5nZSgob0V2ZW50OiBFdmVudDx7fSwgUHJvcGVydHlCaW5kaW5nPikgPT4ge1xuXHRcdFx0XHRjb25zdCBvTmV3VmFsdWUgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc1Byb3BlcnR5LCBvTmV3VmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGU6IGZ1bmN0aW9uIChcblx0XHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10ge1xuXHRcdC8vIFJldHJpZXZlIHByZXZpb3VzbHkgY2hlY2tlZCBjb250ZXh0cyBpbiBjYXNlIG9mICFmb3JDb250ZXh0TWVudVxuXHRcdGNvbnN0IHNFbmFibGVtZW50RmllbGROYW1lID0gZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIiA6IFwiYkVuYWJsZWRcIixcblx0XHRcdGFBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSB8fCBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSB8fCBbXTtcblx0XHRsZXQgYkFjdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gKSB8fCBmYWxzZTtcblxuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUsIG9ubHkgdGhlIGNsaWNrZWQgY29udGV4dCBnb2VzIGludG8gdGhlIHByb2Nlc3NpbmcgLSBvdGhlciBzZWxlY3RlZCBjb250ZXh0cyBtdXN0IGJlIGtlcHQgaW4gdGhlIG1vZGVsXG5cdFx0XHRcdGJFbmFibGVkOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgKSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dERhdGEgPyBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRiQWN0aW9uRW5hYmxlZCA9IGJBY3Rpb25FbmFibGVkIHx8IHNSZXN1bHQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCBiQWN0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdChzUmVzdWx0ID09PSBcInRydWVcIiA/IGFBcHBsaWNhYmxlIDogYU5vdEFwcGxpY2FibGUpLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRDb21tb25VdGlscy5zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvU2VsZWN0ZWRDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChDb21tb25VdGlscy5yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhUmVxdWVz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
|
|
@@ -119,25 +119,71 @@ function handleTableContexts(
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
const ActionRuntime = {
|
|
122
|
+
/**
|
|
123
|
+
* Checks if a required parameter field is empty.
|
|
124
|
+
* @param parameterInfo Information identifying an action parameter
|
|
125
|
+
* @returns True if the field is empty, false otherwise
|
|
126
|
+
*/
|
|
127
|
+
isRequiredFieldEmpty: function (parameterInfo: ActionParameterInfo): boolean {
|
|
128
|
+
const fieldId = parameterInfo.field.getId();
|
|
129
|
+
const allMessages = Messaging.getMessageModel().getData();
|
|
130
|
+
const relevantMessages = allMessages.filter((msg: Message) =>
|
|
131
|
+
msg.getControlIds().some((controlId: string) => controlId.includes(fieldId))
|
|
132
|
+
);
|
|
133
|
+
if (relevantMessages.length > 0) {
|
|
134
|
+
return false;
|
|
135
|
+
} else if (parameterInfo.isMultiValue) {
|
|
136
|
+
return parameterInfo.value === undefined || (Array.isArray(parameterInfo.value) && parameterInfo.value.length === 0);
|
|
137
|
+
} else {
|
|
138
|
+
const fieldValue = (parameterInfo.field as Field).getValue();
|
|
139
|
+
const isFieldArray = Array.isArray((parameterInfo.field as Field).getValue());
|
|
140
|
+
if (isFieldArray) {
|
|
141
|
+
// only first value check is enough as the field value comes on [0] rest of the array includes currency and currency code
|
|
142
|
+
// both of which can or cannot be null, so we shall check only the field value
|
|
143
|
+
return fieldValue[0] === null || fieldValue[0] === "";
|
|
144
|
+
}
|
|
145
|
+
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
146
|
+
}
|
|
147
|
+
},
|
|
122
148
|
/**
|
|
123
149
|
* Adds error messages for an action parameter field to the message manager.
|
|
124
150
|
* @param messageParameters Information identifying an action parameter and messages referring to this parameter
|
|
125
151
|
*/
|
|
126
152
|
_addMessageForActionParameter: function (messageParameters: { actionParameterInfo: ActionParameterInfo; message: string }[]): void {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
153
|
+
const messages = messageParameters.map((messageParameter) => {
|
|
154
|
+
const binding = messageParameter.actionParameterInfo.field.getBinding(
|
|
155
|
+
messageParameter.actionParameterInfo.isMultiValue ? "items" : "value"
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
const message = new Message({
|
|
159
|
+
message: messageParameter.message,
|
|
160
|
+
type: MessageType.Error,
|
|
161
|
+
processor: binding?.getModel() ?? undefined, // getModel(): null | Model ~~> processor?: MessageProcessor
|
|
162
|
+
persistent: true,
|
|
163
|
+
target: binding?.getResolvedPath()
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
// Attach change handler to validate value and remove message if field is not empty
|
|
167
|
+
if (binding) {
|
|
168
|
+
const changeHandler = (): void => {
|
|
169
|
+
// Check if the field is no longer empty using the extracted validation function
|
|
170
|
+
if (!ActionRuntime.isRequiredFieldEmpty(messageParameter.actionParameterInfo)) {
|
|
171
|
+
// Remove the message
|
|
172
|
+
Messaging.removeMessages([message]);
|
|
173
|
+
// Detach the change handler
|
|
174
|
+
binding.detachChange(changeHandler);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
// There might be sceanrios like value help out parameters where the field is not explicitly changed instead property value changes due to setProperty.
|
|
178
|
+
// In such cases, field change is not called and is not a reliable event to validate the field value again.
|
|
179
|
+
// So we use value/items binding change to re-validate the property value to remove the messages.
|
|
180
|
+
binding.attachChange(changeHandler);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return message;
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
Messaging.addMessages(messages);
|
|
141
187
|
},
|
|
142
188
|
|
|
143
189
|
/**
|
|
@@ -160,27 +206,7 @@ const ActionRuntime = {
|
|
|
160
206
|
(parameterInfo.field as Field | MultiValueField).getRequired()
|
|
161
207
|
);
|
|
162
208
|
|
|
163
|
-
const
|
|
164
|
-
const emptyRequiredFields = requiredParameterInfos.filter((requiredParameterInfo) => {
|
|
165
|
-
const fieldId = requiredParameterInfo.field.getId();
|
|
166
|
-
const relevantMessages = allMessages.filter((msg: Message) =>
|
|
167
|
-
msg.getControlIds().some((controlId: string) => controlId.includes(fieldId))
|
|
168
|
-
);
|
|
169
|
-
if (relevantMessages.length > 0) {
|
|
170
|
-
return false;
|
|
171
|
-
} else if (requiredParameterInfo.isMultiValue) {
|
|
172
|
-
return requiredParameterInfo.value === undefined || !requiredParameterInfo.value.length;
|
|
173
|
-
} else {
|
|
174
|
-
const fieldValue = (requiredParameterInfo.field as Field).getValue();
|
|
175
|
-
const isFieldArray = Array.isArray((requiredParameterInfo.field as Field).getValue());
|
|
176
|
-
if (isFieldArray) {
|
|
177
|
-
// only first value check is enough as the field value comes on [0] rest of the array includes currency and currency code
|
|
178
|
-
// both of which can or cannot be null, so we shall check only the field value
|
|
179
|
-
return fieldValue[0] === null || fieldValue[0] === "";
|
|
180
|
-
}
|
|
181
|
-
return fieldValue === undefined || fieldValue === null || fieldValue === "";
|
|
182
|
-
}
|
|
183
|
-
});
|
|
209
|
+
const emptyRequiredFields = requiredParameterInfos.filter(this.isRequiredFieldEmpty);
|
|
184
210
|
/* Message for missing mandatory value of the action parameter */
|
|
185
211
|
if (emptyRequiredFields.length) {
|
|
186
212
|
this._addMessageForActionParameter(
|