@sapui5/sap.fe.macros 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/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +48 -31
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +51 -26
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +1 -1
- package/src/sap/fe/macros/KPITag.tsx +3 -1
- package/src/sap/fe/macros/MacroAPI.js +3 -2
- package/src/sap/fe/macros/MacroAPI.ts +2 -2
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +10 -6
- package/src/sap/fe/macros/MicroChart.tsx +8 -2
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/Page.js +8 -4
- package/src/sap/fe/macros/Page.tsx +13 -4
- package/src/sap/fe/macros/RichTextEditor.js +14 -17
- package/src/sap/fe/macros/RichTextEditor.tsx +12 -16
- package/src/sap/fe/macros/Status.js +35 -8
- package/src/sap/fe/macros/Status.tsx +23 -2
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +37 -2
- package/src/sap/fe/macros/chart/Action.ts +21 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +19 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +36 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +59 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +81 -31
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +50 -2
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/controls/TextLink.js +15 -1
- package/src/sap/fe/macros/controls/TextLink.tsx +19 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +46 -13
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +51 -10
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +3 -3
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +1 -1
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
- package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +6 -35
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +35 -60
- package/src/sap/fe/macros/field/FieldTemplating.js +10 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +12 -5
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +100 -36
- package/src/sap/fe/macros/filter/FilterUtils.ts +127 -39
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +13 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +29 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +10 -7
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +31 -16
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +5 -2
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +104 -72
- package/src/sap/fe/macros/form/FormContainer.block.ts +114 -72
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +18 -24
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +24 -44
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +44 -12
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +42 -11
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +54 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +59 -0
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +4 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +5 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +15 -2
- package/src/sap/fe/macros/table/Action.ts +11 -1
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +21 -6
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +19 -4
- package/src/sap/fe/macros/table/MdcTableTemplate.js +113 -15
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +162 -14
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +72 -29
- package/src/sap/fe/macros/table/Table.block.tsx +71 -15
- package/src/sap/fe/macros/table/TableAPI.js +213 -154
- package/src/sap/fe/macros/table/TableAPI.ts +116 -60
- package/src/sap/fe/macros/table/TableDefinition.js +19 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +17 -1
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +8 -5
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +14 -12
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +2 -2
- package/src/sap/fe/macros/table/TableRuntime.ts +4 -6
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +69 -28
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +111 -122
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +2 -2
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +6 -5
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +10 -4
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +6 -6
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +5 -5
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +5 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +7 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
} from "sap/fe/core/templating/CriticalityFormatters";
|
|
37
37
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
38
38
|
import { enhanceDataModelPath, getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
39
|
-
import { hasValidAnalyticalCurrencyOrUnit } from "sap/fe/core/templating/UIFormatters";
|
|
39
|
+
import { getTooltipValue, hasValidAnalyticalCurrencyOrUnit } from "sap/fe/core/templating/UIFormatters";
|
|
40
40
|
import FieldHelper from "sap/fe/macros/field/FieldHelper";
|
|
41
41
|
import * as FieldTemplating from "sap/fe/macros/field/FieldTemplating";
|
|
42
42
|
import type { FieldBlockProperties } from "sap/fe/macros/internal/field/FieldStructureHelper";
|
|
@@ -848,7 +848,9 @@ const DisplayStyle = {
|
|
|
848
848
|
emptyIndicatorMode={field.emptyIndicatorMode}
|
|
849
849
|
renderWhitespace="true"
|
|
850
850
|
>
|
|
851
|
-
{
|
|
851
|
+
{{
|
|
852
|
+
customData: [customdata]
|
|
853
|
+
}}
|
|
852
854
|
</Text>
|
|
853
855
|
);
|
|
854
856
|
}
|
|
@@ -956,10 +958,7 @@ const DisplayStyle = {
|
|
|
956
958
|
const state = buildExpressionForCriticalityColor(convertedDataField);
|
|
957
959
|
|
|
958
960
|
// Extract tooltip from QuickInfo annotation - check DataField first, then property
|
|
959
|
-
const
|
|
960
|
-
dataModelObjectPath.targetObject?.annotations?.Common?.QuickInfo ||
|
|
961
|
-
enhancedValueDataModelPath.targetObject?.annotations?.Common?.QuickInfo;
|
|
962
|
-
const tooltipExpression = tooltipAnnotation ? compileExpression(getExpressionFromAnnotation(tooltipAnnotation)) : undefined;
|
|
961
|
+
const toolTipValue = getTooltipValue(dataModelObjectPath, enhancedValueDataModelPath);
|
|
963
962
|
|
|
964
963
|
const linkUrl = (field.convertedMetaPath as DataFieldWithUrl).Url
|
|
965
964
|
? compileExpression(
|
|
@@ -980,7 +979,7 @@ const DisplayStyle = {
|
|
|
980
979
|
state={state}
|
|
981
980
|
visible={field.displayVisible}
|
|
982
981
|
text={field.text}
|
|
983
|
-
tooltip={
|
|
982
|
+
tooltip={toolTipValue}
|
|
984
983
|
emptyIndicatorMode={field.emptyIndicatorMode}
|
|
985
984
|
class="sapMTextRenderWhitespaceWrap"
|
|
986
985
|
/>
|
|
@@ -1013,7 +1012,7 @@ const DisplayStyle = {
|
|
|
1013
1012
|
icon={criticalityIcon}
|
|
1014
1013
|
state={state}
|
|
1015
1014
|
text={field.text}
|
|
1016
|
-
tooltip={
|
|
1015
|
+
tooltip={toolTipValue}
|
|
1017
1016
|
visible={field.displayVisible}
|
|
1018
1017
|
emptyIndicatorMode={field.emptyIndicatorMode}
|
|
1019
1018
|
{...requiredHelper}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/
|
|
5
|
+
sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/controls/CollaborationHBox", "sap/fe/macros/controls/RadioButtons", "sap/fe/macros/field/FieldTemplating", "sap/m/CheckBox", "sap/m/DatePicker", "sap/m/DateTimePicker", "sap/m/FlexItemData", "sap/m/Input", "sap/m/MaskInput", "sap/m/MaskInputRule", "sap/m/RatingIndicator", "sap/m/TextArea", "sap/m/TimePicker", "sap/ui/core/CustomData", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/mdc/Field", "../../CollaborativeDraftHandler", "../../field/FieldHelper", "../../field/TextAreaEx", "../../TSXUtils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (BindingToolkit, MetaModelConverter, DataModelPathHelper, PropertyHelper, UIFormatter, CollaborationHBox, RadioButtons, FieldTemplating, CheckBox, DatePicker, DateTimePicker, FlexItemData, Input, MaskInput, MaskInputRule, RatingIndicator, TextArea, TimePicker, CustomData, FieldEditMode, Field, CollaborativeDraftHandler, FieldHelper, TextAreaEx, TSXUtils, _jsx, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
var createCustomDatas = TSXUtils.createCustomDatas;
|
|
8
9
|
var getTextAlignment = FieldTemplating.getTextAlignment;
|
|
9
10
|
var getMultipleLinesForDataField = FieldTemplating.getMultipleLinesForDataField;
|
|
10
11
|
var hasValueHelpWithFixedValues = PropertyHelper.hasValueHelpWithFixedValues;
|
|
12
|
+
var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
|
|
11
13
|
var pathInModel = BindingToolkit.pathInModel;
|
|
12
|
-
var compileExpression = BindingToolkit.compileExpression;
|
|
13
14
|
const EditStyle = {
|
|
14
15
|
/**
|
|
15
16
|
* An internal helper to retrieve the reused layout data.
|
|
@@ -31,23 +32,10 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
31
32
|
* @returns An XML-based string with the definition of the avatar
|
|
32
33
|
*/
|
|
33
34
|
getCollaborationAvatar(field) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"core:require": "{FieldRuntimeHelper: 'sap/fe/macros/field/FieldRuntimeHelper'}",
|
|
39
|
-
visible: collaborationHasActivityExpression,
|
|
40
|
-
initials: collaborationInitialsExpression,
|
|
41
|
-
displaySize: "Custom",
|
|
42
|
-
customDisplaySize: "1.5rem",
|
|
43
|
-
customFontSize: "0.8rem",
|
|
44
|
-
backgroundColor: collaborationColorExpression,
|
|
45
|
-
press: field.eventHandlers.showCollaborationEditUser,
|
|
46
|
-
children: {
|
|
47
|
-
dependents: _jsx(EventDelegateHook, {
|
|
48
|
-
stopTapPropagation: true
|
|
49
|
-
})
|
|
50
|
-
}
|
|
35
|
+
return _jsx(CollaborativeDraftHandler, {
|
|
36
|
+
metaPath: getContextRelativeTargetObjectPath(field.dataModelPath),
|
|
37
|
+
contextPath: field.contextPath.getPath(),
|
|
38
|
+
showAvatar: true
|
|
51
39
|
});
|
|
52
40
|
},
|
|
53
41
|
/**
|
|
@@ -130,6 +118,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
130
118
|
value: field.valueBindingExpression,
|
|
131
119
|
placeholder: field.editStylePlaceholder,
|
|
132
120
|
width: "100%",
|
|
121
|
+
fieldWidth: "70%",
|
|
133
122
|
editable: field.editableExpression,
|
|
134
123
|
description: field.staticDescription,
|
|
135
124
|
enabled: field.enabledExpression,
|
|
@@ -208,6 +197,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
208
197
|
fixedValuesPath: fixedValuesPath,
|
|
209
198
|
fieldGroupIds: field.fieldGroupIds,
|
|
210
199
|
value: field.valueBindingExpression,
|
|
200
|
+
editableExpression: field.editableExpression,
|
|
211
201
|
enabledExpression: field.enabledExpression,
|
|
212
202
|
radioButtonTextProperty: valueListDescriptionPath,
|
|
213
203
|
radioButtonKeyProperty: valueListKeyPath,
|
|
@@ -249,13 +239,19 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
249
239
|
});
|
|
250
240
|
}
|
|
251
241
|
if (this.showAsRadioButton(field) !== true) {
|
|
242
|
+
const customData = createCustomDatas([{
|
|
243
|
+
key: "sourcePath",
|
|
244
|
+
value: field.dataSourcePath
|
|
245
|
+
}, {
|
|
246
|
+
key: "valueState",
|
|
247
|
+
value: field.valueState
|
|
248
|
+
}]);
|
|
252
249
|
return _jsx(Field, {
|
|
253
250
|
"core:require": "{Field: 'sap/fe/macros/Field'}",
|
|
254
251
|
delegate: delegate,
|
|
255
252
|
id: field.editStyleId,
|
|
256
253
|
value: field.valueBindingExpression,
|
|
257
254
|
placeholder: field.editStylePlaceholder,
|
|
258
|
-
valueState: field.valueState,
|
|
259
255
|
editMode: field.editMode ?? field.computedEditMode,
|
|
260
256
|
width: "100%",
|
|
261
257
|
required: field.requiredExpression,
|
|
@@ -273,9 +269,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
273
269
|
children: {
|
|
274
270
|
contentEdit: optionalContentEdit,
|
|
275
271
|
layoutData: optionalLayoutData,
|
|
276
|
-
customData:
|
|
277
|
-
value: field.dataSourcePath
|
|
278
|
-
}, "sourcePath")
|
|
272
|
+
customData: customData
|
|
279
273
|
}
|
|
280
274
|
});
|
|
281
275
|
} else {
|
|
@@ -493,4 +487,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/EventDelegateHook", "s
|
|
|
493
487
|
};
|
|
494
488
|
return EditStyle;
|
|
495
489
|
}, false);
|
|
496
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJjb2xsYWJvcmF0aW9uSGFzQWN0aXZpdHlFeHByZXNzaW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJjb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiIsImNvbGxhYm9yYXRpb25Jbml0aWFsc0V4cHJlc3Npb24iLCJVSUZvcm1hdHRlciIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsUGF0aCIsIkNvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5SW5pdGlhbHMiLCJjb2xsYWJvcmF0aW9uQ29sb3JFeHByZXNzaW9uIiwiZ2V0Q29sbGFib3JhdGlvbkFjdGl2aXR5Q29sb3IiLCJBdmF0YXIiLCJ2aXNpYmxlIiwiaW5pdGlhbHMiLCJkaXNwbGF5U2l6ZSIsImN1c3RvbURpc3BsYXlTaXplIiwiY3VzdG9tRm9udFNpemUiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmVzcyIsImV2ZW50SGFuZGxlcnMiLCJzaG93Q29sbGFib3JhdGlvbkVkaXRVc2VyIiwiY2hpbGRyZW4iLCJkZXBlbmRlbnRzIiwiRXZlbnREZWxlZ2F0ZUhvb2siLCJzdG9wVGFwUHJvcGFnYXRpb24iLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1ldGFQYXRoIiwiY29udGV4dFBhdGgiLCJ0ZXh0QWxpZ24iLCJnZXRUZXh0QWxpZ25tZW50IiwiZm9ybWF0T3B0aW9ucyIsImVkaXRNb2RlQXNPYmplY3QiLCJkYXRlVGltZVBpY2tlclByb3BlcnRpZXMiLCJpZCIsImVkaXRTdHlsZUlkIiwid2lkdGgiLCJlZGl0YWJsZSIsImVkaXRhYmxlRXhwcmVzc2lvbiIsImVuYWJsZWQiLCJlbmFibGVkRXhwcmVzc2lvbiIsInJlcXVpcmVkIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiYXJpYUxhYmVsbGVkQnkiLCJ2YWx1ZSIsInZhbHVlQmluZGluZ0V4cHJlc3Npb24iLCJmaWVsZEdyb3VwSWRzIiwic2hvd1RpbWV6b25lIiwibWluRGF0ZSIsIm1pbkRhdGVFeHByZXNzaW9uIiwidW5kZWZpbmVkIiwibWF4RGF0ZSIsIm1heERhdGVFeHByZXNzaW9uIiwiY2hhbmdlIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImRhdGFTb3VyY2VQYXRoIiwiRGF0ZVRpbWVQaWNrZXIiLCJUaW1lUGlja2VyIiwiZ2V0SW5wdXRUZW1wbGF0ZSIsIklucHV0IiwicGxhY2Vob2xkZXIiLCJlZGl0U3R5bGVQbGFjZWhvbGRlciIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJnZXRGaWVsZERpc3BsYXkiLCJkaXNwbGF5TW9kZSIsImhhc011bHRpbGluZUFubm90YXRpb24iLCJVSSIsIk11bHRpTGluZVRleHQiLCJtdWx0aXBsZUxpbmVzIiwiZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCIsImxhYmVsIiwiY29tcHV0ZUxhYmVsVGV4dCIsImNvbnRleHQiLCJvcHRpb25hbENvbnRlbnRFZGl0IiwiVGV4dEFyZWEiLCJyb3dzIiwidGV4dExpbmVzRWRpdCIsImdyb3dpbmciLCJ0ZXh0TWF4TGluZXMiLCJncm93aW5nTWF4TGluZXMiLCJvcHRpb25hbExheW91dERhdGEiLCJGaWVsZCIsInZhbHVlU3RhdGUiLCJlZGl0TW9kZSIsImNvbXB1dGVkRWRpdE1vZGUiLCJhZGRpdGlvbmFsVmFsdWUiLCJ0ZXh0QmluZGluZ0V4cHJlc3Npb24iLCJ2YWx1ZUhlbHAiLCJ2YWx1ZUhlbHBJZCIsImNvbnRlbnRFZGl0IiwiZ2V0Q2hlY2tCb3hUZW1wbGF0ZSIsImlzQ2hlY2tCb3hHcm91cEl0ZW0iLCJpc0ZpZWxkR3JvdXBJdGVtIiwiQ2hlY2tCb3giLCJzZWxlY3RlZCIsIndyYXBwaW5nIiwic2VsZWN0IiwiZ2V0VGV4dEFyZWFUZW1wbGF0ZSIsInNob3dFeGNlZWRlZFRleHQiLCJUZXh0QXJlYUV4IiwiY29scyIsImdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlIiwidG9vbHRpcCIsInJhdGluZ0luZGljYXRvclRvb2x0aXAiLCJSYXRpbmdJbmRpY2F0b3IiLCJtYXhWYWx1ZSIsInJhdGluZ0luZGljYXRvclRhcmdldFZhbHVlIiwiaWNvblNpemUiLCJjbGFzcyIsImdldFRlbXBsYXRlV2l0aFdyYXBwZXIiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsIl9qc3hzIiwiQ29sbGFib3JhdGlvbkhCb3giLCJhbGlnbkl0ZW1zIiwiZ2V0VGVtcGxhdGUiLCJnZXRJbnB1dE1hc2tUZW1wbGF0ZSIsIm9wdGlvbmFsTWFza0lucHV0UnVsZXMiLCJtYXNrIiwibWFza1J1bGUiLCJydWxlIiwicHVzaCIsIk1hc2tJbnB1dFJ1bGUiLCJtYXNrRm9ybWF0U3ltYm9sIiwic3ltYm9sIiwicmVnZXgiLCJNYXNrSW5wdXQiLCJwbGFjZWhvbGRlclN5bWJvbCIsInJ1bGVzIiwiaW5uZXJGaWVsZENvbnRlbnQiLCJ1c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFZGl0U3R5bGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGF0YUZpZWxkVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRXZlbnREZWxlZ2F0ZUhvb2sgZnJvbSBcInNhcC9mZS9iYXNlL0V2ZW50RGVsZWdhdGVIb29rXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycyBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9Db2xsYWJvcmF0aW9uRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0ICogYXMgVUlGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGlvbkhCb3ggZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvQ29sbGFib3JhdGlvbkhCb3hcIjtcbmltcG9ydCBSYWRpb0J1dHRvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvUmFkaW9CdXR0b25zXCI7XG5pbXBvcnQgeyBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkLCBnZXRUZXh0QWxpZ25tZW50IH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCBBdmF0YXIgZnJvbSBcInNhcC9tL0F2YXRhclwiO1xuaW1wb3J0IHR5cGUgeyBDaGVja0JveCRTZWxlY3RFdmVudCB9IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSBcInNhcC9tL0RhdGVQaWNrZXJcIjtcbmltcG9ydCBEYXRlVGltZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVRpbWVQaWNrZXJcIjtcbmltcG9ydCBGbGV4SXRlbURhdGEgZnJvbSBcInNhcC9tL0ZsZXhJdGVtRGF0YVwiO1xuaW1wb3J0IElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dEJhc2UkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0IGZyb20gXCJzYXAvbS9NYXNrSW5wdXRcIjtcbmltcG9ydCBNYXNrSW5wdXRSdWxlIGZyb20gXCJzYXAvbS9NYXNrSW5wdXRSdWxlXCI7XG5pbXBvcnQgdHlwZSB7IFJhdGluZ0luZGljYXRvciRDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCBSYXRpbmdJbmRpY2F0b3IgZnJvbSBcInNhcC9tL1JhdGluZ0luZGljYXRvclwiO1xuaW1wb3J0IFRleHRBcmVhIGZyb20gXCJzYXAvbS9UZXh0QXJlYVwiO1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSBcInNhcC9tL1RpbWVQaWNrZXJcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRyb2wsIENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQsIGRlZmF1bHQgYXMgQ29udHJvbDEgfSBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB0eXBlIHsgRmllbGQkQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcIi4uLy4uL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgVGV4dEFyZWFFeCBmcm9tIFwiLi4vLi4vZmllbGQvVGV4dEFyZWFFeFwiO1xuXG5jb25zdCBFZGl0U3R5bGUgPSB7XG5cdC8qKlxuXHQgKiBBbiBpbnRlcm5hbCBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIHJldXNlZCBsYXlvdXQgZGF0YS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExheW91dERhdGEoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgbGF5b3V0RGF0YSA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkKSB7XG5cdFx0XHRsYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gbGF5b3V0RGF0YTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBhdmF0YXIgY29udHJvbCBuZXh0IGEgZmllbGQgbG9ja2VkLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYXZhdGFyXG5cdCAqL1xuXHRnZXRDb2xsYWJvcmF0aW9uQXZhdGFyKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29sbGFib3JhdGlvbkhhc0FjdGl2aXR5RXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGZpZWxkLmNvbGxhYm9yYXRpb25FeHByZXNzaW9uKTtcblx0XHRjb25zdCBjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRVSUZvcm1hdHRlci5nZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbihmaWVsZC5kYXRhTW9kZWxQYXRoLCBDb2xsYWJvcmF0aW9uRm9ybWF0dGVycy5nZXRDb2xsYWJvcmF0aW9uQWN0aXZpdHlJbml0aWFscylcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb24gPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFVJRm9ybWF0dGVyLmdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uKGZpZWxkLmRhdGFNb2RlbFBhdGgsIENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJzLmdldENvbGxhYm9yYXRpb25BY3Rpdml0eUNvbG9yKVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEF2YXRhclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHZpc2libGU9e2NvbGxhYm9yYXRpb25IYXNBY3Rpdml0eUV4cHJlc3Npb259XG5cdFx0XHRcdGluaXRpYWxzPXtjb2xsYWJvcmF0aW9uSW5pdGlhbHNFeHByZXNzaW9ufVxuXHRcdFx0XHRkaXNwbGF5U2l6ZT1cIkN1c3RvbVwiXG5cdFx0XHRcdGN1c3RvbURpc3BsYXlTaXplPVwiMS41cmVtXCJcblx0XHRcdFx0Y3VzdG9tRm9udFNpemU9XCIwLjhyZW1cIlxuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I9e2NvbGxhYm9yYXRpb25Db2xvckV4cHJlc3Npb259XG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLnNob3dDb2xsYWJvcmF0aW9uRWRpdFVzZXIgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQpID0+IHZvaWQpIHwgdW5kZWZpbmVkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IDxFdmVudERlbGVnYXRlSG9vayBzdG9wVGFwUHJvcGFnYXRpb249e3RydWV9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0F2YXRhcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSB0ZW1wbGF0ZSBmb3Igb25lIG9mIHRoZSBwaWNrZXJzIHJlZmVyZW5jZSBpbiB0aGUgdHlwZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gdHlwZSBSZWZlcmVuY2UgdG8gb25lIG9mIHRoZSBlZGl0IHN0eWxlIHBpY2tlciB0eXBlc1xuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsIHR5cGU6IFwiRGF0ZVBpY2tlclwiIHwgXCJEYXRlVGltZVBpY2tlclwiIHwgXCJUaW1lUGlja2VyXCIpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0Y29uc3QgZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzID0ge1xuXHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIixcblx0XHRcdGlkOiBmaWVsZC5lZGl0U3R5bGVJZCxcblx0XHRcdHdpZHRoOiBcIjEwMCVcIixcblx0XHRcdGVkaXRhYmxlOiBmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb24sXG5cdFx0XHRlbmFibGVkOiBmaWVsZC5lbmFibGVkRXhwcmVzc2lvbixcblx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb24sXG5cdFx0XHR0ZXh0QWxpZ246IHRleHRBbGlnbixcblx0XHRcdGFyaWFMYWJlbGxlZEJ5OiBmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+LFxuXHRcdFx0dmFsdWU6IGZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb24sXG5cdFx0XHRmaWVsZEdyb3VwSWRzOiBmaWVsZC5maWVsZEdyb3VwSWRzLFxuXHRcdFx0c2hvd1RpbWV6b25lOiBmaWVsZC5zaG93VGltZXpvbmUsXG5cdFx0XHRtaW5EYXRlOiB0eXBlID09PSBcIkRhdGVUaW1lUGlja2VyXCIgfHwgdHlwZSA9PT0gXCJEYXRlUGlja2VyXCIgPyBmaWVsZC5taW5EYXRlRXhwcmVzc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heERhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1heERhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0Y2hhbmdlOlxuXHRcdFx0XHR0eXBlID09PSBcIkRhdGVUaW1lUGlja2VyXCJcblx0XHRcdFx0XHQ/ICgoZmllbGQuY2hhbmdlIHx8IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlKSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZClcblx0XHRcdFx0XHQ6IChmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZCksXG5cdFx0XHRsaXZlQ2hhbmdlOiBmaWVsZC5ldmVudEhhbmRsZXJzLmxpdmVDaGFuZ2UsXG5cdFx0XHR2YWx1ZUZvcm1hdDogdHlwZSA9PT0gXCJEYXRlUGlja2VyXCIgPyBcIm1lZGl1bVwiIDogdW5kZWZpbmVkLFxuXHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwOiBmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkXG5cdFx0fTtcblxuXHRcdGZ1bmN0aW9uIGdldERhdGVUaW1lUGlja2VyKGRhdGVUaW1lUGlja2VyVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRcdGxldCBkYXRlVGltZVBpY2tlcjtcblx0XHRcdHN3aXRjaCAoZGF0ZVRpbWVQaWNrZXJUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJEYXRlUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvRGF0ZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVRpbWVQaWNrZXJcIjpcblx0XHRcdFx0XHRkYXRlVGltZVBpY2tlciA9IChcblx0XHRcdFx0XHRcdDxEYXRlVGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvRGF0ZVRpbWVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIlRpbWVQaWNrZXJcIjpcblx0XHRcdFx0XHRkYXRlVGltZVBpY2tlciA9IChcblx0XHRcdFx0XHRcdDxUaW1lUGlja2VyIHsuLi5kYXRlVGltZVBpY2tlclByb3BlcnRpZXN9PlxuXHRcdFx0XHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0XHRcdFx0PC9UaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGF0ZVRpbWVQaWNrZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGdldERhdGVUaW1lUGlja2VyKHR5cGUpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIElucHV0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihmaWVsZC5tZXRhUGF0aCwgZmllbGQuY29udGV4dFBhdGgpO1xuXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZGVzY3JpcHRpb249e2ZpZWxkLnN0YXRpY0Rlc2NyaXB0aW9ufVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHR5cGU9e2ZpZWxkLmVkaXRTdHlsZSA9PT0gXCJNYXNrZWRcIiA/IFwiUGFzc3dvcmRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdG1heExlbmd0aD17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RofVxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlbmFibGVkRXhwcmVzc2lvbj17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJhZGlvQnV0dG9uVGV4dFByb3BlcnR5PXt2YWx1ZUxpc3REZXNjcmlwdGlvblBhdGh9XG5cdFx0XHRcdHJhZGlvQnV0dG9uS2V5UHJvcGVydHk9e3ZhbHVlTGlzdEtleVBhdGh9XG5cdFx0XHRcdGhvcml6b250YWxMYXlvdXQ9e2ZpZWxkLmZvcm1hdE9wdGlvbnMucmFkaW9CdXR0b25zSG9yaXpvbnRhbExheW91dH1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dFdpdGhWYWx1ZUhlbHAgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZFR5cGVzPihcblx0XHRcdGZpZWxkLm1ldGFQYXRoLFxuXHRcdFx0ZmllbGQuY29udGV4dFBhdGhcblx0XHQpO1xuXG5cdFx0Y29uc3QgZGVsZWdhdGUgPSBGaWVsZEhlbHBlci5jb21wdXRlRmllbGRCYXNlRGVsZWdhdGUoXG5cdFx0XHRcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRCYXNlRGVsZWdhdGVcIixcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCBhcyBib29sZWFuXG5cdFx0KTtcblx0XHRjb25zdCBkaXNwbGF5ID0gVUlGb3JtYXR0ZXIuZ2V0RmllbGREaXNwbGF5KFxuXHRcdFx0ZmllbGQucHJvcGVydHksXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmRpc3BsYXlNb2RlIGFzIHN0cmluZyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXHRcdGNvbnN0IGhhc011bHRpbGluZUFubm90YXRpb24gPSAhIWZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ7XG5cdFx0Y29uc3QgbXVsdGlwbGVMaW5lcyA9IGdldE11bHRpcGxlTGluZXNGb3JEYXRhRmllbGQoZmllbGQsIGhhc011bHRpbGluZUFubm90YXRpb24pO1xuXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdGNvbnN0IGxhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZCBhcyB1bmtub3duIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkVHlwZXM+LCB7XG5cdFx0XHRjb250ZXh0OiBmaWVsZC5tZXRhUGF0aFxuXHRcdH0pO1xuXG5cdFx0bGV0IG9wdGlvbmFsQ29udGVudEVkaXQgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS50eXBlID09PSBcIkVkbS5TdHJpbmdcIiAmJiBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKSB7XG5cdFx0XHRvcHRpb25hbENvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHQ8VGV4dEFyZWFcblx0XHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHJvd3M9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dExpbmVzRWRpdH1cblx0XHRcdFx0XHRncm93aW5nPXsoZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMgYXMgdW5rbm93biBhcyBudW1iZXIpID4gMCA/IHRydWUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0Z3Jvd2luZ01heExpbmVzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lc31cblx0XHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgdW5rbm93biBhcyAob0V2ZW50OiBJbnB1dEJhc2UkQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0bGV0IG9wdGlvbmFsTGF5b3V0RGF0YSA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID09PSB0cnVlKSB7XG5cdFx0XHRvcHRpb25hbExheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2hvd0FzUmFkaW9CdXR0b24oZmllbGQpICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8RmllbGRcblx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRcdGRlbGVnYXRlPXtkZWxlZ2F0ZX1cblx0XHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cGxhY2Vob2xkZXI9e2ZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyfVxuXHRcdFx0XHRcdHZhbHVlU3RhdGU9e2ZpZWxkLnZhbHVlU3RhdGV9XG5cdFx0XHRcdFx0ZWRpdE1vZGU9e2ZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT17ZmllbGQudGV4dEJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdFx0bXVsdGlwbGVMaW5lcz17bXVsdGlwbGVMaW5lcyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBtdWx0aXBsZUxpbmVzfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17ZmllbGQudmFsdWVIZWxwSWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sMSB8IHN0cmluZz59XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogRmllbGQkQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50RWRpdDogb3B0aW9uYWxDb250ZW50RWRpdCxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IG9wdGlvbmFsTGF5b3V0RGF0YSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9GaWVsZD5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDaGVja0JveCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENoZWNrQm94VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBpc0NoZWNrQm94R3JvdXBJdGVtID0gZmllbGQuZm9ybWF0T3B0aW9ucy5pc0ZpZWxkR3JvdXBJdGVtID09PSB0cnVlO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q2hlY2tCb3hcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRyZXF1aXJlZD17aXNDaGVja0JveEdyb3VwSXRlbSA/IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0c2VsZWN0ZWQ9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHR0ZXh0PXtpc0NoZWNrQm94R3JvdXBJdGVtID8gZmllbGQubGFiZWwgOiB1bmRlZmluZWR9XG5cdFx0XHRcdHdyYXBwaW5nPXtpc0NoZWNrQm94R3JvdXBJdGVtID8gdHJ1ZSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdHNlbGVjdD17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogQ2hlY2tCb3gkU2VsZWN0RXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdDwvQ2hlY2tCb3g+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBUZXh0QXJlYSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRleHRBcmVhVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBncm93aW5nID0gZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXMgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRjb25zdCBzaG93RXhjZWVkZWRUZXh0ID0gISFmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMZW5ndGg7XG5cblx0XHQvL3VuZm9ydHVuYXRlbHkgdGhpcyBvbmUgaXMgYSBcImRpZmZlcmVudFwiIGxheW91dERhdGEgdGhhbiB0aGUgb3RoZXJzLCB0aGVyZWZvcmUgdGhlIHJldXNlIGZ1bmN0aW9uIGZyb20gYWJvdmUgY2Fubm90IGJlIHVzZWQgZm9yIHRoZSB0ZXh0QXJlYSB0ZW1wbGF0ZVxuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxUZXh0QXJlYUV4XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXtmaWVsZC5lZGl0U3R5bGVQbGFjZWhvbGRlcn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cm93cz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TGluZXNFZGl0fVxuXHRcdFx0XHRncm93aW5nPXtncm93aW5nfVxuXHRcdFx0XHRncm93aW5nTWF4TGluZXM9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzfVxuXHRcdFx0XHRjb2xzPXszMDB9IC8vQXMgdGhlIGRlZmF1bHQgaXMgMjAsIHRoZSBcImNvbHNcIiBwcm9wZXJ0eSBpcyBjb25maWd1cmVkIHdpdGggYSB2YWx1ZSBvZiAzMDAgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHRleHRhcmVhIHdpbGwgb2NjdXB5IGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRlZGl0YWJsZT17ZmllbGQuZWRpdGFibGVFeHByZXNzaW9ufVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdG1heExlbmd0aD17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGVuZ3RofVxuXHRcdFx0XHRzaG93RXhjZWVkZWRUZXh0PXtzaG93RXhjZWVkZWRUZXh0fVxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlIGFzIChvRXZlbnQ6IElucHV0QmFzZSRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogbGF5b3V0RGF0YSxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9UZXh0QXJlYUV4PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgUmF0aW5nSW5kaWNhdG9yIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0UmF0aW5nSW5kaWNhdG9yVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IHRvb2x0aXAgPSBmaWVsZC5yYXRpbmdJbmRpY2F0b3JUb29sdGlwIHx8IFwie3NhcC5mZS5pMThuPlRfQ09NTU9OX1JBVElOR19JTkRJQ0FUT1JfVElUTEVfTEFCRUx9XCI7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFJhdGluZ0luZGljYXRvclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdG1heFZhbHVlPXtmaWVsZC5yYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdHRvb2x0aXA9e3Rvb2x0aXB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGljb25TaXplPVwiMS4zNzVyZW1cIlxuXHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpblRvcEJvdHRvbVwiXG5cdFx0XHRcdGVkaXRhYmxlPVwidHJ1ZVwiXG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2UgYXMgKG9FdmVudDogUmF0aW5nSW5kaWNhdG9yJENoYW5nZUV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IEVkaXRTdHlsZS5nZXRMYXlvdXREYXRhKGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9SYXRpbmdJbmRpY2F0b3I+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogSGVscHMgdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IGVkaXQgZnVuY3Rpb25hbGl0eSAvIHRlbXBsYXRpbmcuXG5cdCAqIEluY2x1ZGluZyBhIHdyYXBwZXIgYW4gaGJveCBpbiBjYXNlIG9mIGNvbGxhYm9yYXRpb24gbW9kZSBmaW5hbGx5XG5cdCAqIGl0IGNhbGxzIGludGVybmFsbHkgRWRpdFN0eWxlLmdldFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGVXaXRoV3JhcHBlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBjb250ZW50RWRpdDtcblxuXHRcdGlmICgoZmllbGQuZWRpdE1vZGUgPz8gZmllbGQuY29tcHV0ZWRFZGl0TW9kZSkgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSAmJiAhIWZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8/IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aW9uSEJveCB3aWR0aD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiRW5kXCI+XG5cdFx0XHRcdFx0XHR7RWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0Q29sbGFib3JhdGlvbkF2YXRhcihmaWVsZCl9XG5cdFx0XHRcdFx0PC9Db2xsYWJvcmF0aW9uSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gRWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudEVkaXQgfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dE1hc2sgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbmFsTWFza0lucHV0UnVsZXMgPSBbXTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25tZW50KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQubWFzaz8ubWFza1J1bGUpIHtcblx0XHRcdGZvciAoY29uc3QgcnVsZSBvZiBmaWVsZC5tYXNrLm1hc2tSdWxlKSB7XG5cdFx0XHRcdG9wdGlvbmFsTWFza0lucHV0UnVsZXMucHVzaCg8TWFza0lucHV0UnVsZSBtYXNrRm9ybWF0U3ltYm9sPXtydWxlLnN5bWJvbH0gcmVnZXg9e3J1bGUucmVnZXh9IC8+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1hc2tJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXNrPXtmaWVsZC5tYXNrPy5tYXNrfVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sPXtmaWVsZC5tYXNrPy5wbGFjZWhvbGRlclN5bWJvbH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlIGFzIChvRXZlbnQ6IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRydWxlczogb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NYXNrSW5wdXQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5lZGl0U3R5bGUpIHtcblx0XHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuKSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiVGltZVBpY2tlclwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZCwgZmllbGQuZWRpdFN0eWxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIklucHV0V2l0aFZhbHVlSGVscFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0V2l0aFZhbHVlSGVscFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiUmF0aW5nSW5kaWNhdG9yXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dEFyZWFcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIklucHV0TWFza1wiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0VBcUNBLE1BQU1BLFNBQVMsR0FBRztJQUNqQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0lBQ0NDLGFBQWFBLENBQUNDLEtBQTJCLEVBQVU7TUFDbEQsSUFBSUMsVUFBVSxHQUFHLEVBQUU7TUFDbkIsSUFBSUQsS0FBSyxDQUFDRSxvQkFBb0IsRUFBRTtRQUMvQkQsVUFBVSxHQUFHRSxJQUFBLENBQUNDLFlBQVk7VUFBQ0MsVUFBVSxFQUFDO1FBQUcsQ0FBRSxDQUFDO01BQzdDO01BQ0EsT0FBT0osVUFBVTtJQUNsQixDQUFDO0lBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDSyxzQkFBc0JBLENBQUNOLEtBQTJCLEVBQVU7TUFDM0QsTUFBTU8s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
|
|
490
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFZGl0U3R5bGUiLCJnZXRMYXlvdXREYXRhIiwiZmllbGQiLCJsYXlvdXREYXRhIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJfanN4IiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbGxhYm9yYXRpb25BdmF0YXIiLCJDb2xsYWJvcmF0aXZlRHJhZnRIYW5kbGVyIiwibWV0YVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsImNvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNob3dBdmF0YXIiLCJnZXREYXRlVGltZVBpY2tlckdlbmVyaWMiLCJ0eXBlIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRleHRBbGlnbiIsImdldFRleHRBbGlnbm1lbnQiLCJmb3JtYXRPcHRpb25zIiwiZWRpdE1vZGVBc09iamVjdCIsImRhdGVUaW1lUGlja2VyUHJvcGVydGllcyIsImlkIiwiZWRpdFN0eWxlSWQiLCJ3aWR0aCIsImVkaXRhYmxlIiwiZWRpdGFibGVFeHByZXNzaW9uIiwiZW5hYmxlZCIsImVuYWJsZWRFeHByZXNzaW9uIiwicmVxdWlyZWQiLCJyZXF1aXJlZEV4cHJlc3Npb24iLCJhcmlhTGFiZWxsZWRCeSIsInZhbHVlIiwidmFsdWVCaW5kaW5nRXhwcmVzc2lvbiIsImZpZWxkR3JvdXBJZHMiLCJzaG93VGltZXpvbmUiLCJtaW5EYXRlIiwibWluRGF0ZUV4cHJlc3Npb24iLCJ1bmRlZmluZWQiLCJtYXhEYXRlIiwibWF4RGF0ZUV4cHJlc3Npb24iLCJjaGFuZ2UiLCJldmVudEhhbmRsZXJzIiwibGl2ZUNoYW5nZSIsInZhbHVlRm9ybWF0IiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiZ2V0RGF0ZVRpbWVQaWNrZXIiLCJkYXRlVGltZVBpY2tlclR5cGUiLCJkYXRlVGltZVBpY2tlciIsIkRhdGVQaWNrZXIiLCJjaGlsZHJlbiIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZGF0YVNvdXJjZVBhdGgiLCJEYXRlVGltZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJnZXRJbnB1dFRlbXBsYXRlIiwiSW5wdXQiLCJwbGFjZWhvbGRlciIsImVkaXRTdHlsZVBsYWNlaG9sZGVyIiwiZmllbGRXaWR0aCIsImRlc2NyaXB0aW9uIiwic3RhdGljRGVzY3JpcHRpb24iLCJlZGl0U3R5bGUiLCJtYXhMZW5ndGgiLCJ0ZXh0TWF4TGVuZ3RoIiwic2hvd0FzUmFkaW9CdXR0b24iLCJyYWRpb0J1dHRvbkNvbmZpZ3VyZWQiLCJwcm9wZXJ0eSIsImFubm90YXRpb25zIiwiQ29tbW9uIiwiVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5IiwidmFsdWVPZiIsImZpZWxkRWRpdFN0eWxlIiwidmFsdWVMaXN0UGFyYW1ldGVySW5PdXQiLCJWYWx1ZUxpc3QiLCJQYXJhbWV0ZXJzIiwiZmluZCIsInZhbHVlTGlzdFBhcmFtZXRlciIsIiRUeXBlIiwiTG9jYWxEYXRhUHJvcGVydHkiLCJuYW1lIiwiVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzIiwiZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZSIsImZvckJvb2xlYW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmaXhlZFZhbHVlc1BhdGgiLCJDb2xsZWN0aW9uUGF0aCIsInZhbHVlTGlzdEtleVBhdGgiLCJwYXRoSW5Nb2RlbCIsIlZhbHVlTGlzdFByb3BlcnR5IiwidmFsdWVMaXN0RGVzY3JpcHRpb25QYXRoIiwidmFsdWVIZWxwS2V5VGV4dEFubm90YXRpb25QYXRoIiwidGFyZ2V0RW50aXR5VHlwZSIsInJlc29sdmVQYXRoIiwiZW50aXR5VHlwZSIsImtleXMiLCJUZXh0IiwicGF0aCIsInBvc3NpYmxlVmFsdWVzIiwia2V5IiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiUmFkaW9CdXR0b25zIiwicmFkaW9CdXR0b25UZXh0UHJvcGVydHkiLCJyYWRpb0J1dHRvbktleVByb3BlcnR5IiwiaG9yaXpvbnRhbExheW91dCIsInJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXQiLCJnZXRJbnB1dFdpdGhWYWx1ZUhlbHBUZW1wbGF0ZSIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJkZWxlZ2F0ZSIsIkZpZWxkSGVscGVyIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImRpc3BsYXkiLCJVSUZvcm1hdHRlciIsImdldEZpZWxkRGlzcGxheSIsImRpc3BsYXlNb2RlIiwiaGFzTXVsdGlsaW5lQW5ub3RhdGlvbiIsIlVJIiwiTXVsdGlMaW5lVGV4dCIsIm11bHRpcGxlTGluZXMiLCJnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkIiwibGFiZWwiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsIm9wdGlvbmFsQ29udGVudEVkaXQiLCJUZXh0QXJlYSIsInJvd3MiLCJ0ZXh0TGluZXNFZGl0IiwiZ3Jvd2luZyIsInRleHRNYXhMaW5lcyIsImdyb3dpbmdNYXhMaW5lcyIsIm9wdGlvbmFsTGF5b3V0RGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWVTdGF0ZSIsIkZpZWxkIiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiYWRkaXRpb25hbFZhbHVlIiwidGV4dEJpbmRpbmdFeHByZXNzaW9uIiwidmFsdWVIZWxwIiwidmFsdWVIZWxwSWQiLCJjb250ZW50RWRpdCIsImdldENoZWNrQm94VGVtcGxhdGUiLCJpc0NoZWNrQm94R3JvdXBJdGVtIiwiaXNGaWVsZEdyb3VwSXRlbSIsIkNoZWNrQm94Iiwic2VsZWN0ZWQiLCJ3cmFwcGluZyIsInNlbGVjdCIsImdldFRleHRBcmVhVGVtcGxhdGUiLCJzaG93RXhjZWVkZWRUZXh0IiwiVGV4dEFyZWFFeCIsImNvbHMiLCJnZXRSYXRpbmdJbmRpY2F0b3JUZW1wbGF0ZSIsInRvb2x0aXAiLCJyYXRpbmdJbmRpY2F0b3JUb29sdGlwIiwiUmF0aW5nSW5kaWNhdG9yIiwibWF4VmFsdWUiLCJyYXRpbmdJbmRpY2F0b3JUYXJnZXRWYWx1ZSIsImljb25TaXplIiwiY2xhc3MiLCJnZXRUZW1wbGF0ZVdpdGhXcmFwcGVyIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJfanN4cyIsIkNvbGxhYm9yYXRpb25IQm94IiwiYWxpZ25JdGVtcyIsImdldFRlbXBsYXRlIiwiZ2V0SW5wdXRNYXNrVGVtcGxhdGUiLCJvcHRpb25hbE1hc2tJbnB1dFJ1bGVzIiwibWFzayIsIm1hc2tSdWxlIiwicnVsZSIsInB1c2giLCJNYXNrSW5wdXRSdWxlIiwibWFza0Zvcm1hdFN5bWJvbCIsInN5bWJvbCIsInJlZ2V4IiwiTWFza0lucHV0IiwicGxhY2Vob2xkZXJTeW1ib2wiLCJydWxlcyIsImlubmVyRmllbGRDb250ZW50IiwidXNlUmFkaW9CdXR0b25zRm9yQm9vbGVhbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWRpdFN0eWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlIZWxwZXJcIjtcbmltcG9ydCAqIGFzIFVJRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25IQm94IGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL0NvbGxhYm9yYXRpb25IQm94XCI7XG5pbXBvcnQgUmFkaW9CdXR0b25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1JhZGlvQnV0dG9uc1wiO1xuaW1wb3J0IHsgZ2V0TXVsdGlwbGVMaW5lc0ZvckRhdGFGaWVsZCwgZ2V0VGV4dEFsaWdubWVudCB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkVGVtcGxhdGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZEJsb2NrUHJvcGVydGllcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2ZpZWxkL0ZpZWxkU3RydWN0dXJlSGVscGVyXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tIFwic2FwL20vRGF0ZVBpY2tlclwiO1xuaW1wb3J0IERhdGVUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9EYXRlVGltZVBpY2tlclwiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgdHlwZSB7IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vTWFza0lucHV0XCI7XG5pbXBvcnQgTWFza0lucHV0IGZyb20gXCJzYXAvbS9NYXNrSW5wdXRcIjtcbmltcG9ydCBNYXNrSW5wdXRSdWxlIGZyb20gXCJzYXAvbS9NYXNrSW5wdXRSdWxlXCI7XG5pbXBvcnQgUmF0aW5nSW5kaWNhdG9yIGZyb20gXCJzYXAvbS9SYXRpbmdJbmRpY2F0b3JcIjtcbmltcG9ydCBUZXh0QXJlYSBmcm9tIFwic2FwL20vVGV4dEFyZWFcIjtcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gXCJzYXAvbS9UaW1lUGlja2VyXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udHJvbCwgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCwgZGVmYXVsdCBhcyBDb250cm9sMSB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL0ZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbFR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlciBmcm9tIFwiLi4vLi4vQ29sbGFib3JhdGl2ZURyYWZ0SGFuZGxlclwiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCIuLi8uLi9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IFRleHRBcmVhRXggZnJvbSBcIi4uLy4uL2ZpZWxkL1RleHRBcmVhRXhcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGFzIH0gZnJvbSBcIi4uLy4uL1RTWFV0aWxzXCI7XG5cbmNvbnN0IEVkaXRTdHlsZSA9IHtcblx0LyoqXG5cdCAqIEFuIGludGVybmFsIGhlbHBlciB0byByZXRyaWV2ZSB0aGUgcmV1c2VkIGxheW91dCBkYXRhLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGF5b3V0RGF0YShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBsYXlvdXREYXRhID0gXCJcIjtcblx0XHRpZiAoZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQpIHtcblx0XHRcdGxheW91dERhdGEgPSA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCI5XCIgLz47XG5cdFx0fVxuXHRcdHJldHVybiBsYXlvdXREYXRhO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGF2YXRhciBjb250cm9sIG5leHQgYSBmaWVsZCBsb2NrZWQuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBhdmF0YXJcblx0ICovXG5cdGdldENvbGxhYm9yYXRpb25BdmF0YXIoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbGxhYm9yYXRpdmVEcmFmdEhhbmRsZXJcblx0XHRcdFx0bWV0YVBhdGg9e2dldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dBdmF0YXI9e3RydWV9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyBhIHRlbXBsYXRlIGZvciBvbmUgb2YgdGhlIHBpY2tlcnMgcmVmZXJlbmNlIGluIHRoZSB0eXBlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0eXBlIFJlZmVyZW5jZSB0byBvbmUgb2YgdGhlIGVkaXQgc3R5bGUgcGlja2VyIHR5cGVzXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0ZVRpbWVQaWNrZXJHZW5lcmljKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgdHlwZTogXCJEYXRlUGlja2VyXCIgfCBcIkRhdGVUaW1lUGlja2VyXCIgfCBcIlRpbWVQaWNrZXJcIik6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkVHlwZXM+KGZpZWxkLm1ldGFQYXRoLCBmaWVsZC5jb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGV4dEFsaWduID0gZ2V0VGV4dEFsaWdubWVudChcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0ZmllbGQuZWRpdE1vZGVBc09iamVjdCBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCk7XG5cblx0XHRjb25zdCBkYXRlVGltZVBpY2tlclByb3BlcnRpZXMgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiLFxuXHRcdFx0aWQ6IGZpZWxkLmVkaXRTdHlsZUlkLFxuXHRcdFx0d2lkdGg6IFwiMTAwJVwiLFxuXHRcdFx0ZWRpdGFibGU6IGZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdGVuYWJsZWQ6IGZpZWxkLmVuYWJsZWRFeHByZXNzaW9uLFxuXHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbixcblx0XHRcdHRleHRBbGlnbjogdGV4dEFsaWduLFxuXHRcdFx0YXJpYUxhYmVsbGVkQnk6IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz4sXG5cdFx0XHR2YWx1ZTogZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbixcblx0XHRcdGZpZWxkR3JvdXBJZHM6IGZpZWxkLmZpZWxkR3JvdXBJZHMsXG5cdFx0XHRzaG93VGltZXpvbmU6IGZpZWxkLnNob3dUaW1lem9uZSxcblx0XHRcdG1pbkRhdGU6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiB8fCB0eXBlID09PSBcIkRhdGVQaWNrZXJcIiA/IGZpZWxkLm1pbkRhdGVFeHByZXNzaW9uIDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4RGF0ZTogdHlwZSA9PT0gXCJEYXRlVGltZVBpY2tlclwiIHx8IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gZmllbGQubWF4RGF0ZUV4cHJlc3Npb24gOiB1bmRlZmluZWQsXG5cdFx0XHRjaGFuZ2U6IHR5cGUgPT09IFwiRGF0ZVRpbWVQaWNrZXJcIiA/IGZpZWxkLmNoYW5nZSB8fCBmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZSA6IGZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlLFxuXHRcdFx0bGl2ZUNoYW5nZTogZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlLFxuXHRcdFx0dmFsdWVGb3JtYXQ6IHR5cGUgPT09IFwiRGF0ZVBpY2tlclwiID8gXCJtZWRpdW1cIiA6IHVuZGVmaW5lZCxcblx0XHRcdHZhbGlkYXRlRmllbGRHcm91cDogZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZFxuXHRcdH07XG5cblx0XHRmdW5jdGlvbiBnZXREYXRlVGltZVBpY2tlcihkYXRlVGltZVBpY2tlclR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0XHRsZXQgZGF0ZVRpbWVQaWNrZXI7XG5cdFx0XHRzd2l0Y2ggKGRhdGVUaW1lUGlja2VyVHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0XHRcdGRhdGVUaW1lUGlja2VyID0gKFxuXHRcdFx0XHRcdFx0PERhdGVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVQaWNrZXI+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8RGF0ZVRpbWVQaWNrZXIgey4uLmRhdGVUaW1lUGlja2VyUHJvcGVydGllc30+XG5cdFx0XHRcdFx0XHRcdHt7IGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+IH19XG5cdFx0XHRcdFx0XHQ8L0RhdGVUaW1lUGlja2VyPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJUaW1lUGlja2VyXCI6XG5cdFx0XHRcdFx0ZGF0ZVRpbWVQaWNrZXIgPSAoXG5cdFx0XHRcdFx0XHQ8VGltZVBpY2tlciB7Li4uZGF0ZVRpbWVQaWNrZXJQcm9wZXJ0aWVzfT5cblx0XHRcdFx0XHRcdFx0e3sgY3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz4gfX1cblx0XHRcdFx0XHRcdDwvVGltZVBpY2tlcj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGVUaW1lUGlja2VyO1xuXHRcdH1cblxuXHRcdHJldHVybiBnZXREYXRlVGltZVBpY2tlcih0eXBlKTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldElucHV0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGZpZWxkV2lkdGg9e1wiNzAlXCJ9XG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtmaWVsZC5zdGF0aWNEZXNjcmlwdGlvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdHJlcXVpcmVkPXtmaWVsZC5yZXF1aXJlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0XHR0eXBlPXtmaWVsZC5lZGl0U3R5bGUgPT09IFwiTWFza2VkXCIgPyBcIlBhc3N3b3JkXCIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXhMZW5ndGg9e2ZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aH1cblx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHR2YWxpZGF0ZUZpZWxkR3JvdXA9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudmFsaWRhdGVGaWVsZEdyb3VwIGFzIChvRXZlbnQ6IENvbnRyb2wkVmFsaWRhdGVGaWVsZEdyb3VwRXZlbnQpID0+IHZvaWR9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogRWRpdFN0eWxlLmdldExheW91dERhdGEoZmllbGQpLFxuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0lucHV0PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFJldHVybnMgaWYgYSBmaWVsZCBzaGFsbCBiZSB0ZW1wbGF0ZWQgYXMgYSByYWRpbyBidXR0b24gZ3JvdXAuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGV2YWx1YXRpb24gcmVzdWx0XG5cdCAqL1xuXHRzaG93QXNSYWRpb0J1dHRvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBib29sZWFuIHtcblx0XHQvLyBEZXRlcm1pbmUgaWYgd2UgbmVlZCB0byByZW5kZXIgdGhlIGZpZWxkIGFzIGEgcmFkaW8gYnV0dG9uIGdyb3VwXG5cdFx0Ly8gVE9ETzogUmVtb3ZlIHRoZSBuZXh0IHR3byBsaW5lcyBvbmNlIFVYIHVwZGF0ZWQgdGhlIHZvY2FidWxhcnkgbW9kdWxlIGluY2x1ZGluZyB0aGUgbmV3IGV4cGVyaW1lbnRhbCBhbm5vdGF0aW9uXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCByYWRpb0J1dHRvbkNvbmZpZ3VyZWQ6IGJvb2xlYW4gPVxuXHRcdFx0ZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzICYmXG5cdFx0XHRoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMoZmllbGQucHJvcGVydHkpID09PSB0cnVlICYmXG5cdFx0XHQoKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5ICYmXG5cdFx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbi5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVmFsdWVMaXN0U2hvd1ZhbHVlc0ltbWVkaWF0ZWx5LnZhbHVlT2YoKSA9PT1cblx0XHRcdFx0XHR0cnVlKSB8fFxuXHRcdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLmZpZWxkRWRpdFN0eWxlID09PSBcIlJhZGlvQnV0dG9uc1wiKTtcblxuXHRcdC8vIEV4Y2x1ZGUgbm90IHN1cHBvcnRlZCBjYXNlc1xuXHRcdC8vIC0gVmFsdWVMaXN0UGFyYW1hdGVySW5PdXQgLyAuLi5PdXQgbXVzdCBub3QgYmUgZW1wdHlcblx0XHQvLyAtIFZhbHVlTGlzdFJlbGV2YW50UXVhbGlmaWVycyBhbm5vdGF0aW9uIG11c3Qgbm90IGJlIHVzZWRcblx0XHQvLyBGdXJ0aGVyIGNhc2VzIG1heSBub3QgbWFrZSBzZW5zZSB3aXRoIHJhZGlvIGJ1dHRvbnMgYnV0IHdlIGRvIG5vdCBleHBsaWNpdGx5IGV4Y2x1ZGUgdGhlbSBidXQgbWVudGlvbiB0aGlzIGluIGRvY3VtZW50YXRpb24uXG5cdFx0Ly8gQ2hlY2sgZG9jdW1lbnRhdGlvbiwgZGlzY3VzcyBhbmQgZGVjaWRlIGJlZm9yZSBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgaGVyZS5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyYWRpb0J1dHRvbkNvbmZpZ3VyZWQgJiZcblx0XHRcdHZhbHVlTGlzdFBhcmFtZXRlckluT3V0ICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdCFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhZGlvQnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBmb3JCb29sZWFuXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgcmFkaW8gYnV0dG9uIGRlZmluaXRpb25cblx0ICovXG5cdGdldFJhZGlvQnV0dG9uVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBmb3JCb29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGZpeGVkVmFsdWVzUGF0aCA9IFwiL1wiICsgZmllbGQucHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdD8uQ29sbGVjdGlvblBhdGg7XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RQYXJhbWV0ZXJJbk91dCA9IGZpZWxkLnByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5WYWx1ZUxpc3Q/LlBhcmFtZXRlcnMuZmluZChcblx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIpID0+XG5cdFx0XHRcdCh2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlckluT3V0XCIgfHxcblx0XHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFBhcmFtZXRlck91dFwiKSAmJlxuXHRcdFx0XHR2YWx1ZUxpc3RQYXJhbWV0ZXIuTG9jYWxEYXRhUHJvcGVydHkudmFsdWUgPT09IGZpZWxkLnByb3BlcnR5Lm5hbWVcblx0XHQpO1xuXG5cdFx0Ly8gd2Uga25vdyB0aGF0IGEgdmFsdWVMaXN0UHJvcGVydHkgZXhpc3RzIGJlY2F1c2Ugd2UgY2hlY2sgdGhpcyBhbHJlYWR5IGluIHNob3dBc1JhZGlvQnV0dG9uXG5cdFx0Y29uc3QgdmFsdWVMaXN0S2V5UGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlTGlzdFBhcmFtZXRlckluT3V0Py5WYWx1ZUxpc3RQcm9wZXJ0eSBhcyBzdHJpbmcpID8/IHBhdGhJbk1vZGVsKFwiXCIpO1xuXG5cdFx0bGV0IHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aDtcblx0XHRjb25zdCB2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGggPVxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLnJlc29sdmVQYXRoKGZpeGVkVmFsdWVzUGF0aCk/LmVudGl0eVR5cGUua2V5c1swXS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5wYXRoO1xuXHRcdGlmICh2YWx1ZUhlbHBLZXlUZXh0QW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHBhdGhJbk1vZGVsKHZhbHVlSGVscEtleVRleHRBbm5vdGF0aW9uUGF0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbHVlTGlzdERlc2NyaXB0aW9uUGF0aCA9IHZhbHVlTGlzdEtleVBhdGg7XG5cdFx0fVxuXG5cdFx0bGV0IHBvc3NpYmxlVmFsdWVzOiB7IGtleTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGw7IHRleHQ6IHN0cmluZyB9W10gfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGZvckJvb2xlYW4pIHtcblx0XHRcdHBvc3NpYmxlVmFsdWVzID0gW1xuXHRcdFx0XHR7IGtleTogdHJ1ZSwgdGV4dDogZmllbGQuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1JBRElPQlVUVE9OU19CT09MRUFOX1lFU1wiKSB9LFxuXHRcdFx0XHR7IGtleTogZmFsc2UsIHRleHQ6IGZpZWxkLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9SQURJT0JVVFRPTlNfQk9PTEVBTl9OT1wiKSB9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8UmFkaW9CdXR0b25zXG5cdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0cG9zc2libGVWYWx1ZXM9e3Bvc3NpYmxlVmFsdWVzfVxuXHRcdFx0XHRyZXF1aXJlZEV4cHJlc3Npb249e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRmaXhlZFZhbHVlc1BhdGg9e2ZpeGVkVmFsdWVzUGF0aCBhcyB1bmtub3duIGFzIGB7JHtzdHJpbmd9fWB9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRlZGl0YWJsZUV4cHJlc3Npb249e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZEV4cHJlc3Npb249e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyYWRpb0J1dHRvblRleHRQcm9wZXJ0eT17dmFsdWVMaXN0RGVzY3JpcHRpb25QYXRofVxuXHRcdFx0XHRyYWRpb0J1dHRvbktleVByb3BlcnR5PXt2YWx1ZUxpc3RLZXlQYXRofVxuXHRcdFx0XHRob3Jpem9udGFsTGF5b3V0PXtmaWVsZC5mb3JtYXRPcHRpb25zLnJhZGlvQnV0dG9uc0hvcml6b250YWxMYXlvdXR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgSW5wdXRXaXRoVmFsdWVIZWxwIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0SW5wdXRXaXRoVmFsdWVIZWxwVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oXG5cdFx0XHRmaWVsZC5tZXRhUGF0aCxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoXG5cdFx0KTtcblxuXHRcdGNvbnN0IGRlbGVnYXRlID0gRmllbGRIZWxwZXIuY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlKFxuXHRcdFx0XCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkQmFzZURlbGVnYXRlXCIsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgYXMgYm9vbGVhblxuXHRcdCk7XG5cdFx0Y29uc3QgZGlzcGxheSA9IFVJRm9ybWF0dGVyLmdldEZpZWxkRGlzcGxheShcblx0XHRcdGZpZWxkLnByb3BlcnR5LFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucy5kaXNwbGF5TW9kZSBhcyBzdHJpbmcsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRjb25zdCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uID0gISFmaWVsZC5wcm9wZXJ0eT8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0O1xuXHRcdGNvbnN0IG11bHRpcGxlTGluZXMgPSBnZXRNdWx0aXBsZUxpbmVzRm9yRGF0YUZpZWxkKGZpZWxkLCBoYXNNdWx0aWxpbmVBbm5vdGF0aW9uKTtcblxuXHRcdGNvbnN0IHRleHRBbGlnbiA9IGdldFRleHRBbGlnbm1lbnQoXG5cdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRcdFx0ZmllbGQuZm9ybWF0T3B0aW9ucyxcblx0XHRcdGZpZWxkLmVkaXRNb2RlQXNPYmplY3QgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRjb25zdCBsYWJlbCA9IEZpZWxkSGVscGVyLmNvbXB1dGVMYWJlbFRleHQoZmllbGQgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZFR5cGVzPiwge1xuXHRcdFx0Y29udGV4dDogZmllbGQubWV0YVBhdGhcblx0XHR9KTtcblxuXHRcdGxldCBvcHRpb25hbENvbnRlbnRFZGl0ID0gXCJcIjtcblx0XHRpZiAoZmllbGQucHJvcGVydHkudHlwZSA9PT0gXCJFZG0uU3RyaW5nXCIgJiYgaGFzTXVsdGlsaW5lQW5ub3RhdGlvbikge1xuXHRcdFx0b3B0aW9uYWxDb250ZW50RWRpdCA9IChcblx0XHRcdFx0PFRleHRBcmVhXG5cdFx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdFx0Z3Jvd2luZz17KGZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExpbmVzIGFzIHVua25vd24gYXMgbnVtYmVyKSA+IDAgPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGxldCBvcHRpb25hbExheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0b3B0aW9uYWxMYXlvdXREYXRhID0gPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiOVwiIC8+O1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnNob3dBc1JhZGlvQnV0dG9uKGZpZWxkKSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZUN1c3RvbURhdGFzKFtcblx0XHRcdFx0eyBrZXk6IFwic291cmNlUGF0aFwiLCB2YWx1ZTogZmllbGQuZGF0YVNvdXJjZVBhdGggfSxcblx0XHRcdFx0eyBrZXk6IFwidmFsdWVTdGF0ZVwiLCB2YWx1ZTogZmllbGQudmFsdWVTdGF0ZSB9XG5cdFx0XHRdKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdFx0ZGVsZWdhdGU9e2RlbGVnYXRlfVxuXHRcdFx0XHRcdGlkPXtmaWVsZC5lZGl0U3R5bGVJZH1cblx0XHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdFx0ZWRpdE1vZGU9e2ZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGV9XG5cdFx0XHRcdFx0d2lkdGg9XCIxMDAlXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT17ZmllbGQudGV4dEJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRcdGRpc3BsYXk9e2Rpc3BsYXl9XG5cdFx0XHRcdFx0bXVsdGlwbGVMaW5lcz17bXVsdGlwbGVMaW5lcyA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBtdWx0aXBsZUxpbmVzfVxuXHRcdFx0XHRcdHZhbHVlSGVscD17ZmllbGQudmFsdWVIZWxwSWR9XG5cdFx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0XHR0ZXh0QWxpZ249e3RleHRBbGlnbn1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sMSB8IHN0cmluZz59XG5cdFx0XHRcdFx0bGFiZWw9e2xhYmVsfVxuXHRcdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlfVxuXHRcdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50RWRpdDogb3B0aW9uYWxDb250ZW50RWRpdCxcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IG9wdGlvbmFsTGF5b3V0RGF0YSxcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IGN1c3RvbURhdGFcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0ZpZWxkPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENoZWNrQm94IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQ2hlY2tCb3hHcm91cEl0ZW0gPSBmaWVsZC5mb3JtYXRPcHRpb25zLmlzRmllbGRHcm91cEl0ZW0gPT09IHRydWU7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDaGVja0JveFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHJlcXVpcmVkPXtpc0NoZWNrQm94R3JvdXBJdGVtID8gZmllbGQucmVxdWlyZWRFeHByZXNzaW9uIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRzZWxlY3RlZD17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0ZWRpdGFibGU9e2ZpZWxkLmVkaXRhYmxlRXhwcmVzc2lvbn1cblx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZW5hYmxlZEV4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHRleHQ9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyBmaWVsZC5sYWJlbCA6IHVuZGVmaW5lZH1cblx0XHRcdFx0d3JhcHBpbmc9e2lzQ2hlY2tCb3hHcm91cEl0ZW0gPyB0cnVlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0c2VsZWN0PXtmaWVsZC5ldmVudEhhbmRsZXJzLmNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0PC9DaGVja0JveD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFRleHRBcmVhIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGdyb3dpbmcgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMaW5lcyA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGNvbnN0IHNob3dFeGNlZWRlZFRleHQgPSAhIWZpZWxkLmZvcm1hdE9wdGlvbnMudGV4dE1heExlbmd0aDtcblxuXHRcdC8vdW5mb3J0dW5hdGVseSB0aGlzIG9uZSBpcyBhIFwiZGlmZmVyZW50XCIgbGF5b3V0RGF0YSB0aGFuIHRoZSBvdGhlcnMsIHRoZXJlZm9yZSB0aGUgcmV1c2UgZnVuY3Rpb24gZnJvbSBhYm92ZSBjYW5ub3QgYmUgdXNlZCBmb3IgdGhlIHRleHRBcmVhIHRlbXBsYXRlXG5cdFx0bGV0IGxheW91dERhdGEgPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCkge1xuXHRcdFx0bGF5b3V0RGF0YSA9IDxGbGV4SXRlbURhdGEgZ3Jvd0ZhY3Rvcj1cIjlcIiAvPjtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRBcmVhRXhcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHR2YWx1ZT17ZmllbGQudmFsdWVCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdFx0cGxhY2Vob2xkZXI9e2ZpZWxkLmVkaXRTdHlsZVBsYWNlaG9sZGVyfVxuXHRcdFx0XHRyZXF1aXJlZD17ZmllbGQucmVxdWlyZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRyb3dzPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRMaW5lc0VkaXR9XG5cdFx0XHRcdGdyb3dpbmc9e2dyb3dpbmd9XG5cdFx0XHRcdGdyb3dpbmdNYXhMaW5lcz17ZmllbGQuZm9ybWF0T3B0aW9ucy50ZXh0TWF4TGluZXN9XG5cdFx0XHRcdGNvbHM9ezMwMH0gLy9BcyB0aGUgZGVmYXVsdCBpcyAyMCwgdGhlIFwiY29sc1wiIHByb3BlcnR5IGlzIGNvbmZpZ3VyZWQgd2l0aCBhIHZhbHVlIG9mIDMwMCB0byBndWFyYW50ZWUgdGhhdCB0aGUgdGV4dGFyZWEgd2lsbCBvY2N1cHkgYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UuXG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmVuYWJsZWRFeHByZXNzaW9ufVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0bWF4TGVuZ3RoPXtmaWVsZC5mb3JtYXRPcHRpb25zLnRleHRNYXhMZW5ndGh9XG5cdFx0XHRcdHNob3dFeGNlZWRlZFRleHQ9e3Nob3dFeGNlZWRlZFRleHR9XG5cdFx0XHRcdGNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5jaGFuZ2V9XG5cdFx0XHRcdGxpdmVDaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGl2ZUNoYW5nZX1cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IGxheW91dERhdGEsXG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PVwic291cmNlUGF0aFwiIHZhbHVlPXtmaWVsZC5kYXRhU291cmNlUGF0aH0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvVGV4dEFyZWFFeD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFJhdGluZ0luZGljYXRvciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQucmF0aW5nSW5kaWNhdG9yVG9vbHRpcCB8fCBcIntzYXAuZmUuaTE4bj5UX0NPTU1PTl9SQVRJTkdfSU5ESUNBVE9SX1RJVExFX0xBQkVMfVwiO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxSYXRpbmdJbmRpY2F0b3Jcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkOiAnc2FwL2ZlL21hY3Jvcy9GaWVsZCd9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmVkaXRTdHlsZUlkfVxuXHRcdFx0XHRtYXhWYWx1ZT17ZmllbGQucmF0aW5nSW5kaWNhdG9yVGFyZ2V0VmFsdWV9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHR0b29sdGlwPXt0b29sdGlwfVxuXHRcdFx0XHRmaWVsZEdyb3VwSWRzPXtmaWVsZC5maWVsZEdyb3VwSWRzfVxuXHRcdFx0XHRpY29uU2l6ZT1cIjEuMzc1cmVtXCJcblx0XHRcdFx0Y2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIlxuXHRcdFx0XHRlZGl0YWJsZT1cInRydWVcIlxuXHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuY2hhbmdlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IEVkaXRTdHlsZS5nZXRMYXlvdXREYXRhKGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9SYXRpbmdJbmRpY2F0b3I+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogSGVscHMgdG8gY2FsY3VsYXRlIHRoZSBjb250ZW50IGVkaXQgZnVuY3Rpb25hbGl0eSAvIHRlbXBsYXRpbmcuXG5cdCAqIEluY2x1ZGluZyBhIHdyYXBwZXIgYW4gaGJveCBpbiBjYXNlIG9mIGNvbGxhYm9yYXRpb24gbW9kZSBmaW5hbGx5XG5cdCAqIGl0IGNhbGxzIGludGVybmFsbHkgRWRpdFN0eWxlLmdldFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGVXaXRoV3JhcHBlcihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBjb250ZW50RWRpdDtcblxuXHRcdGlmICgoZmllbGQuZWRpdE1vZGUgPz8gZmllbGQuY29tcHV0ZWRFZGl0TW9kZSkgIT09IEZpZWxkRWRpdE1vZGUuRGlzcGxheSAmJiAhIWZpZWxkLmVkaXRTdHlsZSkge1xuXHRcdFx0aWYgKGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8/IGZhbHNlKSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gKFxuXHRcdFx0XHRcdDxDb2xsYWJvcmF0aW9uSEJveCB3aWR0aD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiRW5kXCI+XG5cdFx0XHRcdFx0XHR7RWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKX1cblx0XHRcdFx0XHRcdHtFZGl0U3R5bGUuZ2V0Q29sbGFib3JhdGlvbkF2YXRhcihmaWVsZCl9XG5cdFx0XHRcdFx0PC9Db2xsYWJvcmF0aW9uSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnRlbnRFZGl0ID0gRWRpdFN0eWxlLmdldFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGVudEVkaXQgfHwgXCJcIjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBJbnB1dE1hc2sgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9wdGlvbmFsTWFza0lucHV0UnVsZXMgPSBbXTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRUeXBlcz4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCB0ZXh0QWxpZ24gPSBnZXRUZXh0QWxpZ25tZW50KFxuXHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHRmaWVsZC5lZGl0TW9kZUFzT2JqZWN0IGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQubWFzaz8ubWFza1J1bGUpIHtcblx0XHRcdGZvciAoY29uc3QgcnVsZSBvZiBmaWVsZC5tYXNrLm1hc2tSdWxlKSB7XG5cdFx0XHRcdG9wdGlvbmFsTWFza0lucHV0UnVsZXMucHVzaCg8TWFza0lucHV0UnVsZSBtYXNrRm9ybWF0U3ltYm9sPXtydWxlLnN5bWJvbH0gcmVnZXg9e3J1bGUucmVnZXh9IC8+KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1hc2tJbnB1dFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGQ6ICdzYXAvZmUvbWFjcm9zL0ZpZWxkJ31cIlxuXHRcdFx0XHRpZD17ZmllbGQuZWRpdFN0eWxlSWR9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZUJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0XHRwbGFjZWhvbGRlcj17ZmllbGQuZWRpdFN0eWxlUGxhY2Vob2xkZXJ9XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdGVkaXRhYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRtYXNrPXtmaWVsZC5tYXNrPy5tYXNrfVxuXHRcdFx0XHRlbmFibGVkPXtmaWVsZC5lbmFibGVkRXhwcmVzc2lvbn1cblx0XHRcdFx0cmVxdWlyZWQ9e2ZpZWxkLnJlcXVpcmVkRXhwcmVzc2lvbn1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dGV4dEFsaWduPXt0ZXh0QWxpZ259XG5cdFx0XHRcdHBsYWNlaG9sZGVyU3ltYm9sPXtmaWVsZC5tYXNrPy5wbGFjZWhvbGRlclN5bWJvbH1cblx0XHRcdFx0bGl2ZUNoYW5nZT17ZmllbGQuZXZlbnRIYW5kbGVycy5saXZlQ2hhbmdlIGFzIChvRXZlbnQ6IE1hc2tJbnB1dCRMaXZlQ2hhbmdlRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRydWxlczogb3B0aW9uYWxNYXNrSW5wdXRSdWxlcyxcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NYXNrSW5wdXQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogRW50cnkgcG9pbnQgZm9yIGZ1cnRoZXIgdGVtcGxhdGluZyBwcm9jZXNzaW5ncy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcblx0XHRsZXQgaW5uZXJGaWVsZENvbnRlbnQ7XG5cdFx0c3dpdGNoIChmaWVsZC5lZGl0U3R5bGUpIHtcblx0XHRcdGNhc2UgXCJDaGVja0JveFwiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy51c2VSYWRpb0J1dHRvbnNGb3JCb29sZWFuKSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0UmFkaW9CdXR0b25UZW1wbGF0ZShmaWVsZCwgdHJ1ZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0Q2hlY2tCb3hUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0ZVBpY2tlclwiOlxuXHRcdFx0Y2FzZSBcIkRhdGVUaW1lUGlja2VyXCI6XG5cdFx0XHRjYXNlIFwiVGltZVBpY2tlclwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldERhdGVUaW1lUGlja2VyR2VuZXJpYyhmaWVsZCwgZmllbGQuZWRpdFN0eWxlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiSW5wdXRcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTWFza2VkXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0SW5wdXRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIklucHV0V2l0aFZhbHVlSGVscFwiOiB7XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldElucHV0V2l0aFZhbHVlSGVscFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiUmF0aW5nSW5kaWNhdG9yXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRWRpdFN0eWxlLmdldFJhdGluZ0luZGljYXRvclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dEFyZWFcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBFZGl0U3R5bGUuZ2V0VGV4dEFyZWFUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIklucHV0TWFza1wiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IEVkaXRTdHlsZS5nZXRJbnB1dE1hc2tUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWdDQSxNQUFNQSxTQUFTLEdBQUc7SUFDakI7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUNDQyxhQUFhQSxDQUFDQyxLQUEyQixFQUFVO01BQ2xELElBQUlDLFVBQVUsR0FBRyxFQUFFO01BQ25CLElBQUlELEtBQUssQ0FBQ0Usb0JBQW9CLEVBQUU7UUFDL0JELFVBQVUsR0FBR0UsSUFBQSxDQUFDQyxZQUFZO1VBQUNDLFVBQVUsRUFBQztRQUFHLENBQUUsQ0FBQztNQUM3QztNQUNBLE9BQU9KLFVBQVU7SUFDbEIsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQ0ssc0JBQXNCQSxDQUFDTixL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
|
|
@@ -1,39 +1,34 @@
|
|
|
1
1
|
import type { DataFieldTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
2
2
|
import type { BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
|
|
3
|
-
import {
|
|
4
|
-
import EventDelegateHook from "sap/fe/base/EventDelegateHook";
|
|
3
|
+
import { pathInModel } from "sap/fe/base/BindingToolkit";
|
|
5
4
|
import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
|
|
6
|
-
import
|
|
5
|
+
import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
7
6
|
import { hasValueHelpWithFixedValues } from "sap/fe/core/templating/PropertyHelper";
|
|
8
7
|
import * as UIFormatter from "sap/fe/core/templating/UIFormatters";
|
|
9
8
|
import CollaborationHBox from "sap/fe/macros/controls/CollaborationHBox";
|
|
10
9
|
import RadioButtons from "sap/fe/macros/controls/RadioButtons";
|
|
11
10
|
import { getMultipleLinesForDataField, getTextAlignment } from "sap/fe/macros/field/FieldTemplating";
|
|
12
11
|
import type { FieldBlockProperties } from "sap/fe/macros/internal/field/FieldStructureHelper";
|
|
13
|
-
import Avatar from "sap/m/Avatar";
|
|
14
|
-
import type { CheckBox$SelectEvent } from "sap/m/CheckBox";
|
|
15
12
|
import CheckBox from "sap/m/CheckBox";
|
|
16
13
|
import DatePicker from "sap/m/DatePicker";
|
|
17
14
|
import DateTimePicker from "sap/m/DateTimePicker";
|
|
18
15
|
import FlexItemData from "sap/m/FlexItemData";
|
|
19
16
|
import Input from "sap/m/Input";
|
|
20
|
-
import type { InputBase$ChangeEvent } from "sap/m/InputBase";
|
|
21
17
|
import type { MaskInput$LiveChangeEvent } from "sap/m/MaskInput";
|
|
22
18
|
import MaskInput from "sap/m/MaskInput";
|
|
23
19
|
import MaskInputRule from "sap/m/MaskInputRule";
|
|
24
|
-
import type { RatingIndicator$ChangeEvent } from "sap/m/RatingIndicator";
|
|
25
20
|
import RatingIndicator from "sap/m/RatingIndicator";
|
|
26
21
|
import TextArea from "sap/m/TextArea";
|
|
27
22
|
import TimePicker from "sap/m/TimePicker";
|
|
28
|
-
import type Event from "sap/ui/base/Event";
|
|
29
23
|
import type { default as Control, Control$ValidateFieldGroupEvent, default as Control1 } from "sap/ui/core/Control";
|
|
30
24
|
import CustomData from "sap/ui/core/CustomData";
|
|
31
|
-
import type { Field$ChangeEvent } from "sap/ui/mdc/Field";
|
|
32
|
-
import Field from "sap/ui/mdc/Field";
|
|
33
25
|
import FieldEditMode from "sap/ui/mdc/enums/FieldEditMode";
|
|
26
|
+
import Field from "sap/ui/mdc/Field";
|
|
34
27
|
import type { MetaModelType } from "../../../../../../../../types/metamodel_types";
|
|
28
|
+
import CollaborativeDraftHandler from "../../CollaborativeDraftHandler";
|
|
35
29
|
import FieldHelper from "../../field/FieldHelper";
|
|
36
30
|
import TextAreaEx from "../../field/TextAreaEx";
|
|
31
|
+
import { createCustomDatas } from "../../TSXUtils";
|
|
37
32
|
|
|
38
33
|
const EditStyle = {
|
|
39
34
|
/**
|
|
@@ -55,29 +50,12 @@ const EditStyle = {
|
|
|
55
50
|
* @returns An XML-based string with the definition of the avatar
|
|
56
51
|
*/
|
|
57
52
|
getCollaborationAvatar(field: FieldBlockProperties): string {
|
|
58
|
-
const collaborationHasActivityExpression = compileExpression(field.collaborationExpression);
|
|
59
|
-
const collaborationInitialsExpression = compileExpression(
|
|
60
|
-
UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityInitials)
|
|
61
|
-
);
|
|
62
|
-
const collaborationColorExpression = compileExpression(
|
|
63
|
-
UIFormatter.getCollaborationExpression(field.dataModelPath, CollaborationFormatters.getCollaborationActivityColor)
|
|
64
|
-
);
|
|
65
|
-
|
|
66
53
|
return (
|
|
67
|
-
<
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
customDisplaySize="1.5rem"
|
|
73
|
-
customFontSize="0.8rem"
|
|
74
|
-
backgroundColor={collaborationColorExpression}
|
|
75
|
-
press={field.eventHandlers.showCollaborationEditUser as unknown as ((oEvent: Event) => void) | undefined}
|
|
76
|
-
>
|
|
77
|
-
{{
|
|
78
|
-
dependents: <EventDelegateHook stopTapPropagation={true} />
|
|
79
|
-
}}
|
|
80
|
-
</Avatar>
|
|
54
|
+
<CollaborativeDraftHandler
|
|
55
|
+
metaPath={getContextRelativeTargetObjectPath(field.dataModelPath)}
|
|
56
|
+
contextPath={field.contextPath.getPath()}
|
|
57
|
+
showAvatar={true}
|
|
58
|
+
/>
|
|
81
59
|
);
|
|
82
60
|
},
|
|
83
61
|
|
|
@@ -109,10 +87,7 @@ const EditStyle = {
|
|
|
109
87
|
showTimezone: field.showTimezone,
|
|
110
88
|
minDate: type === "DateTimePicker" || type === "DatePicker" ? field.minDateExpression : undefined,
|
|
111
89
|
maxDate: type === "DateTimePicker" || type === "DatePicker" ? field.maxDateExpression : undefined,
|
|
112
|
-
change:
|
|
113
|
-
type === "DateTimePicker"
|
|
114
|
-
? ((field.change || field.eventHandlers.change) as unknown as (oEvent: InputBase$ChangeEvent) => void)
|
|
115
|
-
: (field.eventHandlers.change as unknown as (oEvent: InputBase$ChangeEvent) => void),
|
|
90
|
+
change: type === "DateTimePicker" ? field.change || field.eventHandlers.change : field.eventHandlers.change,
|
|
116
91
|
liveChange: field.eventHandlers.liveChange,
|
|
117
92
|
valueFormat: type === "DatePicker" ? "medium" : undefined,
|
|
118
93
|
validateFieldGroup: field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void
|
|
@@ -170,6 +145,7 @@ const EditStyle = {
|
|
|
170
145
|
value={field.valueBindingExpression}
|
|
171
146
|
placeholder={field.editStylePlaceholder}
|
|
172
147
|
width="100%"
|
|
148
|
+
fieldWidth={"70%"}
|
|
173
149
|
editable={field.editableExpression}
|
|
174
150
|
description={field.staticDescription}
|
|
175
151
|
enabled={field.enabledExpression}
|
|
@@ -179,7 +155,7 @@ const EditStyle = {
|
|
|
179
155
|
type={field.editStyle === "Masked" ? "Password" : undefined}
|
|
180
156
|
ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
|
|
181
157
|
maxLength={field.formatOptions.textMaxLength}
|
|
182
|
-
change={field.eventHandlers.change
|
|
158
|
+
change={field.eventHandlers.change}
|
|
183
159
|
liveChange={field.eventHandlers.liveChange}
|
|
184
160
|
validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
|
|
185
161
|
>
|
|
@@ -272,6 +248,7 @@ const EditStyle = {
|
|
|
272
248
|
fixedValuesPath={fixedValuesPath as unknown as `{${string}}`}
|
|
273
249
|
fieldGroupIds={field.fieldGroupIds}
|
|
274
250
|
value={field.valueBindingExpression}
|
|
251
|
+
editableExpression={field.editableExpression}
|
|
275
252
|
enabledExpression={field.enabledExpression}
|
|
276
253
|
radioButtonTextProperty={valueListDescriptionPath}
|
|
277
254
|
radioButtonKeyProperty={valueListKeyPath}
|
|
@@ -323,7 +300,7 @@ const EditStyle = {
|
|
|
323
300
|
growing={(field.formatOptions.textMaxLines as unknown as number) > 0 ? true : undefined}
|
|
324
301
|
growingMaxLines={field.formatOptions.textMaxLines}
|
|
325
302
|
width="100%"
|
|
326
|
-
change={field.eventHandlers.change
|
|
303
|
+
change={field.eventHandlers.change}
|
|
327
304
|
fieldGroupIds={field.fieldGroupIds}
|
|
328
305
|
/>
|
|
329
306
|
);
|
|
@@ -335,6 +312,10 @@ const EditStyle = {
|
|
|
335
312
|
}
|
|
336
313
|
|
|
337
314
|
if (this.showAsRadioButton(field) !== true) {
|
|
315
|
+
const customData = createCustomDatas([
|
|
316
|
+
{ key: "sourcePath", value: field.dataSourcePath },
|
|
317
|
+
{ key: "valueState", value: field.valueState }
|
|
318
|
+
]);
|
|
338
319
|
return (
|
|
339
320
|
<Field
|
|
340
321
|
core:require="{Field: 'sap/fe/macros/Field'}"
|
|
@@ -342,7 +323,6 @@ const EditStyle = {
|
|
|
342
323
|
id={field.editStyleId}
|
|
343
324
|
value={field.valueBindingExpression}
|
|
344
325
|
placeholder={field.editStylePlaceholder}
|
|
345
|
-
valueState={field.valueState}
|
|
346
326
|
editMode={field.editMode ?? field.computedEditMode}
|
|
347
327
|
width="100%"
|
|
348
328
|
required={field.requiredExpression}
|
|
@@ -354,14 +334,14 @@ const EditStyle = {
|
|
|
354
334
|
textAlign={textAlign}
|
|
355
335
|
ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control1 | string>}
|
|
356
336
|
label={label}
|
|
357
|
-
change={field.eventHandlers.change
|
|
337
|
+
change={field.eventHandlers.change}
|
|
358
338
|
liveChange={field.eventHandlers.liveChange}
|
|
359
339
|
validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
|
|
360
340
|
>
|
|
361
341
|
{{
|
|
362
342
|
contentEdit: optionalContentEdit,
|
|
363
343
|
layoutData: optionalLayoutData,
|
|
364
|
-
customData:
|
|
344
|
+
customData: customData
|
|
365
345
|
}}
|
|
366
346
|
</Field>
|
|
367
347
|
);
|
|
@@ -389,7 +369,7 @@ const EditStyle = {
|
|
|
389
369
|
text={isCheckBoxGroupItem ? field.label : undefined}
|
|
390
370
|
wrapping={isCheckBoxGroupItem ? true : undefined}
|
|
391
371
|
ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
|
|
392
|
-
select={field.eventHandlers.change
|
|
372
|
+
select={field.eventHandlers.change}
|
|
393
373
|
validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
|
|
394
374
|
>
|
|
395
375
|
{{ customData: <CustomData key="sourcePath" value={field.dataSourcePath} /> }}
|
|
@@ -431,7 +411,7 @@ const EditStyle = {
|
|
|
431
411
|
ariaLabelledBy={field.ariaLabelledBy as unknown as Array<Control | string>}
|
|
432
412
|
maxLength={field.formatOptions.textMaxLength}
|
|
433
413
|
showExceededText={showExceededText}
|
|
434
|
-
change={field.eventHandlers.change
|
|
414
|
+
change={field.eventHandlers.change}
|
|
435
415
|
liveChange={field.eventHandlers.liveChange}
|
|
436
416
|
validateFieldGroup={field.eventHandlers.validateFieldGroup as (oEvent: Control$ValidateFieldGroupEvent) => void}
|
|
437
417
|
>
|
|
@@ -462,7 +442,7 @@ const EditStyle = {
|
|
|
462
442
|
iconSize="1.375rem"
|
|
463
443
|
class="sapUiTinyMarginTopBottom"
|
|
464
444
|
editable="true"
|
|
465
|
-
change={field.eventHandlers.change
|
|
445
|
+
change={field.eventHandlers.change}
|
|
466
446
|
>
|
|
467
447
|
{{
|
|
468
448
|
layoutData: EditStyle.getLayoutData(field)
|