@sapui5/sap.fe.core 1.110.0 → 1.111.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -4
- package/package.json +2 -23
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +182 -0
- package/src/sap/fe/core/ActionRuntime.js +3 -181
- package/src/sap/fe/core/ActionRuntime.js.map +1 -0
- package/src/sap/fe/core/ActionRuntime.ts +3 -5
- package/src/sap/fe/core/AppComponent-dbg.js +435 -0
- package/src/sap/fe/core/AppComponent.js +3 -439
- package/src/sap/fe/core/AppComponent.js.map +1 -0
- package/src/sap/fe/core/AppComponent.ts +0 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +200 -0
- package/src/sap/fe/core/AppStateHandler.js +3 -227
- package/src/sap/fe/core/AppStateHandler.js.map +1 -0
- package/src/sap/fe/core/BaseController-dbg.js +76 -0
- package/src/sap/fe/core/BaseController.js +3 -73
- package/src/sap/fe/core/BaseController.js.map +1 -0
- package/src/sap/fe/core/CommonUtils-dbg.js +2135 -0
- package/src/sap/fe/core/CommonUtils.js +3 -2296
- package/src/sap/fe/core/CommonUtils.js.map +1 -0
- package/src/sap/fe/core/CommonUtils.ts +34 -28
- package/src/sap/fe/core/ExtensionAPI-dbg.js +273 -0
- package/src/sap/fe/core/ExtensionAPI.js +3 -280
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -0
- package/src/sap/fe/core/PageController-dbg.js +203 -0
- package/src/sap/fe/core/PageController.js +3 -200
- package/src/sap/fe/core/PageController.js.map +1 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +218 -0
- package/src/sap/fe/core/TemplateComponent.js +3 -216
- package/src/sap/fe/core/TemplateComponent.js.map +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +75 -0
- package/src/sap/fe/core/TemplateModel.js +3 -72
- package/src/sap/fe/core/TemplateModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +57 -0
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +3 -54
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +410 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +11 -355
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +118 -52
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter-dbg.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +3 -11
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +44 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +3 -40
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +932 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +16 -1292
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +40 -42
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +434 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -481
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BusyLocker-dbg.js +92 -0
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +3 -89
- package/src/sap/fe/core/controllerextensions/BusyLocker.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1659 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +3 -1868
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +180 -125
- package/src/sap/fe/core/controllerextensions/Feedback-dbg.js +70 -0
- package/src/sap/fe/core/controllerextensions/Feedback.js +3 -67
- package/src/sap/fe/core/controllerextensions/Feedback.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +83 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -84
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +6 -8
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +711 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +3 -707
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +79 -48
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +791 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +3 -696
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +107 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +984 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +3 -996
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +43 -23
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1013 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +3 -1011
- package/src/sap/fe/core/controllerextensions/KPIManagement.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +12 -10
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +135 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -133
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +221 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -224
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +254 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -279
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/PageReady.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +169 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -174
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Paginator.ts +4 -5
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +132 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Routing-dbg.js +138 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -135
- package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +10 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -7
- package/src/sap/fe/core/controllerextensions/RoutingListener.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +317 -0
- package/src/sap/fe/core/controllerextensions/Share.js +3 -356
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +553 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -651
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +411 -553
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +903 -0
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -967
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/ViewState.ts +90 -41
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +3 -96
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +314 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +3 -336
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +152 -0
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +3 -161
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +243 -0
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +3 -302
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +252 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +6 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +1196 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +3 -1479
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +239 -289
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +689 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -785
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +134 -142
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +236 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -287
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +1422 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +3 -1598
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +40 -24
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +185 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +3 -214
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +1219 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -1213
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +304 -0
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +3 -339
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason-dbg.js +15 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +6 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.ts +6 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +798 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +3 -799
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -0
- package/src/sap/fe/core/controls/Any-dbg.js +32 -0
- package/src/sap/fe/core/controls/Any.js +3 -29
- package/src/sap/fe/core/controls/Any.js.map +1 -0
- package/src/sap/fe/core/controls/AnyElement-dbg.js +29 -0
- package/src/sap/fe/core/controls/AnyElement.js +3 -26
- package/src/sap/fe/core/controls/AnyElement.js.map +1 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +72 -0
- package/src/sap/fe/core/controls/CommandExecution.js +3 -69
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -0
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +151 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -148
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +330 -0
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +3 -328
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +126 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -124
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +170 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -0
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +194 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +3 -191
- package/src/sap/fe/core/controls/FieldWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +280 -0
- package/src/sap/fe/core/controls/FileWrapper.js +3 -277
- package/src/sap/fe/core/controls/FileWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/FilterBar-dbg.js +167 -0
- package/src/sap/fe/core/controls/FilterBar.js +3 -166
- package/src/sap/fe/core/controls/FilterBar.js.map +1 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +92 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -89
- package/src/sap/fe/core/controls/FormElementWrapper.js.map +1 -0
- package/src/sap/fe/core/controls/MassEditSelect-dbg.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.js +3 -30
- package/src/sap/fe/core/controls/MassEditSelect.js.map +1 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -34
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +119 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -121
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +267 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +3 -264
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -150
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +310 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -307
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +491 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -504
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +2 -2
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +403 -0
- package/src/sap/fe/core/converters/ConverterContext.js +3 -406
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +88 -0
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -84
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -0
- package/src/sap/fe/core/converters/ManifestSettings.ts +3 -1
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +402 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +3 -406
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +1161 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -1225
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -0
- package/src/sap/fe/core/converters/MetaModelConverter.ts +193 -199
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +89 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -86
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +396 -0
- package/src/sap/fe/core/converters/annotations/DataField.js +3 -394
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -0
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -5
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1948 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +3 -1868
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +424 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -446
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Action.ts +31 -14
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +276 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.js +3 -260
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +52 -7
- package/src/sap/fe/core/converters/controls/Common/Criticality-dbg.js +42 -0
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -39
- package/src/sap/fe/core/converters/controls/Common/Criticality.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +247 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -242
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +229 -0
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -234
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +374 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -371
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +2596 -0
- package/src/sap/fe/core/converters/controls/Common/Table.js +3 -2527
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/Table.ts +214 -77
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +522 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +3 -527
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +51 -50
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +786 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +3 -845
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +0 -64
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +291 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +3 -316
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +30 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +56 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +3 -53
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +438 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -431
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +597 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +3 -630
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -0
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +204 -0
- package/src/sap/fe/core/converters/helpers/Aggregation.js +3 -204
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +100 -0
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -99
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +199 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +3 -199
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +143 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +3 -140
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +2 -1
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +92 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -89
- package/src/sap/fe/core/converters/helpers/ID.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +3 -59
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key-dbg.js +62 -0
- package/src/sap/fe/core/converters/helpers/Key.js +3 -59
- package/src/sap/fe/core/converters/helpers/Key.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper-dbg.js +80 -0
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +3 -77
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions-dbg.js +142 -0
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +3 -139
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +406 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +3 -422
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +132 -111
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +557 -0
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +3 -589
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +474 -0
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +3 -477
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -0
- package/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +103 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -100
- package/src/sap/fe/core/designtime/AppComponent.designtime.js.map +1 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js +7 -0
- package/src/sap/fe/core/designtime/library-preload.designtime.js.map +1 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +95 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +3 -92
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +46 -0
- package/src/sap/fe/core/formatters/FPMFormatter.js +3 -44
- package/src/sap/fe/core/formatters/FPMFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/FPMFormatter.ts +3 -2
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +343 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js +6 -0
- package/src/sap/fe/core/formatters/FiscalFormat.js.map +1 -0
- package/src/sap/fe/core/formatters/FiscalFormat.ts +319 -0
- package/src/sap/fe/core/formatters/KPIFormatter-dbg.js +86 -0
- package/src/sap/fe/core/formatters/KPIFormatter.js +3 -83
- package/src/sap/fe/core/formatters/KPIFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/StandardFormatter-dbg.js +80 -0
- package/src/sap/fe/core/formatters/StandardFormatter.js +3 -78
- package/src/sap/fe/core/formatters/StandardFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +276 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +3 -275
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes-dbg.js +20 -0
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +3 -17
- package/src/sap/fe/core/formatters/TableFormatterTypes.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +172 -0
- package/src/sap/fe/core/formatters/ValueFormatter.js +3 -161
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -0
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -8
- package/src/sap/fe/core/fpm/Component-dbg.js +94 -0
- package/src/sap/fe/core/fpm/Component.js +3 -91
- package/src/sap/fe/core/fpm/Component.js.map +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AnnotationEnum-dbg.js +30 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +3 -36
- package/src/sap/fe/core/helpers/AnnotationEnum.js.map +1 -0
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +334 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +3 -335
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +1739 -0
- package/src/sap/fe/core/helpers/BindingToolkit.js +3 -1611
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -0
- package/src/sap/fe/core/helpers/BindingToolkit.ts +277 -97
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +421 -0
- package/src/sap/fe/core/helpers/ClassSupport.js +3 -420
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -0
- package/src/sap/fe/core/helpers/ClassSupport.ts +13 -15
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +526 -0
- package/src/sap/fe/core/helpers/DeleteHelper.js +3 -618
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper.ts +116 -134
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +3 -52
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/EditState-dbg.js +80 -0
- package/src/sap/fe/core/helpers/EditState.js +3 -77
- package/src/sap/fe/core/helpers/EditState.js.map +1 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +3 -52
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/FPMHelper-dbg.js +55 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -52
- package/src/sap/fe/core/helpers/FPMHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +180 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -177
- package/src/sap/fe/core/helpers/KeepAliveHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes-dbg.js +28 -0
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +3 -25
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js.map +1 -0
- package/src/sap/fe/core/helpers/LoaderUtils-dbg.js +29 -0
- package/src/sap/fe/core/helpers/LoaderUtils.js +3 -30
- package/src/sap/fe/core/helpers/LoaderUtils.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +1229 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +3 -1309
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +6 -6
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +65 -0
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -62
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +489 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +3 -503
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ModelHelper.ts +13 -36
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +174 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -185
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +371 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +3 -368
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +70 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +141 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +3 -137
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +3 -2
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +204 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +3 -208
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +35 -0
- package/src/sap/fe/core/helpers/Synchronization.js +3 -33
- package/src/sap/fe/core/helpers/Synchronization.js.map +1 -0
- package/src/sap/fe/core/helpers/ToES6Promise-dbg.js +29 -0
- package/src/sap/fe/core/helpers/ToES6Promise.js +3 -26
- package/src/sap/fe/core/helpers/ToES6Promise.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +20 -0
- package/src/sap/fe/core/helpers/TypeGuards.js +3 -19
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -0
- package/src/sap/fe/core/helpers/TypeGuards.ts +5 -1
- package/src/sap/fe/core/jsx-runtime/Fragment-dbg.js +14 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +3 -11
- package/src/sap/fe/core/jsx-runtime/Fragment.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +76 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +3 -86
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +124 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +3 -98
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +43 -17
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +41 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml-dbg.js +94 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +3 -90
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +3 -28
- package/src/sap/fe/core/jsx-runtime/jsx.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/jsx.ts +19 -1
- package/src/sap/fe/core/jsx-runtime/jsxs-dbg.js +10 -0
- package/src/sap/fe/core/jsx-runtime/jsxs.js +3 -7
- package/src/sap/fe/core/jsx-runtime/jsxs.js.map +1 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +154 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +3 -153
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -0
- package/src/sap/fe/core/library-dbg.js +437 -0
- package/src/sap/fe/core/library-preload.js +900 -0
- package/src/sap/fe/core/library-preload.js.map +1 -0
- package/src/sap/fe/core/library-preload.support.js +177 -0
- package/src/sap/fe/core/library-preload.support.js.map +1 -0
- package/src/sap/fe/core/library.js +3 -461
- package/src/sap/fe/core/library.js.map +1 -0
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +12 -25
- package/src/sap/fe/core/manifest.json +100 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +99 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -96
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -0
- package/src/sap/fe/core/messagebundle.properties +6 -0
- package/src/sap/fe/core/messagebundle_ar.properties +22 -0
- package/src/sap/fe/core/messagebundle_bg.properties +22 -0
- package/src/sap/fe/core/messagebundle_ca.properties +22 -0
- package/src/sap/fe/core/messagebundle_cs.properties +22 -0
- package/src/sap/fe/core/messagebundle_cy.properties +22 -0
- package/src/sap/fe/core/messagebundle_da.properties +22 -0
- package/src/sap/fe/core/messagebundle_de.properties +22 -0
- package/src/sap/fe/core/messagebundle_el.properties +22 -0
- package/src/sap/fe/core/messagebundle_en.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +22 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +4 -0
- package/src/sap/fe/core/messagebundle_es.properties +22 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -0
- package/src/sap/fe/core/messagebundle_et.properties +22 -0
- package/src/sap/fe/core/messagebundle_fi.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr.properties +22 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +22 -0
- package/src/sap/fe/core/messagebundle_hi.properties +22 -0
- package/src/sap/fe/core/messagebundle_hr.properties +23 -1
- package/src/sap/fe/core/messagebundle_hu.properties +22 -0
- package/src/sap/fe/core/messagebundle_id.properties +22 -0
- package/src/sap/fe/core/messagebundle_it.properties +22 -0
- package/src/sap/fe/core/messagebundle_iw.properties +22 -0
- package/src/sap/fe/core/messagebundle_ja.properties +22 -0
- package/src/sap/fe/core/messagebundle_kk.properties +22 -0
- package/src/sap/fe/core/messagebundle_ko.properties +22 -0
- package/src/sap/fe/core/messagebundle_lt.properties +22 -0
- package/src/sap/fe/core/messagebundle_lv.properties +22 -0
- package/src/sap/fe/core/messagebundle_ms.properties +22 -0
- package/src/sap/fe/core/messagebundle_nl.properties +22 -0
- package/src/sap/fe/core/messagebundle_no.properties +22 -0
- package/src/sap/fe/core/messagebundle_pl.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt.properties +22 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -0
- package/src/sap/fe/core/messagebundle_ro.properties +22 -0
- package/src/sap/fe/core/messagebundle_ru.properties +22 -0
- package/src/sap/fe/core/messagebundle_sh.properties +22 -0
- package/src/sap/fe/core/messagebundle_sk.properties +22 -0
- package/src/sap/fe/core/messagebundle_sl.properties +22 -0
- package/src/sap/fe/core/messagebundle_sv.properties +22 -0
- package/src/sap/fe/core/messagebundle_th.properties +22 -0
- package/src/sap/fe/core/messagebundle_tr.properties +22 -0
- package/src/sap/fe/core/messagebundle_uk.properties +22 -0
- package/src/sap/fe/core/messagebundle_vi.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -0
- package/src/sap/fe/core/operationsHelper-dbg.js +155 -0
- package/src/sap/fe/core/operationsHelper.js +3 -205
- package/src/sap/fe/core/operationsHelper.js.map +1 -0
- package/src/sap/fe/core/operationsHelper.ts +14 -68
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +837 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -855
- package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +190 -0
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -190
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +506 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.js +3 -538
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -0
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -4
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +60 -0
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -60
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +196 -0
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -219
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +80 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -82
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +320 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +3 -320
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +91 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -89
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +817 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -847
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +6 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +732 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +3 -752
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +569 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +3 -599
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -3
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +355 -0
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +3 -387
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +37 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +3 -34
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js.map +1 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +4 -4
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +3 -3
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +3 -3
- package/src/sap/fe/core/support/CommonHelper-dbg.js +63 -0
- package/src/sap/fe/core/support/CommonHelper.js +3 -60
- package/src/sap/fe/core/support/CommonHelper.js.map +1 -0
- package/src/sap/fe/core/support/Diagnostics-dbg.js +44 -0
- package/src/sap/fe/core/support/Diagnostics.js +3 -49
- package/src/sap/fe/core/support/Diagnostics.js.map +1 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +3 -3
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +70 -0
- package/src/sap/fe/core/templating/CommonFormatters.js +3 -66
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +9 -3
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +136 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +3 -133
- package/src/sap/fe/core/templating/CriticalityFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +58 -0
- package/src/sap/fe/core/templating/DataFieldFormatters.js +3 -55
- package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +363 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +3 -372
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +17 -8
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +56 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +3 -124
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +0 -47
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +68 -0
- package/src/sap/fe/core/templating/EntitySetHelper.js +3 -81
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +77 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -74
- package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +346 -0
- package/src/sap/fe/core/templating/FilterHelper.js +3 -339
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -0
- package/src/sap/fe/core/templating/FilterHelper.ts +2 -21
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +62 -0
- package/src/sap/fe/core/templating/FilterTemplating.js +3 -59
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +93 -0
- package/src/sap/fe/core/templating/PropertyFormatters.js +3 -90
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +340 -0
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -337
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper-dbg.js +91 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +3 -43
- package/src/sap/fe/core/templating/SemanticObjectHelper.js.map +1 -0
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +45 -1
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +498 -0
- package/src/sap/fe/core/templating/UIFormatters.js +3 -544
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -0
- package/src/sap/fe/core/templating/UIFormatters.ts +60 -110
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +35 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -33
- package/src/sap/fe/core/type/DateTimeWithTimezone.js.map +1 -0
- package/src/sap/fe/core/type/EDM-dbg.js +84 -0
- package/src/sap/fe/core/type/EDM.js +6 -0
- package/src/sap/fe/core/type/EDM.js.map +1 -0
- package/src/sap/fe/core/type/EDM.ts +70 -0
- package/src/sap/fe/core/type/Email-dbg.js +29 -0
- package/src/sap/fe/core/type/Email.js +3 -26
- package/src/sap/fe/core/type/Email.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +174 -0
- package/src/sap/fe/core/type/FiscalDate.js +6 -0
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -0
- package/src/sap/fe/core/type/FiscalDate.ts +179 -0
- package/src/sap/fe/core/type/TypeUtil-dbg.js +58 -0
- package/src/sap/fe/core/type/TypeUtil.js +3 -55
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -0
- package/src/sap/fe/core/type/TypeUtil.ts +1 -0
- package/src/.eslintrc +0 -7
|
@@ -1,1014 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/formatters/TableFormatterTypes", "sap/m/Popover", "sap/ui/core/Core", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/Locale", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/json/JSONModel", "sap/ui/model/Sorter", "../helpers/ClassSupport"], function (Log, TableFormatterTypes, Popover, Core, DateFormat, NumberFormat, Locale, ControllerExtension, Filter, JSONModel, Sorter, ClassSupport) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _class, _class2;
|
|
9
|
-
var publicExtension = ClassSupport.publicExtension;
|
|
10
|
-
var methodOverride = ClassSupport.methodOverride;
|
|
11
|
-
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
12
|
-
var MessageType = TableFormatterTypes.MessageType;
|
|
13
|
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
14
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
15
|
-
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
16
|
-
var MessageTypeFromCriticality = {
|
|
17
|
-
"1": MessageType.Error,
|
|
18
|
-
"2": MessageType.Warning,
|
|
19
|
-
"3": MessageType.Success,
|
|
20
|
-
"5": MessageType.Information
|
|
21
|
-
};
|
|
22
|
-
var ValueColorFromMessageType = {
|
|
23
|
-
Error: "Error",
|
|
24
|
-
Warning: "Critical",
|
|
25
|
-
Success: "Good",
|
|
26
|
-
Information: "None",
|
|
27
|
-
None: "None"
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Function to get a message state from a calculated criticality of type 'Target'.
|
|
32
|
-
*
|
|
33
|
-
* @param kpiValue The value of the KPI to be tested against.
|
|
34
|
-
* @param aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue,AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
|
|
35
|
-
* @returns Returns the corresponding MessageType
|
|
36
|
-
*/
|
|
37
|
-
function messageTypeFromTargetCalculation(kpiValue, aThresholds) {
|
|
38
|
-
var criticalityProperty;
|
|
39
|
-
if (aThresholds[0] !== undefined && aThresholds[0] !== null && kpiValue < aThresholds[0]) {
|
|
40
|
-
criticalityProperty = MessageType.Error;
|
|
41
|
-
} else if (aThresholds[1] !== undefined && aThresholds[1] !== null && kpiValue < aThresholds[1]) {
|
|
42
|
-
criticalityProperty = MessageType.Warning;
|
|
43
|
-
} else if (aThresholds[2] !== undefined && aThresholds[2] !== null && kpiValue < aThresholds[2]) {
|
|
44
|
-
criticalityProperty = MessageType.None;
|
|
45
|
-
} else if (aThresholds[5] !== undefined && aThresholds[5] !== null && kpiValue > aThresholds[5]) {
|
|
46
|
-
criticalityProperty = MessageType.Error;
|
|
47
|
-
} else if (aThresholds[4] !== undefined && aThresholds[4] !== null && kpiValue > aThresholds[4]) {
|
|
48
|
-
criticalityProperty = MessageType.Warning;
|
|
49
|
-
} else if (aThresholds[3] !== undefined && aThresholds[3] !== null && kpiValue > aThresholds[3]) {
|
|
50
|
-
criticalityProperty = MessageType.None;
|
|
51
|
-
} else {
|
|
52
|
-
criticalityProperty = MessageType.Success;
|
|
53
|
-
}
|
|
54
|
-
return criticalityProperty;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Function to get a message state from a calculated criticality of type 'Minimize'.
|
|
59
|
-
*
|
|
60
|
-
* @param kpiValue The value of the KPI to be tested against.
|
|
61
|
-
* @param aThresholds Thresholds to be used [AcceptanceRangeHighValue,ToleranceRangeHighValue,DeviationRangeHighValue].
|
|
62
|
-
* @returns Returns the corresponding MessageType
|
|
63
|
-
*/
|
|
64
|
-
function messageTypeFromMinimizeCalculation(kpiValue, aThresholds) {
|
|
65
|
-
var criticalityProperty;
|
|
66
|
-
if (aThresholds[2] !== undefined && aThresholds[2] !== null && kpiValue > aThresholds[2]) {
|
|
67
|
-
criticalityProperty = MessageType.Error;
|
|
68
|
-
} else if (aThresholds[1] !== undefined && aThresholds[1] !== null && kpiValue > aThresholds[1]) {
|
|
69
|
-
criticalityProperty = MessageType.Warning;
|
|
70
|
-
} else if (aThresholds[0] !== undefined && aThresholds[0] !== null && kpiValue > aThresholds[0]) {
|
|
71
|
-
criticalityProperty = MessageType.None;
|
|
72
|
-
} else {
|
|
73
|
-
criticalityProperty = MessageType.Success;
|
|
74
|
-
}
|
|
75
|
-
return criticalityProperty;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Function to get a message state from a calculated criticality of type 'Maximize'.
|
|
80
|
-
*
|
|
81
|
-
* @param kpiValue The value of the KPI to be tested against.
|
|
82
|
-
* @param aThresholds Thresholds to be used [DeviationRangeLowValue,ToleranceRangeLowValue,AcceptanceRangeLowValue].
|
|
83
|
-
* @returns Returns the corresponding MessageType
|
|
84
|
-
*/
|
|
85
|
-
function messageTypeFromMaximizeCalculation(kpiValue, aThresholds) {
|
|
86
|
-
var criticalityProperty;
|
|
87
|
-
if (aThresholds[0] !== undefined && aThresholds[0] !== null && kpiValue < aThresholds[0]) {
|
|
88
|
-
criticalityProperty = MessageType.Error;
|
|
89
|
-
} else if (aThresholds[1] !== undefined && aThresholds[1] !== null && kpiValue < aThresholds[1]) {
|
|
90
|
-
criticalityProperty = MessageType.Warning;
|
|
91
|
-
} else if (aThresholds[2] !== undefined && aThresholds[2] !== null && kpiValue < aThresholds[2]) {
|
|
92
|
-
criticalityProperty = MessageType.None;
|
|
93
|
-
} else {
|
|
94
|
-
criticalityProperty = MessageType.Success;
|
|
95
|
-
}
|
|
96
|
-
return criticalityProperty;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Function to calculate a DeviationIndicator value from a trend value.
|
|
101
|
-
*
|
|
102
|
-
* @param trendValue The criticality values.
|
|
103
|
-
* @returns Returns the corresponding DeviationIndicator value
|
|
104
|
-
*/
|
|
105
|
-
function deviationIndicatorFromTrendType(trendValue) {
|
|
106
|
-
var deviationIndicator;
|
|
107
|
-
switch (trendValue) {
|
|
108
|
-
case 1: // StrongUp
|
|
109
|
-
case "1":
|
|
110
|
-
case 2: // Up
|
|
111
|
-
case "2":
|
|
112
|
-
deviationIndicator = "Up";
|
|
113
|
-
break;
|
|
114
|
-
case 4: // Down
|
|
115
|
-
case "4":
|
|
116
|
-
case 5: // StrongDown
|
|
117
|
-
case "5":
|
|
118
|
-
deviationIndicator = "Down";
|
|
119
|
-
break;
|
|
120
|
-
default:
|
|
121
|
-
deviationIndicator = "None";
|
|
122
|
-
}
|
|
123
|
-
return deviationIndicator;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Function to calculate a DeviationIndicator from a TrendCalculation.
|
|
128
|
-
*
|
|
129
|
-
* @param kpiValue The value of the KPI
|
|
130
|
-
* @param referenceValue The reference value to compare with
|
|
131
|
-
* @param isRelative True is the comparison is relative
|
|
132
|
-
* @param aThresholds Array of thresholds [StrongDownDifference, DownDifference, UpDifference, StrongUpDifference]
|
|
133
|
-
* @returns Returns the corresponding DeviationIndicator value
|
|
134
|
-
*/
|
|
135
|
-
function deviationIndicatorFromCalculation(kpiValue, referenceValue, isRelative, aThresholds) {
|
|
136
|
-
var deviationIndicator;
|
|
137
|
-
if (!aThresholds || isRelative && !referenceValue) {
|
|
138
|
-
return "None";
|
|
139
|
-
}
|
|
140
|
-
var compValue = isRelative ? (kpiValue - referenceValue) / referenceValue : kpiValue - referenceValue;
|
|
141
|
-
if (aThresholds[0] !== undefined && aThresholds[0] !== null && compValue <= aThresholds[0]) {
|
|
142
|
-
// StrongDown --> Down
|
|
143
|
-
deviationIndicator = "Down";
|
|
144
|
-
} else if (aThresholds[1] !== undefined && aThresholds[1] !== null && compValue <= aThresholds[1]) {
|
|
145
|
-
// Down --> Down
|
|
146
|
-
deviationIndicator = "Down";
|
|
147
|
-
} else if (aThresholds[3] !== undefined && aThresholds[3] !== null && compValue >= aThresholds[3]) {
|
|
148
|
-
// StrongUp --> Up
|
|
149
|
-
deviationIndicator = "Up";
|
|
150
|
-
} else if (aThresholds[2] !== undefined && aThresholds[2] !== null && compValue >= aThresholds[2]) {
|
|
151
|
-
// Up --> Up
|
|
152
|
-
deviationIndicator = "Up";
|
|
153
|
-
} else {
|
|
154
|
-
// Sideways --> None
|
|
155
|
-
deviationIndicator = "None";
|
|
156
|
-
}
|
|
157
|
-
return deviationIndicator;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Creates a sap.ui.model.Filter from a filter definition.
|
|
162
|
-
*
|
|
163
|
-
* @param filterDefinition The filter definition
|
|
164
|
-
* @returns Returns a sap.ui.model.Filter from the definition, or undefined if the definition is empty (no ranges)
|
|
165
|
-
*/
|
|
166
|
-
function createFilterFromDefinition(filterDefinition) {
|
|
167
|
-
if (filterDefinition.ranges.length === 0) {
|
|
168
|
-
return undefined;
|
|
169
|
-
} else if (filterDefinition.ranges.length === 1) {
|
|
170
|
-
return new Filter(filterDefinition.propertyPath, filterDefinition.ranges[0].operator, filterDefinition.ranges[0].rangeLow, filterDefinition.ranges[0].rangeHigh);
|
|
171
|
-
} else {
|
|
172
|
-
var aRangeFilters = filterDefinition.ranges.map(function (range) {
|
|
173
|
-
return new Filter(filterDefinition.propertyPath, range.operator, range.rangeLow, range.rangeHigh);
|
|
174
|
-
});
|
|
175
|
-
return new Filter({
|
|
176
|
-
filters: aRangeFilters,
|
|
177
|
-
and: false
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
function getFilterStringFromDefinition(filterDefinition) {
|
|
182
|
-
var currentLocale = new Locale(sap.ui.getCore().getConfiguration().getLanguage());
|
|
183
|
-
var resBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
184
|
-
var dateFormat = DateFormat.getDateInstance({
|
|
185
|
-
style: "medium"
|
|
186
|
-
}, currentLocale);
|
|
187
|
-
function formatRange(range) {
|
|
188
|
-
var valueLow = filterDefinition.propertyType.indexOf("Edm.Date") === 0 ? dateFormat.format(new Date(range.rangeLow)) : range.rangeLow;
|
|
189
|
-
var valueHigh = filterDefinition.propertyType.indexOf("Edm.Date") === 0 ? dateFormat.format(new Date(range.rangeHigh)) : range.rangeHigh;
|
|
190
|
-
switch (range.operator) {
|
|
191
|
-
case "BT":
|
|
192
|
-
return "[".concat(valueLow, " - ").concat(valueHigh, "]");
|
|
193
|
-
case "Contains":
|
|
194
|
-
return "*".concat(valueLow, "*");
|
|
195
|
-
case "GE":
|
|
196
|
-
return "\u2265".concat(valueLow);
|
|
197
|
-
case "GT":
|
|
198
|
-
return ">".concat(valueLow);
|
|
199
|
-
case "LE":
|
|
200
|
-
return "\u2264".concat(valueLow);
|
|
201
|
-
case "LT":
|
|
202
|
-
return "<".concat(valueLow);
|
|
203
|
-
case "NB":
|
|
204
|
-
return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["[".concat(valueLow, " - ").concat(valueHigh, "]")]);
|
|
205
|
-
case "NE":
|
|
206
|
-
return "\u2260".concat(valueLow);
|
|
207
|
-
case "NotContains":
|
|
208
|
-
return resBundle.getText("C_KPICARD_FILTERSTRING_NOT", ["*".concat(valueLow, "*")]);
|
|
209
|
-
case "EQ":
|
|
210
|
-
default:
|
|
211
|
-
return valueLow;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
if (filterDefinition.ranges.length === 0) {
|
|
215
|
-
return "";
|
|
216
|
-
} else if (filterDefinition.ranges.length === 1) {
|
|
217
|
-
return formatRange(filterDefinition.ranges[0]);
|
|
218
|
-
} else {
|
|
219
|
-
return "(".concat(filterDefinition.ranges.map(formatRange).join(","), ")");
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
function formatChartTitle(kpiDef) {
|
|
223
|
-
var resBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
224
|
-
function formatList(items) {
|
|
225
|
-
if (items.length === 0) {
|
|
226
|
-
return "";
|
|
227
|
-
} else if (items.length === 1) {
|
|
228
|
-
return items[0].label;
|
|
229
|
-
} else {
|
|
230
|
-
var res = items[0].label;
|
|
231
|
-
for (var I = 1; I < items.length - 1; I++) {
|
|
232
|
-
res += ", ".concat(items[I].label);
|
|
233
|
-
}
|
|
234
|
-
return resBundle.getText("C_KPICARD_ITEMSLIST", [res, items[items.length - 1].label]);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
return resBundle.getText("C_KPICARD_CHARTTITLE", [formatList(kpiDef.chart.measures), formatList(kpiDef.chart.dimensions)]);
|
|
238
|
-
}
|
|
239
|
-
function updateChartLabelSettings(chartDefinition, oChartProperties) {
|
|
240
|
-
switch (chartDefinition.chartType) {
|
|
241
|
-
case "Donut":
|
|
242
|
-
// Show data labels, do not show axis titles
|
|
243
|
-
oChartProperties.categoryAxis = {
|
|
244
|
-
title: {
|
|
245
|
-
visible: false
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
oChartProperties.valueAxis = {
|
|
249
|
-
title: {
|
|
250
|
-
visible: false
|
|
251
|
-
},
|
|
252
|
-
label: {
|
|
253
|
-
formatString: "ShortFloat"
|
|
254
|
-
}
|
|
255
|
-
};
|
|
256
|
-
oChartProperties.plotArea.dataLabel = {
|
|
257
|
-
visible: true,
|
|
258
|
-
type: "value",
|
|
259
|
-
formatString: "ShortFloat_MFD2"
|
|
260
|
-
};
|
|
261
|
-
break;
|
|
262
|
-
case "bubble":
|
|
263
|
-
// Show axis title, bubble size legend, do not show data labels
|
|
264
|
-
oChartProperties.valueAxis = {
|
|
265
|
-
title: {
|
|
266
|
-
visible: true
|
|
267
|
-
},
|
|
268
|
-
label: {
|
|
269
|
-
formatString: "ShortFloat"
|
|
270
|
-
}
|
|
271
|
-
};
|
|
272
|
-
oChartProperties.valueAxis2 = {
|
|
273
|
-
title: {
|
|
274
|
-
visible: true
|
|
275
|
-
},
|
|
276
|
-
label: {
|
|
277
|
-
formatString: "ShortFloat"
|
|
278
|
-
}
|
|
279
|
-
};
|
|
280
|
-
oChartProperties.legendGroup = {
|
|
281
|
-
layout: {
|
|
282
|
-
position: "bottom",
|
|
283
|
-
alignment: "topLeft"
|
|
284
|
-
}
|
|
285
|
-
};
|
|
286
|
-
oChartProperties.sizeLegend = {
|
|
287
|
-
visible: true
|
|
288
|
-
};
|
|
289
|
-
oChartProperties.plotArea.dataLabel = {
|
|
290
|
-
visible: false
|
|
291
|
-
};
|
|
292
|
-
break;
|
|
293
|
-
case "scatter":
|
|
294
|
-
// Do not show data labels and axis titles
|
|
295
|
-
oChartProperties.valueAxis = {
|
|
296
|
-
title: {
|
|
297
|
-
visible: false
|
|
298
|
-
},
|
|
299
|
-
label: {
|
|
300
|
-
formatString: "ShortFloat"
|
|
301
|
-
}
|
|
302
|
-
};
|
|
303
|
-
oChartProperties.valueAxis2 = {
|
|
304
|
-
title: {
|
|
305
|
-
visible: false
|
|
306
|
-
},
|
|
307
|
-
label: {
|
|
308
|
-
formatString: "ShortFloat"
|
|
309
|
-
}
|
|
310
|
-
};
|
|
311
|
-
oChartProperties.plotArea.dataLabel = {
|
|
312
|
-
visible: false
|
|
313
|
-
};
|
|
314
|
-
break;
|
|
315
|
-
default:
|
|
316
|
-
// Do not show data labels and axis titles
|
|
317
|
-
oChartProperties.categoryAxis = {
|
|
318
|
-
title: {
|
|
319
|
-
visible: false
|
|
320
|
-
}
|
|
321
|
-
};
|
|
322
|
-
oChartProperties.valueAxis = {
|
|
323
|
-
title: {
|
|
324
|
-
visible: false
|
|
325
|
-
},
|
|
326
|
-
label: {
|
|
327
|
-
formatString: "ShortFloat"
|
|
328
|
-
}
|
|
329
|
-
};
|
|
330
|
-
oChartProperties.plotArea.dataLabel = {
|
|
331
|
-
visible: false
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
function filterMap(aObjects, aRoles) {
|
|
336
|
-
if (aRoles && aRoles.length) {
|
|
337
|
-
return aObjects.filter(function (dimension) {
|
|
338
|
-
return aRoles.indexOf(dimension.role) >= 0;
|
|
339
|
-
}).map(function (dimension) {
|
|
340
|
-
return dimension.label;
|
|
341
|
-
});
|
|
342
|
-
} else {
|
|
343
|
-
return aObjects.map(function (dimension) {
|
|
344
|
-
return dimension.label;
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
function getScatterBubbleChartFeeds(chartDefinition) {
|
|
349
|
-
var axis1Measures = filterMap(chartDefinition.measures, ["Axis1"]);
|
|
350
|
-
var axis2Measures = filterMap(chartDefinition.measures, ["Axis2"]);
|
|
351
|
-
var axis3Measures = filterMap(chartDefinition.measures, ["Axis3"]);
|
|
352
|
-
var otherMeasures = filterMap(chartDefinition.measures, [undefined]);
|
|
353
|
-
var seriesDimensions = filterMap(chartDefinition.dimensions, ["Series"]);
|
|
354
|
-
|
|
355
|
-
// Get the first dimension with role "Category" for the shape
|
|
356
|
-
var shapeDimension = chartDefinition.dimensions.find(function (dimension) {
|
|
357
|
-
return dimension.role === "Category";
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
// Measure for the x-Axis : first measure for Axis1, or for Axis2 if not found, or for Axis3 if not found
|
|
361
|
-
var xMeasure = axis1Measures.shift() || axis2Measures.shift() || axis3Measures.shift() || otherMeasures.shift() || "";
|
|
362
|
-
// Measure for the y-Axis : first measure for Axis2, or second measure for Axis1 if not found, or first measure for Axis3 if not found
|
|
363
|
-
var yMeasure = axis2Measures.shift() || axis1Measures.shift() || axis3Measures.shift() || otherMeasures.shift() || "";
|
|
364
|
-
var res = [{
|
|
365
|
-
uid: "valueAxis",
|
|
366
|
-
type: "Measure",
|
|
367
|
-
values: [xMeasure]
|
|
368
|
-
}, {
|
|
369
|
-
uid: "valueAxis2",
|
|
370
|
-
type: "Measure",
|
|
371
|
-
values: [yMeasure]
|
|
372
|
-
}];
|
|
373
|
-
if (chartDefinition.chartType === "bubble") {
|
|
374
|
-
// Measure for the size of the bubble: first measure for Axis3, or remaining measure for Axis1/Axis2 if not found
|
|
375
|
-
var sizeMeasure = axis3Measures.shift() || axis1Measures.shift() || axis2Measures.shift() || otherMeasures.shift() || "";
|
|
376
|
-
res.push({
|
|
377
|
-
uid: "bubbleWidth",
|
|
378
|
-
type: "Measure",
|
|
379
|
-
values: [sizeMeasure]
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
// Color (optional)
|
|
384
|
-
if (seriesDimensions.length) {
|
|
385
|
-
res.push({
|
|
386
|
-
uid: "color",
|
|
387
|
-
type: "Dimension",
|
|
388
|
-
values: seriesDimensions
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
// Shape (optional)
|
|
392
|
-
if (shapeDimension) {
|
|
393
|
-
res.push({
|
|
394
|
-
uid: "shape",
|
|
395
|
-
type: "Dimension",
|
|
396
|
-
values: [shapeDimension.label]
|
|
397
|
-
});
|
|
398
|
-
}
|
|
399
|
-
return res;
|
|
400
|
-
}
|
|
401
|
-
function getChartFeeds(chartDefinition) {
|
|
402
|
-
var res;
|
|
403
|
-
switch (chartDefinition.chartType) {
|
|
404
|
-
case "Donut":
|
|
405
|
-
res = [{
|
|
406
|
-
uid: "size",
|
|
407
|
-
type: "Measure",
|
|
408
|
-
values: filterMap(chartDefinition.measures)
|
|
409
|
-
}, {
|
|
410
|
-
uid: "color",
|
|
411
|
-
type: "Dimension",
|
|
412
|
-
values: filterMap(chartDefinition.dimensions)
|
|
413
|
-
}];
|
|
414
|
-
break;
|
|
415
|
-
case "bubble":
|
|
416
|
-
case "scatter":
|
|
417
|
-
res = getScatterBubbleChartFeeds(chartDefinition);
|
|
418
|
-
break;
|
|
419
|
-
case "vertical_bullet":
|
|
420
|
-
res = [{
|
|
421
|
-
uid: "actualValues",
|
|
422
|
-
type: "Measure",
|
|
423
|
-
values: filterMap(chartDefinition.measures, [undefined, "Axis1"])
|
|
424
|
-
}, {
|
|
425
|
-
uid: "targetValues",
|
|
426
|
-
type: "Measure",
|
|
427
|
-
values: filterMap(chartDefinition.measures, ["Axis2"])
|
|
428
|
-
}, {
|
|
429
|
-
uid: "categoryAxis",
|
|
430
|
-
type: "Dimension",
|
|
431
|
-
values: filterMap(chartDefinition.dimensions, [undefined, "Category"])
|
|
432
|
-
}, {
|
|
433
|
-
uid: "color",
|
|
434
|
-
type: "Dimension",
|
|
435
|
-
values: filterMap(chartDefinition.dimensions, ["Series"])
|
|
436
|
-
}];
|
|
437
|
-
break;
|
|
438
|
-
default:
|
|
439
|
-
res = [{
|
|
440
|
-
uid: "valueAxis",
|
|
441
|
-
type: "Measure",
|
|
442
|
-
values: filterMap(chartDefinition.measures)
|
|
443
|
-
}, {
|
|
444
|
-
uid: "categoryAxis",
|
|
445
|
-
type: "Dimension",
|
|
446
|
-
values: filterMap(chartDefinition.dimensions, [undefined, "Category"])
|
|
447
|
-
}, {
|
|
448
|
-
uid: "color",
|
|
449
|
-
type: "Dimension",
|
|
450
|
-
values: filterMap(chartDefinition.dimensions, ["Series"])
|
|
451
|
-
}];
|
|
452
|
-
}
|
|
453
|
-
return res;
|
|
454
|
-
}
|
|
455
|
-
function getNavigationParameters(navInfo, oShellService) {
|
|
456
|
-
if (navInfo.semanticObject) {
|
|
457
|
-
if (navInfo.action) {
|
|
458
|
-
// Action is already specified: check if it's available in the shell
|
|
459
|
-
return oShellService.getLinks({
|
|
460
|
-
semanticObject: navInfo.semanticObject,
|
|
461
|
-
action: navInfo.action
|
|
462
|
-
}).then(function (aLinks) {
|
|
463
|
-
return aLinks.length ? {
|
|
464
|
-
semanticObject: navInfo.semanticObject,
|
|
465
|
-
action: navInfo.action
|
|
466
|
-
} : undefined;
|
|
467
|
-
});
|
|
468
|
-
} else {
|
|
469
|
-
// We get the primary intent from the shell
|
|
470
|
-
return oShellService.getPrimaryIntent(navInfo.semanticObject).then(function (oLink) {
|
|
471
|
-
if (!oLink) {
|
|
472
|
-
// No primary intent...
|
|
473
|
-
return undefined;
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// Check that the primary intent is not part of the unavailable actions
|
|
477
|
-
var oInfo = oShellService.parseShellHash(oLink.intent);
|
|
478
|
-
return navInfo.unavailableActions && navInfo.unavailableActions.indexOf(oInfo.action) >= 0 ? undefined : {
|
|
479
|
-
semanticObject: oInfo.semanticObject,
|
|
480
|
-
action: oInfo.action
|
|
481
|
-
};
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
} else {
|
|
485
|
-
// Outbound navigation specified in the manifest
|
|
486
|
-
return navInfo.outboundNavigation ? Promise.resolve({
|
|
487
|
-
outbound: navInfo.outboundNavigation
|
|
488
|
-
}) : Promise.resolve(undefined);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
/**
|
|
493
|
-
* @class A controller extension for managing the KPIs in an analytical list page
|
|
494
|
-
* @name sap.fe.core.controllerextensions.KPIManagement
|
|
495
|
-
* @hideconstructor
|
|
496
|
-
* @private
|
|
497
|
-
* @since 1.93.0
|
|
498
|
-
*/
|
|
499
|
-
var KPIManagementControllerExtension = (_dec = defineUI5Class("sap.fe.core.controllerextensions.KPIManagement"), _dec2 = methodOverride(), _dec3 = methodOverride(), _dec4 = publicExtension(), _dec(_class = (_class2 = /*#__PURE__*/function (_ControllerExtension) {
|
|
500
|
-
_inheritsLoose(KPIManagementControllerExtension, _ControllerExtension);
|
|
501
|
-
function KPIManagementControllerExtension() {
|
|
502
|
-
return _ControllerExtension.apply(this, arguments) || this;
|
|
503
|
-
}
|
|
504
|
-
var _proto = KPIManagementControllerExtension.prototype;
|
|
505
|
-
/**
|
|
506
|
-
* Creates the card manifest for a KPI definition and stores it in a JSON model.
|
|
507
|
-
*
|
|
508
|
-
* @param kpiDefinition The KPI definition
|
|
509
|
-
* @param oKPIModel The JSON model in which the manifest will be stored
|
|
510
|
-
*/
|
|
511
|
-
_proto.initCardManifest = function initCardManifest(kpiDefinition, oKPIModel) {
|
|
512
|
-
var _kpiDefinition$select;
|
|
513
|
-
var oCardManifest = {
|
|
514
|
-
"sap.app": {
|
|
515
|
-
id: "sap.fe",
|
|
516
|
-
type: "card"
|
|
517
|
-
},
|
|
518
|
-
"sap.ui": {
|
|
519
|
-
technology: "UI5"
|
|
520
|
-
},
|
|
521
|
-
"sap.card": {
|
|
522
|
-
type: "Analytical",
|
|
523
|
-
data: {
|
|
524
|
-
json: {}
|
|
525
|
-
},
|
|
526
|
-
header: {
|
|
527
|
-
type: "Numeric",
|
|
528
|
-
title: kpiDefinition.datapoint.title,
|
|
529
|
-
subTitle: kpiDefinition.datapoint.description,
|
|
530
|
-
unitOfMeasurement: "{mainUnit}",
|
|
531
|
-
mainIndicator: {
|
|
532
|
-
number: "{mainValueNoScale}",
|
|
533
|
-
unit: "{mainValueScale}",
|
|
534
|
-
state: "{mainState}",
|
|
535
|
-
trend: "{trend}"
|
|
536
|
-
}
|
|
537
|
-
},
|
|
538
|
-
content: {
|
|
539
|
-
minHeight: "25rem",
|
|
540
|
-
chartProperties: {
|
|
541
|
-
plotArea: {},
|
|
542
|
-
title: {
|
|
543
|
-
visible: true,
|
|
544
|
-
alignment: "left"
|
|
545
|
-
}
|
|
546
|
-
},
|
|
547
|
-
data: {
|
|
548
|
-
path: "/chartData"
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
};
|
|
553
|
-
|
|
554
|
-
// Add side indicators in the card header if a target is defined for the KPI
|
|
555
|
-
if (kpiDefinition.datapoint.targetPath || kpiDefinition.datapoint.targetValue !== undefined) {
|
|
556
|
-
var resBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
557
|
-
oCardManifest["sap.card"].header.sideIndicators = [{
|
|
558
|
-
title: resBundle.getText("C_KPICARD_INDICATOR_TARGET"),
|
|
559
|
-
number: "{targetNumber}",
|
|
560
|
-
unit: "{targetUnit}"
|
|
561
|
-
}, {
|
|
562
|
-
title: resBundle.getText("C_KPICARD_INDICATOR_DEVIATION"),
|
|
563
|
-
number: "{deviationNumber}",
|
|
564
|
-
unit: "%"
|
|
565
|
-
}];
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
// Details of the card: filter descriptions
|
|
569
|
-
if ((_kpiDefinition$select = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select !== void 0 && _kpiDefinition$select.length) {
|
|
570
|
-
var aDescriptions = [];
|
|
571
|
-
kpiDefinition.selectionVariantFilterDefinitions.forEach(function (filterDefinition) {
|
|
572
|
-
var desc = getFilterStringFromDefinition(filterDefinition);
|
|
573
|
-
if (desc) {
|
|
574
|
-
aDescriptions.push(desc);
|
|
575
|
-
}
|
|
576
|
-
});
|
|
577
|
-
if (aDescriptions.length) {
|
|
578
|
-
oCardManifest["sap.card"].header.details = aDescriptions.join(", ");
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
// Chart settings: type, title, dimensions and measures in the manifest
|
|
583
|
-
oCardManifest["sap.card"].content.chartType = kpiDefinition.chart.chartType;
|
|
584
|
-
updateChartLabelSettings(kpiDefinition.chart, oCardManifest["sap.card"].content.chartProperties);
|
|
585
|
-
oCardManifest["sap.card"].content.chartProperties.title.text = formatChartTitle(kpiDefinition);
|
|
586
|
-
oCardManifest["sap.card"].content.dimensions = kpiDefinition.chart.dimensions.map(function (dimension) {
|
|
587
|
-
return {
|
|
588
|
-
label: dimension.label,
|
|
589
|
-
value: "{".concat(dimension.name, "}")
|
|
590
|
-
};
|
|
591
|
-
});
|
|
592
|
-
oCardManifest["sap.card"].content.measures = kpiDefinition.chart.measures.map(function (measure) {
|
|
593
|
-
return {
|
|
594
|
-
label: measure.label,
|
|
595
|
-
value: "{".concat(measure.name, "}")
|
|
596
|
-
};
|
|
597
|
-
});
|
|
598
|
-
oCardManifest["sap.card"].content.feeds = getChartFeeds(kpiDefinition.chart);
|
|
599
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id), {
|
|
600
|
-
manifest: oCardManifest
|
|
601
|
-
});
|
|
602
|
-
};
|
|
603
|
-
_proto.initNavigationInfo = function initNavigationInfo(kpiDefinition, oKPIModel, oShellService) {
|
|
604
|
-
// Add navigation
|
|
605
|
-
if (kpiDefinition.navigation) {
|
|
606
|
-
return getNavigationParameters(kpiDefinition.navigation, oShellService).then(function (oNavInfo) {
|
|
607
|
-
if (oNavInfo) {
|
|
608
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/header/actions"), [{
|
|
609
|
-
type: "Navigation",
|
|
610
|
-
parameters: oNavInfo
|
|
611
|
-
}]);
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
} else {
|
|
615
|
-
return Promise.resolve();
|
|
616
|
-
}
|
|
617
|
-
};
|
|
618
|
-
_proto.onInit = function onInit() {
|
|
619
|
-
var _getPageModel,
|
|
620
|
-
_this = this;
|
|
621
|
-
this.aKPIDefinitions = (_getPageModel = this.getView().getController()._getPageModel()) === null || _getPageModel === void 0 ? void 0 : _getPageModel.getProperty("/kpiDefinitions");
|
|
622
|
-
if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
|
|
623
|
-
var oView = this.getView();
|
|
624
|
-
var oAppComponent = oView.getController().getAppComponent();
|
|
625
|
-
|
|
626
|
-
// Create a JSON model to store KPI data
|
|
627
|
-
var oKPIModel = new JSONModel();
|
|
628
|
-
oView.setModel(oKPIModel, "kpiModel");
|
|
629
|
-
this.aKPIDefinitions.forEach(function (kpiDefinition) {
|
|
630
|
-
// Create the manifest for the KPI card and store it in the KPI model
|
|
631
|
-
_this.initCardManifest(kpiDefinition, oKPIModel);
|
|
632
|
-
|
|
633
|
-
// Set the navigation information in the manifest
|
|
634
|
-
_this.initNavigationInfo(kpiDefinition, oKPIModel, oAppComponent.getShellServices()).catch(function (err) {
|
|
635
|
-
Log.error(err);
|
|
636
|
-
});
|
|
637
|
-
|
|
638
|
-
// Load tag data for the KPI
|
|
639
|
-
_this.loadKPITagData(kpiDefinition, oAppComponent.getModel(), oKPIModel).catch(function (err) {
|
|
640
|
-
Log.error(err);
|
|
641
|
-
});
|
|
642
|
-
});
|
|
643
|
-
}
|
|
644
|
-
};
|
|
645
|
-
_proto.onExit = function onExit() {
|
|
646
|
-
var oKPIModel = this.getView().getModel("kpiModel");
|
|
647
|
-
if (oKPIModel) {
|
|
648
|
-
oKPIModel.destroy();
|
|
649
|
-
}
|
|
650
|
-
};
|
|
651
|
-
_proto.updateDatapointValueAndCurrency = function updateDatapointValueAndCurrency(kpiDefinition, kpiContext, oKPIModel) {
|
|
652
|
-
var _kpiDefinition$datapo, _kpiDefinition$datapo2, _kpiDefinition$datapo3;
|
|
653
|
-
var currentLocale = new Locale(sap.ui.getCore().getConfiguration().getLanguage());
|
|
654
|
-
var rawUnit = (_kpiDefinition$datapo = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo !== void 0 && _kpiDefinition$datapo.isPath ? kpiContext.getProperty(kpiDefinition.datapoint.unit.value) : (_kpiDefinition$datapo2 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo2 === void 0 ? void 0 : _kpiDefinition$datapo2.value;
|
|
655
|
-
var isPercentage = ((_kpiDefinition$datapo3 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo3 === void 0 ? void 0 : _kpiDefinition$datapo3.isCurrency) === false && rawUnit === "%";
|
|
656
|
-
|
|
657
|
-
// /////////////////////
|
|
658
|
-
// Main KPI value
|
|
659
|
-
var rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
660
|
-
|
|
661
|
-
// Value formatted with a scale
|
|
662
|
-
var kpiValue = NumberFormat.getFloatInstance({
|
|
663
|
-
style: isPercentage ? undefined : "short",
|
|
664
|
-
minFractionDigits: 0,
|
|
665
|
-
maxFractionDigits: 1,
|
|
666
|
-
showScale: !isPercentage
|
|
667
|
-
}, currentLocale).format(rawValue);
|
|
668
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValue"), kpiValue);
|
|
669
|
-
|
|
670
|
-
// Value without a scale
|
|
671
|
-
var kpiValueUnscaled = NumberFormat.getFloatInstance({
|
|
672
|
-
maxFractionDigits: 2,
|
|
673
|
-
showScale: false,
|
|
674
|
-
groupingEnabled: true
|
|
675
|
-
}, currentLocale).format(rawValue);
|
|
676
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueUnscaled"), kpiValueUnscaled);
|
|
677
|
-
|
|
678
|
-
// Value formatted with the scale omitted
|
|
679
|
-
var kpiValueNoScale = NumberFormat.getFloatInstance({
|
|
680
|
-
style: isPercentage ? undefined : "short",
|
|
681
|
-
minFractionDigits: 0,
|
|
682
|
-
maxFractionDigits: 1,
|
|
683
|
-
showScale: false
|
|
684
|
-
}, currentLocale).format(rawValue);
|
|
685
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueNoScale"), kpiValueNoScale);
|
|
686
|
-
|
|
687
|
-
// Scale of the value
|
|
688
|
-
var kpiValueScale = NumberFormat.getFloatInstance({
|
|
689
|
-
style: isPercentage ? undefined : "short",
|
|
690
|
-
decimals: 0,
|
|
691
|
-
maxIntegerDigits: 0,
|
|
692
|
-
showScale: true
|
|
693
|
-
}, currentLocale).format(rawValue);
|
|
694
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueScale"), kpiValueScale);
|
|
695
|
-
|
|
696
|
-
// /////////////////////
|
|
697
|
-
// Unit or currency
|
|
698
|
-
if (kpiDefinition.datapoint.unit && rawUnit) {
|
|
699
|
-
if (kpiDefinition.datapoint.unit.isCurrency) {
|
|
700
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), rawUnit);
|
|
701
|
-
} else {
|
|
702
|
-
// In case of unit of measure, we have to format it properly
|
|
703
|
-
var kpiUnit = NumberFormat.getUnitInstance({
|
|
704
|
-
showNumber: false
|
|
705
|
-
}, currentLocale).format(rawValue, rawUnit);
|
|
706
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), kpiUnit);
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
};
|
|
710
|
-
_proto.updateDatapointCriticality = function updateDatapointCriticality(kpiDefinition, kpiContext, oKPIModel) {
|
|
711
|
-
var rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
712
|
-
var criticalityValue = MessageType.None;
|
|
713
|
-
if (kpiDefinition.datapoint.criticalityValue) {
|
|
714
|
-
// Criticality is a fixed value
|
|
715
|
-
criticalityValue = kpiDefinition.datapoint.criticalityValue;
|
|
716
|
-
} else if (kpiDefinition.datapoint.criticalityPath) {
|
|
717
|
-
// Criticality comes from another property (via a path)
|
|
718
|
-
criticalityValue = MessageTypeFromCriticality[kpiContext.getProperty(kpiDefinition.datapoint.criticalityPath)] || MessageType.None;
|
|
719
|
-
} else if (kpiDefinition.datapoint.criticalityCalculationThresholds && kpiDefinition.datapoint.criticalityCalculationMode) {
|
|
720
|
-
// Criticality calculation
|
|
721
|
-
switch (kpiDefinition.datapoint.criticalityCalculationMode) {
|
|
722
|
-
case "UI.ImprovementDirectionType/Target":
|
|
723
|
-
criticalityValue = messageTypeFromTargetCalculation(rawValue, kpiDefinition.datapoint.criticalityCalculationThresholds);
|
|
724
|
-
break;
|
|
725
|
-
case "UI.ImprovementDirectionType/Minimize":
|
|
726
|
-
criticalityValue = messageTypeFromMinimizeCalculation(rawValue, kpiDefinition.datapoint.criticalityCalculationThresholds);
|
|
727
|
-
break;
|
|
728
|
-
case "UI.ImprovementDirectionType/Maximize":
|
|
729
|
-
default:
|
|
730
|
-
criticalityValue = messageTypeFromMaximizeCalculation(rawValue, kpiDefinition.datapoint.criticalityCalculationThresholds);
|
|
731
|
-
break;
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainCriticality"), criticalityValue);
|
|
735
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainState"), ValueColorFromMessageType[criticalityValue] || "None");
|
|
736
|
-
};
|
|
737
|
-
_proto.updateDatapointTrend = function updateDatapointTrend(kpiDefinition, kpiContext, oKPIModel) {
|
|
738
|
-
var rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
739
|
-
var trendValue = "None";
|
|
740
|
-
if (kpiDefinition.datapoint.trendValue) {
|
|
741
|
-
// Trend is a fixed value
|
|
742
|
-
trendValue = kpiDefinition.datapoint.trendValue;
|
|
743
|
-
} else if (kpiDefinition.datapoint.trendPath) {
|
|
744
|
-
// Trend comes from another property via a path
|
|
745
|
-
trendValue = deviationIndicatorFromTrendType(kpiContext.getProperty(kpiDefinition.datapoint.trendPath));
|
|
746
|
-
} else if (kpiDefinition.datapoint.trendCalculationReferenceValue !== undefined || kpiDefinition.datapoint.trendCalculationReferencePath) {
|
|
747
|
-
// Calculated trend
|
|
748
|
-
var trendReferenceValue;
|
|
749
|
-
if (kpiDefinition.datapoint.trendCalculationReferenceValue !== undefined) {
|
|
750
|
-
trendReferenceValue = kpiDefinition.datapoint.trendCalculationReferenceValue;
|
|
751
|
-
} else {
|
|
752
|
-
trendReferenceValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.trendCalculationReferencePath || ""));
|
|
753
|
-
}
|
|
754
|
-
trendValue = deviationIndicatorFromCalculation(rawValue, trendReferenceValue, !!kpiDefinition.datapoint.trendCalculationIsRelative, kpiDefinition.datapoint.trendCalculationTresholds);
|
|
755
|
-
}
|
|
756
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/trend"), trendValue);
|
|
757
|
-
};
|
|
758
|
-
_proto.updateTargetValue = function updateTargetValue(kpiDefinition, kpiContext, oKPIModel) {
|
|
759
|
-
if (kpiDefinition.datapoint.targetValue === undefined && kpiDefinition.datapoint.targetPath === undefined) {
|
|
760
|
-
return; // No target set for the KPI
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
var rawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.propertyPath));
|
|
764
|
-
var currentLocale = new Locale(sap.ui.getCore().getConfiguration().getLanguage());
|
|
765
|
-
var targetRawValue;
|
|
766
|
-
if (kpiDefinition.datapoint.targetValue !== undefined) {
|
|
767
|
-
targetRawValue = kpiDefinition.datapoint.targetValue;
|
|
768
|
-
} else {
|
|
769
|
-
targetRawValue = Number.parseFloat(kpiContext.getProperty(kpiDefinition.datapoint.targetPath || ""));
|
|
770
|
-
}
|
|
771
|
-
var deviationRawValue = targetRawValue !== 0 ? (rawValue - targetRawValue) / targetRawValue * 100 : undefined;
|
|
772
|
-
|
|
773
|
-
// Formatting
|
|
774
|
-
var targetValue = NumberFormat.getFloatInstance({
|
|
775
|
-
style: "short",
|
|
776
|
-
minFractionDigits: 0,
|
|
777
|
-
maxFractionDigits: 1,
|
|
778
|
-
showScale: false
|
|
779
|
-
}, currentLocale).format(targetRawValue);
|
|
780
|
-
var targetScale = NumberFormat.getFloatInstance({
|
|
781
|
-
style: "short",
|
|
782
|
-
decimals: 0,
|
|
783
|
-
maxIntegerDigits: 0,
|
|
784
|
-
showScale: true
|
|
785
|
-
}, currentLocale).format(targetRawValue);
|
|
786
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetNumber"), targetValue);
|
|
787
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetUnit"), targetScale);
|
|
788
|
-
if (deviationRawValue !== undefined) {
|
|
789
|
-
var deviationValue = NumberFormat.getFloatInstance({
|
|
790
|
-
minFractionDigits: 0,
|
|
791
|
-
maxFractionDigits: 1,
|
|
792
|
-
showScale: false
|
|
793
|
-
}, currentLocale).format(deviationRawValue);
|
|
794
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), deviationValue);
|
|
795
|
-
} else {
|
|
796
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), "N/A");
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
|
|
800
|
-
/**
|
|
801
|
-
* Loads tag data for a KPI, and stores it in the JSON KPI model.
|
|
802
|
-
*
|
|
803
|
-
* @param kpiDefinition The definition of the KPI.
|
|
804
|
-
* @param oMainModel The model used to load the data.
|
|
805
|
-
* @param oKPIModel The JSON model where the data will be stored
|
|
806
|
-
* @param loadFull If not true, loads only data for the KPI tag
|
|
807
|
-
* @returns Returns the promise that is resolved when data is loaded.
|
|
808
|
-
*/;
|
|
809
|
-
_proto.loadKPITagData = function loadKPITagData(kpiDefinition, oMainModel, oKPIModel, loadFull) {
|
|
810
|
-
var _kpiDefinition$datapo4,
|
|
811
|
-
_kpiDefinition$select2,
|
|
812
|
-
_this2 = this;
|
|
813
|
-
// If loadFull=false, then we're just loading data for the tag and we use the "$auto.LongRunners" groupID
|
|
814
|
-
// If loadFull=true, we're loading data for the whole KPI (tag + card) and we use the default ("$auto") groupID
|
|
815
|
-
var oListBinding = loadFull ? oMainModel.bindList("/".concat(kpiDefinition.entitySet)) : oMainModel.bindList("/".concat(kpiDefinition.entitySet), undefined, undefined, undefined, {
|
|
816
|
-
$$groupId: "$auto.LongRunners"
|
|
817
|
-
});
|
|
818
|
-
var oAggregate = {};
|
|
819
|
-
|
|
820
|
-
// Main value + currency/unit
|
|
821
|
-
if ((_kpiDefinition$datapo4 = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo4 !== void 0 && _kpiDefinition$datapo4.isPath) {
|
|
822
|
-
oAggregate[kpiDefinition.datapoint.propertyPath] = {
|
|
823
|
-
unit: kpiDefinition.datapoint.unit.value
|
|
824
|
-
};
|
|
825
|
-
} else {
|
|
826
|
-
oAggregate[kpiDefinition.datapoint.propertyPath] = {};
|
|
827
|
-
}
|
|
828
|
-
|
|
829
|
-
// Property for criticality
|
|
830
|
-
if (kpiDefinition.datapoint.criticalityPath) {
|
|
831
|
-
oAggregate[kpiDefinition.datapoint.criticalityPath] = {};
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
// Properties for trend and trend calculation
|
|
835
|
-
if (loadFull) {
|
|
836
|
-
if (kpiDefinition.datapoint.trendPath) {
|
|
837
|
-
oAggregate[kpiDefinition.datapoint.trendPath] = {};
|
|
838
|
-
}
|
|
839
|
-
if (kpiDefinition.datapoint.trendCalculationReferencePath) {
|
|
840
|
-
oAggregate[kpiDefinition.datapoint.trendCalculationReferencePath] = {};
|
|
841
|
-
}
|
|
842
|
-
if (kpiDefinition.datapoint.targetPath) {
|
|
843
|
-
oAggregate[kpiDefinition.datapoint.targetPath] = {};
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
oListBinding.setAggregation({
|
|
847
|
-
aggregate: oAggregate
|
|
848
|
-
});
|
|
849
|
-
|
|
850
|
-
// Manage SelectionVariant filters
|
|
851
|
-
if ((_kpiDefinition$select2 = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select2 !== void 0 && _kpiDefinition$select2.length) {
|
|
852
|
-
var aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(function (filter) {
|
|
853
|
-
return filter !== undefined;
|
|
854
|
-
});
|
|
855
|
-
oListBinding.filter(aFilters);
|
|
856
|
-
}
|
|
857
|
-
return oListBinding.requestContexts(0, 1).then(function (aContexts) {
|
|
858
|
-
if (aContexts.length) {
|
|
859
|
-
var _kpiDefinition$datapo5, _kpiDefinition$datapo6;
|
|
860
|
-
var rawUnit = (_kpiDefinition$datapo5 = kpiDefinition.datapoint.unit) !== null && _kpiDefinition$datapo5 !== void 0 && _kpiDefinition$datapo5.isPath ? aContexts[0].getProperty(kpiDefinition.datapoint.unit.value) : (_kpiDefinition$datapo6 = kpiDefinition.datapoint.unit) === null || _kpiDefinition$datapo6 === void 0 ? void 0 : _kpiDefinition$datapo6.value;
|
|
861
|
-
if (kpiDefinition.datapoint.unit && !rawUnit) {
|
|
862
|
-
// A unit/currency is defined, but its value is undefined --> multi-unit situation
|
|
863
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValue"), "*");
|
|
864
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueUnscaled"), "*");
|
|
865
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueNoScale"), "*");
|
|
866
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainValueScale"), "");
|
|
867
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainUnit"), undefined);
|
|
868
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainCriticality"), MessageType.None);
|
|
869
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/mainState"), "None");
|
|
870
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/trend"), "None");
|
|
871
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetNumber"), undefined);
|
|
872
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/targetUnit"), undefined);
|
|
873
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/deviationNumber"), undefined);
|
|
874
|
-
} else {
|
|
875
|
-
_this2.updateDatapointValueAndCurrency(kpiDefinition, aContexts[0], oKPIModel);
|
|
876
|
-
_this2.updateDatapointCriticality(kpiDefinition, aContexts[0], oKPIModel);
|
|
877
|
-
if (loadFull) {
|
|
878
|
-
_this2.updateDatapointTrend(kpiDefinition, aContexts[0], oKPIModel);
|
|
879
|
-
_this2.updateTargetValue(kpiDefinition, aContexts[0], oKPIModel);
|
|
880
|
-
}
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
});
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
/**
|
|
887
|
-
* Loads card data for a KPI, and stores it in the JSON KPI model.
|
|
888
|
-
*
|
|
889
|
-
* @param kpiDefinition The definition of the KPI.
|
|
890
|
-
* @param oMainModel The model used to load the data.
|
|
891
|
-
* @param oKPIModel The JSON model where the data will be stored
|
|
892
|
-
* @returns Returns the promise that is resolved when data is loaded.
|
|
893
|
-
*/;
|
|
894
|
-
_proto.loadKPICardData = function loadKPICardData(kpiDefinition, oMainModel, oKPIModel) {
|
|
895
|
-
var _kpiDefinition$select3;
|
|
896
|
-
var oListBinding = oMainModel.bindList("/".concat(kpiDefinition.entitySet));
|
|
897
|
-
var oGroup = {};
|
|
898
|
-
var oAggregate = {};
|
|
899
|
-
kpiDefinition.chart.dimensions.forEach(function (dimension) {
|
|
900
|
-
oGroup[dimension.name] = {};
|
|
901
|
-
});
|
|
902
|
-
kpiDefinition.chart.measures.forEach(function (measure) {
|
|
903
|
-
oAggregate[measure.name] = {};
|
|
904
|
-
});
|
|
905
|
-
oListBinding.setAggregation({
|
|
906
|
-
group: oGroup,
|
|
907
|
-
aggregate: oAggregate
|
|
908
|
-
});
|
|
909
|
-
|
|
910
|
-
// Manage SelectionVariant filters
|
|
911
|
-
if ((_kpiDefinition$select3 = kpiDefinition.selectionVariantFilterDefinitions) !== null && _kpiDefinition$select3 !== void 0 && _kpiDefinition$select3.length) {
|
|
912
|
-
var aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(function (filter) {
|
|
913
|
-
return filter !== undefined;
|
|
914
|
-
});
|
|
915
|
-
oListBinding.filter(aFilters);
|
|
916
|
-
}
|
|
917
|
-
|
|
918
|
-
// Sorting
|
|
919
|
-
if (kpiDefinition.chart.sortOrder) {
|
|
920
|
-
oListBinding.sort(kpiDefinition.chart.sortOrder.map(function (sortInfo) {
|
|
921
|
-
return new Sorter(sortInfo.name, sortInfo.descending);
|
|
922
|
-
}));
|
|
923
|
-
}
|
|
924
|
-
return oListBinding.requestContexts(0, kpiDefinition.chart.maxItems).then(function (aContexts) {
|
|
925
|
-
var chartData = aContexts.map(function (oContext) {
|
|
926
|
-
var oData = {};
|
|
927
|
-
kpiDefinition.chart.dimensions.forEach(function (dimension) {
|
|
928
|
-
oData[dimension.name] = oContext.getProperty(dimension.name);
|
|
929
|
-
});
|
|
930
|
-
kpiDefinition.chart.measures.forEach(function (measure) {
|
|
931
|
-
oData[measure.name] = oContext.getProperty(measure.name);
|
|
932
|
-
});
|
|
933
|
-
return oData;
|
|
934
|
-
});
|
|
935
|
-
oKPIModel.setProperty("/".concat(kpiDefinition.id, "/manifest/sap.card/data/json/chartData"), chartData);
|
|
936
|
-
});
|
|
937
|
-
}
|
|
938
|
-
|
|
939
|
-
/**
|
|
940
|
-
* Gets the popover to display the KPI card
|
|
941
|
-
* The popover and the contained card for the KPIs are created if necessary.
|
|
942
|
-
* The popover is shared between all KPIs, so it's created only once.
|
|
943
|
-
*
|
|
944
|
-
* @param oKPITag The tag that triggered the popover opening.
|
|
945
|
-
* @returns The shared popover as a promise.
|
|
946
|
-
*/;
|
|
947
|
-
_proto.getPopover = function getPopover(oKPITag) {
|
|
948
|
-
var _this3 = this;
|
|
949
|
-
if (!this.oPopover) {
|
|
950
|
-
return new Promise(function (resolve, reject) {
|
|
951
|
-
Core.loadLibrary("sap/ui/integration", {
|
|
952
|
-
async: true
|
|
953
|
-
}).then(function () {
|
|
954
|
-
sap.ui.require(["sap/ui/integration/widgets/Card", "sap/ui/integration/Host"], function (Card, Host) {
|
|
955
|
-
var oHost = new Host();
|
|
956
|
-
oHost.attachAction(function (oEvent) {
|
|
957
|
-
var sType = oEvent.getParameter("type");
|
|
958
|
-
var oParams = oEvent.getParameter("parameters");
|
|
959
|
-
if (sType === "Navigation") {
|
|
960
|
-
if (oParams.semanticObject) {
|
|
961
|
-
_this3.getView().getController()._intentBasedNavigation.navigate(oParams.semanticObject, oParams.action);
|
|
962
|
-
} else {
|
|
963
|
-
_this3.getView().getController()._intentBasedNavigation.navigateOutbound(oParams.outbound);
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
});
|
|
967
|
-
_this3.oCard = new Card({
|
|
968
|
-
width: "25rem",
|
|
969
|
-
height: "auto"
|
|
970
|
-
});
|
|
971
|
-
_this3.oCard.setHost(oHost);
|
|
972
|
-
_this3.oPopover = new Popover("kpi-Popover", {
|
|
973
|
-
showHeader: false,
|
|
974
|
-
placement: "Auto",
|
|
975
|
-
content: [_this3.oCard]
|
|
976
|
-
});
|
|
977
|
-
oKPITag.addDependent(_this3.oPopover); // The first clicked tag gets the popover as dependent
|
|
978
|
-
|
|
979
|
-
resolve(_this3.oPopover);
|
|
980
|
-
});
|
|
981
|
-
}).catch(function () {
|
|
982
|
-
reject();
|
|
983
|
-
});
|
|
984
|
-
});
|
|
985
|
-
} else {
|
|
986
|
-
return Promise.resolve(this.oPopover);
|
|
987
|
-
}
|
|
988
|
-
};
|
|
989
|
-
_proto.onKPIPressed = function onKPIPressed(oKPITag, kpiID) {
|
|
990
|
-
var _this4 = this;
|
|
991
|
-
var oKPIModel = oKPITag.getModel("kpiModel");
|
|
992
|
-
if (this.aKPIDefinitions && this.aKPIDefinitions.length) {
|
|
993
|
-
var kpiDefinition = this.aKPIDefinitions.find(function (oDef) {
|
|
994
|
-
return oDef.id === kpiID;
|
|
995
|
-
});
|
|
996
|
-
if (kpiDefinition) {
|
|
997
|
-
var oModel = oKPITag.getModel();
|
|
998
|
-
var aPromises = [this.loadKPITagData(kpiDefinition, oModel, oKPIModel, true), this.loadKPICardData(kpiDefinition, oModel, oKPIModel), this.getPopover(oKPITag)];
|
|
999
|
-
Promise.all(aPromises).then(function (aResults) {
|
|
1000
|
-
_this4.oCard.setManifest(oKPIModel.getProperty("/".concat(kpiID, "/manifest")));
|
|
1001
|
-
_this4.oCard.refresh();
|
|
1002
|
-
var oPopover = aResults[2];
|
|
1003
|
-
oPopover.openBy(oKPITag, false);
|
|
1004
|
-
}).catch(function (err) {
|
|
1005
|
-
Log.error(err);
|
|
1006
|
-
});
|
|
1007
|
-
}
|
|
1008
|
-
}
|
|
1009
|
-
};
|
|
1010
|
-
return KPIManagementControllerExtension;
|
|
1011
|
-
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onKPIPressed", [_dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "onKPIPressed"), _class2.prototype)), _class2)) || _class);
|
|
1012
|
-
return KPIManagementControllerExtension;
|
|
1013
|
-
}, false);
|
|
1014
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0Q29uZmlndXJhdGlvbiIsImdldExhbmd1YWdlIiwicmVzQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRhdGVGb3JtYXQiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZUluc3RhbmNlIiwic3R5bGUiLCJmb3JtYXRSYW5nZSIsInZhbHVlTG93IiwicHJvcGVydHlUeXBlIiwiaW5kZXhPZiIsImZvcm1hdCIsIkRhdGUiLCJ2YWx1ZUhpZ2giLCJnZXRUZXh0Iiwiam9pbiIsImZvcm1hdENoYXJ0VGl0bGUiLCJrcGlEZWYiLCJmb3JtYXRMaXN0IiwiaXRlbXMiLCJsYWJlbCIsInJlcyIsIkkiLCJjaGFydCIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ0aXRsZSIsInZpc2libGUiLCJ2YWx1ZUF4aXMiLCJmb3JtYXRTdHJpbmciLCJwbG90QXJlYSIsImRhdGFMYWJlbCIsInR5cGUiLCJ2YWx1ZUF4aXMyIiwibGVnZW5kR3JvdXAiLCJsYXlvdXQiLCJwb3NpdGlvbiIsImFsaWdubWVudCIsInNpemVMZWdlbmQiLCJmaWx0ZXJNYXAiLCJhT2JqZWN0cyIsImFSb2xlcyIsImZpbHRlciIsImRpbWVuc2lvbiIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJkZWZpbmVVSTVDbGFzcyIsIm1ldGhvZE92ZXJyaWRlIiwicHVibGljRXh0ZW5zaW9uIiwiaW5pdENhcmRNYW5pZmVzdCIsImtwaURlZmluaXRpb24iLCJvS1BJTW9kZWwiLCJvQ2FyZE1hbmlmZXN0IiwiaWQiLCJ0ZWNobm9sb2d5IiwiZGF0YSIsImpzb24iLCJoZWFkZXIiLCJkYXRhcG9pbnQiLCJzdWJUaXRsZSIsImRlc2NyaXB0aW9uIiwidW5pdE9mTWVhc3VyZW1lbnQiLCJtYWluSW5kaWNhdG9yIiwibnVtYmVyIiwidW5pdCIsInN0YXRlIiwidHJlbmQiLCJjb250ZW50IiwibWluSGVpZ2h0IiwiY2hhcnRQcm9wZXJ0aWVzIiwicGF0aCIsInRhcmdldFBhdGgiLCJ0YXJnZXRWYWx1ZSIsInNpZGVJbmRpY2F0b3JzIiwic2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zIiwiYURlc2NyaXB0aW9ucyIsImZvckVhY2giLCJkZXNjIiwiZGV0YWlscyIsInRleHQiLCJ2YWx1ZSIsIm5hbWUiLCJtZWFzdXJlIiwiZmVlZHMiLCJzZXRQcm9wZXJ0eSIsIm1hbmlmZXN0IiwiaW5pdE5hdmlnYXRpb25JbmZvIiwibmF2aWdhdGlvbiIsIm9OYXZJbmZvIiwicGFyYW1ldGVycyIsIm9uSW5pdCIsImFLUElEZWZpbml0aW9ucyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiX2dldFBhZ2VNb2RlbCIsImdldFByb3BlcnR5Iiwib1ZpZXciLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50IiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJnZXRTaGVsbFNlcnZpY2VzIiwiY2F0Y2giLCJlcnIiLCJMb2ciLCJlcnJvciIsImxvYWRLUElUYWdEYXRhIiwiZ2V0TW9kZWwiLCJvbkV4aXQiLCJkZXN0cm95IiwidXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeSIsImtwaUNvbnRleHQiLCJyYXdVbml0IiwiaXNQYXRoIiwiaXNQZXJjZW50YWdlIiwiaXNDdXJyZW5jeSIsInJhd1ZhbHVlIiwiTnVtYmVyIiwicGFyc2VGbG9hdCIsIk51bWJlckZvcm1hdCIsImdldEZsb2F0SW5zdGFuY2UiLCJtaW5GcmFjdGlvbkRpZ2l0cyIsIm1heEZyYWN0aW9uRGlnaXRzIiwic2hvd1NjYWxlIiwia3BpVmFsdWVVbnNjYWxlZCIsImdyb3VwaW5nRW5hYmxlZCIsImtwaVZhbHVlTm9TY2FsZSIsImtwaVZhbHVlU2NhbGUiLCJkZWNpbWFscyIsIm1heEludGVnZXJEaWdpdHMiLCJrcGlVbml0IiwiZ2V0VW5pdEluc3RhbmNlIiwic2hvd051bWJlciIsInVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5IiwiY3JpdGljYWxpdHlWYWx1ZSIsImNyaXRpY2FsaXR5UGF0aCIsImNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUiLCJ1cGRhdGVEYXRhcG9pbnRUcmVuZCIsInRyZW5kUGF0aCIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRSZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsInVwZGF0ZVRhcmdldFZhbHVlIiwidGFyZ2V0UmF3VmFsdWUiLCJkZXZpYXRpb25SYXdWYWx1ZSIsInRhcmdldFNjYWxlIiwiZGV2aWF0aW9uVmFsdWUiLCJvTWFpbk1vZGVsIiwibG9hZEZ1bGwiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsImVudGl0eVNldCIsIiQkZ3JvdXBJZCIsIm9BZ2dyZWdhdGUiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImFGaWx0ZXJzIiwicmVxdWVzdENvbnRleHRzIiwiYUNvbnRleHRzIiwibG9hZEtQSUNhcmREYXRhIiwib0dyb3VwIiwiZ3JvdXAiLCJzb3J0T3JkZXIiLCJzb3J0Iiwic29ydEluZm8iLCJTb3J0ZXIiLCJkZXNjZW5kaW5nIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJvUG9wb3ZlciIsInJlamVjdCIsImxvYWRMaWJyYXJ5IiwiYXN5bmMiLCJyZXF1aXJlIiwiQ2FyZCIsIkhvc3QiLCJvSG9zdCIsImF0dGFjaEFjdGlvbiIsIm9FdmVudCIsInNUeXBlIiwiZ2V0UGFyYW1ldGVyIiwib1BhcmFtcyIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRlT3V0Ym91bmQiLCJvQ2FyZCIsIndpZHRoIiwiaGVpZ2h0Iiwic2V0SG9zdCIsIlBvcG92ZXIiLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiYWRkRGVwZW5kZW50Iiwib25LUElQcmVzc2VkIiwia3BpSUQiLCJvRGVmIiwib01vZGVsIiwiYVByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJzZXRNYW5pZmVzdCIsInJlZnJlc2giLCJvcGVuQnkiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUElNYW5hZ2VtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEtQSUNoYXJ0RGVmaW5pdGlvbiwgS1BJRGVmaW5pdGlvbiwgTmF2aWdhdGlvbkluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckRlZmluaXRpb24sIFJhbmdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBHZW5lcmljVGFnIGZyb20gXCJzYXAvbS9HZW5lcmljVGFnXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L051bWJlckZvcm1hdFwiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwic2FwL3VpL2NvcmUvTG9jYWxlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgbWV0aG9kT3ZlcnJpZGUsIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eTogUmVjb3JkPHN0cmluZywgTWVzc2FnZVR5cGU+ID0ge1xuXHRcIjFcIjogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFwiMlwiOiBNZXNzYWdlVHlwZS5XYXJuaW5nLFxuXHRcIjNcIjogTWVzc2FnZVR5cGUuU3VjY2Vzcyxcblx0XCI1XCI6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXG59O1xuXG5jb25zdCBWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlOiBSZWNvcmQ8TWVzc2FnZVR5cGUsIHN0cmluZz4gPSB7XG5cdEVycm9yOiBcIkVycm9yXCIsXG5cdFdhcm5pbmc6IFwiQ3JpdGljYWxcIixcblx0U3VjY2VzczogXCJHb29kXCIsXG5cdEluZm9ybWF0aW9uOiBcIk5vbmVcIixcblx0Tm9uZTogXCJOb25lXCJcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdUYXJnZXQnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzVdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s1XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s0XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzRdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbM10pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWluaW1pemUnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0FjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWF4aW1pemUnLlxuICpcbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZV0uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciB2YWx1ZSBmcm9tIGEgdHJlbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHRyZW5kVmFsdWUgVGhlIGNyaXRpY2FsaXR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUodHJlbmRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdHN3aXRjaCAodHJlbmRWYWx1ZSkge1xuXHRcdGNhc2UgMTogLy8gU3Ryb25nVXBcblx0XHRjYXNlIFwiMVwiOlxuXHRcdGNhc2UgMjogLy8gVXBcblx0XHRjYXNlIFwiMlwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIDQ6IC8vIERvd25cblx0XHRjYXNlIFwiNFwiOlxuXHRcdGNhc2UgNTogLy8gU3Ryb25nRG93blxuXHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgZnJvbSBhIFRyZW5kQ2FsY3VsYXRpb24uXG4gKlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJXG4gKiBAcGFyYW0gcmVmZXJlbmNlVmFsdWUgVGhlIHJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBpc1JlbGF0aXZlIFRydWUgaXMgdGhlIGNvbXBhcmlzb24gaXMgcmVsYXRpdmVcbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBBcnJheSBvZiB0aHJlc2hvbGRzIFtTdHJvbmdEb3duRGlmZmVyZW5jZSwgRG93bkRpZmZlcmVuY2UsIFVwRGlmZmVyZW5jZSwgU3Ryb25nVXBEaWZmZXJlbmNlXVxuICogQHJldHVybnMgUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRrcGlWYWx1ZTogbnVtYmVyLFxuXHRyZWZlcmVuY2VWYWx1ZTogbnVtYmVyLFxuXHRpc1JlbGF0aXZlOiBib29sZWFuLFxuXHRhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRpZiAoIWFUaHJlc2hvbGRzIHx8IChpc1JlbGF0aXZlICYmICFyZWZlcmVuY2VWYWx1ZSkpIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cblxuXHRjb25zdCBjb21wVmFsdWUgPSBpc1JlbGF0aXZlID8gKGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWUpIC8gcmVmZXJlbmNlVmFsdWUgOiBrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1swXSkge1xuXHRcdC8vIFN0cm9uZ0Rvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1sxXSkge1xuXHRcdC8vIERvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1szXSkge1xuXHRcdC8vIFN0cm9uZ1VwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1syXSkge1xuXHRcdC8vIFVwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBTaWRld2F5cyAtLT4gTm9uZVxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIGEgZmlsdGVyIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZpbHRlckRlZmluaXRpb24gVGhlIGZpbHRlciBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBkZWZpbml0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlIGRlZmluaXRpb24gaXMgZW1wdHkgKG5vIHJhbmdlcylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlTG93LFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VIaWdoXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBhUmFuZ2VGaWx0ZXJzID0gZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKChyYW5nZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhUmFuZ2VGaWx0ZXJzLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShzYXAudWkuZ2V0Q29yZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYW5ndWFnZSgpKTtcblx0Y29uc3QgcmVzQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0Y29uc3QgZGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHsgc3R5bGU6IFwibWVkaXVtXCIgfSwgY3VycmVudExvY2FsZSk7XG5cblx0ZnVuY3Rpb24gZm9ybWF0UmFuZ2UocmFuZ2U6IFJhbmdlRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVMb3cgPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwID8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VMb3cpKSA6IHJhbmdlLnJhbmdlTG93O1xuXHRcdGNvbnN0IHZhbHVlSGlnaCA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgPyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUhpZ2gpKSA6IHJhbmdlLnJhbmdlSGlnaDtcblxuXHRcdHN3aXRjaCAocmFuZ2Uub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0XHRyZXR1cm4gYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gO1xuXG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIGAqJHt2YWx1ZUxvd30qYDtcblxuXHRcdFx0Y2FzZSBcIkdFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NSR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRcdHJldHVybiBgPiR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRcdHJldHVybiBgPCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5CXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWBdKTtcblxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2MCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5vdENvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgKiR7dmFsdWVMb3d9KmBdKTtcblxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVMb3c7XG5cdFx0fVxuXHR9XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmFuZ2UoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgKCR7ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKGZvcm1hdFJhbmdlKS5qb2luKFwiLFwiKX0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDaGFydFRpdGxlKGtwaURlZjogS1BJRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0ZnVuY3Rpb24gZm9ybWF0TGlzdChpdGVtczogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKSB7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpdGVtc1swXS5sYWJlbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IGl0ZW1zWzBdLmxhYmVsO1xuXHRcdFx0Zm9yIChsZXQgSSA9IDE7IEkgPCBpdGVtcy5sZW5ndGggLSAxOyBJKyspIHtcblx0XHRcdFx0cmVzICs9IGAsICR7aXRlbXNbSV0ubGFiZWx9YDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lURU1TTElTVFwiLCBbcmVzLCBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5sYWJlbF0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9DSEFSVFRJVExFXCIsIFtmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5tZWFzdXJlcyksIGZvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0LmRpbWVuc2lvbnMpXSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbiwgb0NoYXJ0UHJvcGVydGllczogYW55KTogdm9pZCB7XG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0Ly8gU2hvdyBkYXRhIGxhYmVscywgZG8gbm90IHNob3cgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcInZhbHVlXCIsXG5cdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0X01GRDJcIlxuXHRcdFx0fTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdFx0Ly8gU2hvdyBheGlzIHRpdGxlLCBidWJibGUgc2l6ZSBsZWdlbmQsIGRvIG5vdCBzaG93IGRhdGEgbGFiZWxzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmxlZ2VuZEdyb3VwID0ge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwidG9wTGVmdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnNpemVMZWdlbmQgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdH1cbn1cbmZ1bmN0aW9uIGZpbHRlck1hcChhT2JqZWN0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHJvbGU/OiBzdHJpbmcgfVtdLCBhUm9sZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuXHRpZiAoYVJvbGVzICYmIGFSb2xlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gYU9iamVjdHNcblx0XHRcdC5maWx0ZXIoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVJvbGVzLmluZGV4T2YoZGltZW5zaW9uLnJvbGUpID49IDA7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYU9iamVjdHMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0Y29uc3QgYXhpczFNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMxXCJdKTtcblx0Y29uc3QgYXhpczJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKTtcblx0Y29uc3QgYXhpczNNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMzXCJdKTtcblx0Y29uc3Qgb3RoZXJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWRdKTtcblx0Y29uc3Qgc2VyaWVzRGltZW5zaW9ucyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKTtcblxuXHQvLyBHZXQgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIHJvbGUgXCJDYXRlZ29yeVwiIGZvciB0aGUgc2hhcGVcblx0Y29uc3Qgc2hhcGVEaW1lbnNpb24gPSBjaGFydERlZmluaXRpb24uZGltZW5zaW9ucy5maW5kKChkaW1lbnNpb24pID0+IHtcblx0XHRyZXR1cm4gZGltZW5zaW9uLnJvbGUgPT09IFwiQ2F0ZWdvcnlcIjtcblx0fSk7XG5cblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHgtQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMxLCBvciBmb3IgQXhpczIgaWYgbm90IGZvdW5kLCBvciBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHhNZWFzdXJlID0gYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB5LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMiwgb3Igc2Vjb25kIG1lYXN1cmUgZm9yIEF4aXMxIGlmIG5vdCBmb3VuZCwgb3IgZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHlNZWFzdXJlID0gYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdGNvbnN0IHJlcyA9IFtcblx0XHR7XG5cdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3hNZWFzdXJlXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dWlkOiBcInZhbHVlQXhpczJcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbeU1lYXN1cmVdXG5cdFx0fVxuXHRdO1xuXG5cdGlmIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlID09PSBcImJ1YmJsZVwiKSB7XG5cdFx0Ly8gTWVhc3VyZSBmb3IgdGhlIHNpemUgb2YgdGhlIGJ1YmJsZTogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMsIG9yIHJlbWFpbmluZyBtZWFzdXJlIGZvciBBeGlzMS9BeGlzMiBpZiBub3QgZm91bmRcblx0XHRjb25zdCBzaXplTWVhc3VyZSA9IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJidWJibGVXaWR0aFwiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaXplTWVhc3VyZV1cblx0XHR9KTtcblx0fVxuXG5cdC8vIENvbG9yIChvcHRpb25hbClcblx0aWYgKHNlcmllc0RpbWVuc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0dmFsdWVzOiBzZXJpZXNEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH1cblx0Ly8gU2hhcGUgKG9wdGlvbmFsKVxuXHRpZiAoc2hhcGVEaW1lbnNpb24pIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwic2hhcGVcIixcblx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaGFwZURpbWVuc2lvbi5sYWJlbF1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGxldCByZXM6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W107XG5cblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwic2l6ZVwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMpXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0cmVzID0gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInZlcnRpY2FsX2J1bGxldFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImFjdHVhbFZhbHVlc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZCwgXCJBeGlzMVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJ0YXJnZXRWYWx1ZXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0bmF2SW5mbzogTmF2aWdhdGlvbkluZm8sXG5cdG9TaGVsbFNlcnZpY2U6IGFueVxuKTogUHJvbWlzZTx7IHNlbWFudGljT2JqZWN0Pzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmc7IG91dGJvdW5kPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ+IHtcblx0aWYgKG5hdkluZm8uc2VtYW50aWNPYmplY3QpIHtcblx0XHRpZiAobmF2SW5mby5hY3Rpb24pIHtcblx0XHRcdC8vIEFjdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZDogY2hlY2sgaWYgaXQncyBhdmFpbGFibGUgaW4gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRMaW5rcyh7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0pLnRoZW4oKGFMaW5rczogYW55W10pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggPyB7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2UgZ2V0IHRoZSBwcmltYXJ5IGludGVudCBmcm9tIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChuYXZJbmZvLnNlbWFudGljT2JqZWN0KS50aGVuKChvTGluazogYW55KSA9PiB7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBObyBwcmltYXJ5IGludGVudC4uLlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0aGF0IHRoZSBwcmltYXJ5IGludGVudCBpcyBub3QgcGFydCBvZiB0aGUgdW5hdmFpbGFibGUgYWN0aW9uc1xuXHRcdFx0XHRjb25zdCBvSW5mbyA9IG9TaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2gob0xpbmsuaW50ZW50KTtcblx0XHRcdFx0cmV0dXJuIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zICYmIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zLmluZGV4T2Yob0luZm8uYWN0aW9uKSA+PSAwXG5cdFx0XHRcdFx0PyB1bmRlZmluZWRcblx0XHRcdFx0XHQ6IHsgc2VtYW50aWNPYmplY3Q6IG9JbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG9JbmZvLmFjdGlvbiB9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE91dGJvdW5kIG5hdmlnYXRpb24gc3BlY2lmaWVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdHJldHVybiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiA/IFByb21pc2UucmVzb2x2ZSh7IG91dGJvdW5kOiBuYXZJbmZvLm91dGJvdW5kTmF2aWdhdGlvbiB9KSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXHR9XG59XG5cbi8qKlxuICogQGNsYXNzIEEgY29udHJvbGxlciBleHRlbnNpb24gZm9yIG1hbmFnaW5nIHRoZSBLUElzIGluIGFuIGFuYWx5dGljYWwgbGlzdCBwYWdlXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XCIpXG5jbGFzcyBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYUtQSURlZmluaXRpb25zPzogS1BJRGVmaW5pdGlvbltdO1xuXHRwcm90ZWN0ZWQgb0NhcmQ6IGFueTtcblx0cHJvdGVjdGVkIG9Qb3BvdmVyITogUG9wb3ZlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY2FyZCBtYW5pZmVzdCBmb3IgYSBLUEkgZGVmaW5pdGlvbiBhbmQgc3RvcmVzIGl0IGluIGEgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIEtQSSBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgaW4gd2hpY2ggdGhlIG1hbmlmZXN0IHdpbGwgYmUgc3RvcmVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IG9DYXJkTWFuaWZlc3Q6IGFueSA9IHtcblx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdGlkOiBcInNhcC5mZVwiLFxuXHRcdFx0XHR0eXBlOiBcImNhcmRcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLnVpXCI6IHtcblx0XHRcdFx0dGVjaG5vbG9neTogXCJVSTVcIlxuXHRcdFx0fSxcblx0XHRcdFwic2FwLmNhcmRcIjoge1xuXHRcdFx0XHR0eXBlOiBcIkFuYWx5dGljYWxcIixcblx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdGpzb246IHt9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGhlYWRlcjoge1xuXHRcdFx0XHRcdHR5cGU6IFwiTnVtZXJpY1wiLFxuXHRcdFx0XHRcdHRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50aXRsZSxcblx0XHRcdFx0XHRzdWJUaXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuZGVzY3JpcHRpb24sXG5cdFx0XHRcdFx0dW5pdE9mTWVhc3VyZW1lbnQ6IFwie21haW5Vbml0fVwiLFxuXHRcdFx0XHRcdG1haW5JbmRpY2F0b3I6IHtcblx0XHRcdFx0XHRcdG51bWJlcjogXCJ7bWFpblZhbHVlTm9TY2FsZX1cIixcblx0XHRcdFx0XHRcdHVuaXQ6IFwie21haW5WYWx1ZVNjYWxlfVwiLFxuXHRcdFx0XHRcdFx0c3RhdGU6IFwie21haW5TdGF0ZX1cIixcblx0XHRcdFx0XHRcdHRyZW5kOiBcInt0cmVuZH1cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdG1pbkhlaWdodDogXCIyNXJlbVwiLFxuXHRcdFx0XHRcdGNoYXJ0UHJvcGVydGllczoge1xuXHRcdFx0XHRcdFx0cGxvdEFyZWE6IHt9LFxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpZ25tZW50OiBcImxlZnRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0ZGF0YToge1xuXHRcdFx0XHRcdFx0cGF0aDogXCIvY2hhcnREYXRhXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHNpZGUgaW5kaWNhdG9ycyBpbiB0aGUgY2FyZCBoZWFkZXIgaWYgYSB0YXJnZXQgaXMgZGVmaW5lZCBmb3IgdGhlIEtQSVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IHJlc0J1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLnNpZGVJbmRpY2F0b3JzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9UQVJHRVRcIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcInt0YXJnZXROdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCJ7dGFyZ2V0VW5pdH1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGl0bGU6IHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lORElDQVRPUl9ERVZJQVRJT05cIiksXG5cdFx0XHRcdFx0bnVtYmVyOiBcIntkZXZpYXRpb25OdW1iZXJ9XCIsXG5cdFx0XHRcdFx0dW5pdDogXCIlXCJcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cblx0XHQvLyBEZXRhaWxzIG9mIHRoZSBjYXJkOiBmaWx0ZXIgZGVzY3JpcHRpb25zXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5mb3JFYWNoKChmaWx0ZXJEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IGRpbWVuc2lvbi5sYWJlbCwgdmFsdWU6IGB7JHtkaW1lbnNpb24ubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50Lm1lYXN1cmVzID0ga3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5tYXAoKG1lYXN1cmUpID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBtZWFzdXJlLmxhYmVsLCB2YWx1ZTogYHske21lYXN1cmUubmFtZX19YCB9O1xuXHRcdH0pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmZlZWRzID0gZ2V0Q2hhcnRGZWVkcyhrcGlEZWZpbml0aW9uLmNoYXJ0KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH1gLCB7XG5cdFx0XHRtYW5pZmVzdDogb0NhcmRNYW5pZmVzdFxuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIGluaXROYXZpZ2F0aW9uSW5mbyhrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCwgb1NoZWxsU2VydmljZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQWRkIG5hdmlnYXRpb25cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uLCBvU2hlbGxTZXJ2aWNlKS50aGVuKChvTmF2SW5mbykgPT4ge1xuXHRcdFx0XHRpZiAob05hdkluZm8pIHtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2hlYWRlci9hY3Rpb25zYCwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb05hdkluZm9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYUtQSURlZmluaXRpb25zID0gKHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9rcGlEZWZpbml0aW9uc1wiKTtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcikuZ2V0QXBwQ29tcG9uZW50KCkgYXMgYW55O1xuXG5cdFx0XHQvLyBDcmVhdGUgYSBKU09OIG1vZGVsIHRvIHN0b3JlIEtQSSBkYXRhXG5cdFx0XHRjb25zdCBvS1BJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0XHRvVmlldy5zZXRNb2RlbChvS1BJTW9kZWwsIFwia3BpTW9kZWxcIik7XG5cblx0XHRcdHRoaXMuYUtQSURlZmluaXRpb25zLmZvckVhY2goKGtwaURlZmluaXRpb24pID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYW5pZmVzdCBmb3IgdGhlIEtQSSBjYXJkIGFuZCBzdG9yZSBpdCBpbiB0aGUgS1BJIG1vZGVsXG5cdFx0XHRcdHRoaXMuaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0dGhpcy5pbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKSkuY2F0Y2goZnVuY3Rpb24gKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIExvYWQgdGFnIGRhdGEgZm9yIHRoZSBLUElcblx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvQXBwQ29tcG9uZW50LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCwgb0tQSU1vZGVsKS5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25FeGl0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKG9LUElNb2RlbCkge1xuXHRcdFx0b0tQSU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShzYXAudWkuZ2V0Q29yZSgpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYW5ndWFnZSgpKTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVgLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluQ3JpdGljYWxpdHlgLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoc2FwLnVpLmdldENvcmUoKS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0TGFuZ3VhZ2UoKSk7XG5cblx0XHRsZXQgdGFyZ2V0UmF3VmFsdWU6IG51bWJlcjtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0UmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwgXCJcIikpO1xuXHRcdH1cblx0XHRjb25zdCBkZXZpYXRpb25SYXdWYWx1ZSA9IHRhcmdldFJhd1ZhbHVlICE9PSAwID8gKChyYXdWYWx1ZSAtIHRhcmdldFJhd1ZhbHVlKSAvIHRhcmdldFJhd1ZhbHVlKSAqIDEwMCA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIEZvcm1hdHRpbmdcblx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXHRcdGNvbnN0IHRhcmdldFNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQodGFyZ2V0UmF3VmFsdWUpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0TnVtYmVyYCwgdGFyZ2V0VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB0YXJnZXRTY2FsZSk7XG5cblx0XHRpZiAoZGV2aWF0aW9uUmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGV2aWF0aW9uVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAxLFxuXHRcdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdFx0KS5mb3JtYXQoZGV2aWF0aW9uUmF3VmFsdWUpO1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgZGV2aWF0aW9uVmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBcIk4vQVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgdGFnIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcGFyYW0gbG9hZEZ1bGwgSWYgbm90IHRydWUsIGxvYWRzIG9ubHkgZGF0YSBmb3IgdGhlIEtQSSB0YWdcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb01haW5Nb2RlbDogT0RhdGFNb2RlbCwgb0tQSU1vZGVsOiBKU09OTW9kZWwsIGxvYWRGdWxsPzogYm9vbGVhbik6IGFueSB7XG5cdFx0Ly8gSWYgbG9hZEZ1bGw9ZmFsc2UsIHRoZW4gd2UncmUganVzdCBsb2FkaW5nIGRhdGEgZm9yIHRoZSB0YWcgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Mb25nUnVubmVyc1wiIGdyb3VwSURcblx0XHQvLyBJZiBsb2FkRnVsbD10cnVlLCB3ZSdyZSBsb2FkaW5nIGRhdGEgZm9yIHRoZSB3aG9sZSBLUEkgKHRhZyArIGNhcmQpIGFuZCB3ZSB1c2UgdGhlIGRlZmF1bHQgKFwiJGF1dG9cIikgZ3JvdXBJRFxuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IGxvYWRGdWxsXG5cdFx0XHQ/IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWApXG5cdFx0XHQ6IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDEpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKSA9PiB7XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHRcdFx0PyBhQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmICFyYXdVbml0KSB7XG5cdFx0XHRcdFx0Ly8gQSB1bml0L2N1cnJlbmN5IGlzIGRlZmluZWQsIGJ1dCBpdHMgdmFsdWUgaXMgdW5kZWZpbmVkIC0tPiBtdWx0aS11bml0IHNpdHVhdGlvblxuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZGAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwgXCJcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjYXJkIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb01haW5Nb2RlbDogT0RhdGFNb2RlbCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiBhbnkge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NYWluTW9kZWwuYmluZExpc3QoYC8ke2twaURlZmluaXRpb24uZW50aXR5U2V0fWApO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKChkaW1lbnNpb24pID0+IHtcblx0XHRcdG9Hcm91cFtkaW1lbnNpb24ubmFtZV0gPSB7fTtcblx0XHR9KTtcblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdG9BZ2dyZWdhdGVbbWVhc3VyZS5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7XG5cdFx0XHRncm91cDogb0dyb3VwLFxuXHRcdFx0YWdncmVnYXRlOiBvQWdncmVnYXRlXG5cdFx0fSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoKHNvcnRJbmZvKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBTb3J0ZXIoc29ydEluZm8ubmFtZSwgc29ydEluZm8uZGVzY2VuZGluZyk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIGtwaURlZmluaXRpb24uY2hhcnQubWF4SXRlbXMpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKSA9PiB7XG5cdFx0XHRjb25zdCBjaGFydERhdGEgPSBhQ29udGV4dHMubWFwKGZ1bmN0aW9uIChvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRcdFx0b0RhdGFbbWVhc3VyZS5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG1lYXN1cmUubmFtZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBvRGF0YTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9jaGFydERhdGFgLCBjaGFydERhdGEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBvcG92ZXIgdG8gZGlzcGxheSB0aGUgS1BJIGNhcmRcblx0ICogVGhlIHBvcG92ZXIgYW5kIHRoZSBjb250YWluZWQgY2FyZCBmb3IgdGhlIEtQSXMgYXJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuXHQgKiBUaGUgcG9wb3ZlciBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgS1BJcywgc28gaXQncyBjcmVhdGVkIG9ubHkgb25jZS5cblx0ICpcblx0ICogQHBhcmFtIG9LUElUYWcgVGhlIHRhZyB0aGF0IHRyaWdnZXJlZCB0aGUgcG9wb3ZlciBvcGVuaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmVkIHBvcG92ZXIgYXMgYSBwcm9taXNlLlxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFBvcG92ZXIob0tQSVRhZzogR2VuZXJpY1RhZyk6IFByb21pc2U8UG9wb3Zlcj4ge1xuXHRcdGlmICghdGhpcy5vUG9wb3Zlcikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0Q29yZS5sb2FkTGlicmFyeShcInNhcC91aS9pbnRlZ3JhdGlvblwiLCB7IGFzeW5jOiB0cnVlIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoQ2FyZDogYW55LCBIb3N0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0hvc3QgPSBuZXcgSG9zdCgpO1xuXG5cdFx0XHRcdFx0XHRcdG9Ib3N0LmF0dGFjaEFjdGlvbigob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVHlwZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ0eXBlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicGFyYW1ldGVyc1wiKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1zLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbXMuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtcy5hY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlT3V0Ym91bmQob1BhcmFtcy5vdXRib3VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkID0gbmV3IENhcmQoe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9Qb3BvdmVyID0gbmV3IFBvcG92ZXIoXCJrcGktUG9wb3ZlclwiLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBcIkF1dG9cIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBbdGhpcy5vQ2FyZF1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0b0tQSVRhZy5hZGREZXBlbmRlbnQodGhpcy5vUG9wb3Zlcik7IC8vIFRoZSBmaXJzdCBjbGlja2VkIHRhZyBnZXRzIHRoZSBwb3BvdmVyIGFzIGRlcGVuZGVudFxuXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRwdWJsaWMgb25LUElQcmVzc2VkKG9LUElUYWc6IGFueSwga3BpSUQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBrcGlEZWZpbml0aW9uID0gdGhpcy5hS1BJRGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbiAob0RlZikge1xuXHRcdFx0XHRyZXR1cm4gb0RlZi5pZCA9PT0ga3BpSUQ7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24pIHtcblx0XHRcdFx0Y29uc3Qgb01vZGVsID0gb0tQSVRhZy5nZXRNb2RlbCgpO1xuXHRcdFx0XHRjb25zdCBhUHJvbWlzZXMgPSBbXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCwgdHJ1ZSksXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbiwgb01vZGVsLCBvS1BJTW9kZWwpLFxuXHRcdFx0XHRcdHRoaXMuZ2V0UG9wb3ZlcihvS1BJVGFnKVxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdFByb21pc2UuYWxsKGFQcm9taXNlcylcblx0XHRcdFx0XHQudGhlbigoYVJlc3VsdHMpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgb1BvcG92ZXIgPSBhUmVzdWx0c1syXTtcblx0XHRcdFx0XHRcdG9Qb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goKGVycikgPT4ge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7RUFxQkEsSUFBTUEsMEJBQXVELEdBQUc7SUFDL0QsR0FBRyxFQUFFQyxXQUFXLENBQUNDLEtBQUs7SUFDdEIsR0FBRyxFQUFFRCxXQUFXLENBQUNFLE9BQU87SUFDeEIsR0FBRyxFQUFFRixXQUFXLENBQUNHLE9BQU87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
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/formatters/TableFormatterTypes","sap/m/Popover","sap/ui/core/Core","sap/ui/core/format/DateFormat","sap/ui/core/format/NumberFormat","sap/ui/core/Locale","sap/ui/core/mvc/ControllerExtension","sap/ui/model/Filter","sap/ui/model/json/JSONModel","sap/ui/model/Sorter","../helpers/ClassSupport"],function(e,t,a,n,i,r,o,s,l,d,u,c){"use strict";var p,f,g,m,h,y;var P=c.publicExtension;var b=c.methodOverride;var v=c.defineUI5Class;var D=t.MessageType;function C(e,t){e.prototype=Object.create(t.prototype);e.prototype.constructor=e;I(e,t)}function I(e,t){I=Object.setPrototypeOf?Object.setPrototypeOf.bind():function e(t,a){t.__proto__=a;return t};return I(e,t)}function N(e,t,a,n,i){var r={};Object.keys(n).forEach(function(e){r[e]=n[e]});r.enumerable=!!r.enumerable;r.configurable=!!r.configurable;if("value"in r||r.initializer){r.writable=true}r=a.slice().reverse().reduce(function(a,n){return n(e,t,a)||a},r);if(i&&r.initializer!==void 0){r.value=r.initializer?r.initializer.call(i):void 0;r.initializer=undefined}if(r.initializer===void 0){Object.defineProperty(e,t,r);r=null}return r}const $={1:D.Error,2:D.Warning,3:D.Success,5:D.Information};const T={Error:"Error",Warning:"Critical",Success:"Good",Information:"None",None:"None"};function S(e,t){let a;if(t[0]!==undefined&&t[0]!==null&&e<t[0]){a=D.Error}else if(t[1]!==undefined&&t[1]!==null&&e<t[1]){a=D.Warning}else if(t[2]!==undefined&&t[2]!==null&&e<t[2]){a=D.None}else if(t[5]!==undefined&&t[5]!==null&&e>t[5]){a=D.Error}else if(t[4]!==undefined&&t[4]!==null&&e>t[4]){a=D.Warning}else if(t[3]!==undefined&&t[3]!==null&&e>t[3]){a=D.None}else{a=D.Success}return a}function j(e,t){let a;if(t[2]!==undefined&&t[2]!==null&&e>t[2]){a=D.Error}else if(t[1]!==undefined&&t[1]!==null&&e>t[1]){a=D.Warning}else if(t[0]!==undefined&&t[0]!==null&&e>t[0]){a=D.None}else{a=D.Success}return a}function w(e,t){let a;if(t[0]!==undefined&&t[0]!==null&&e<t[0]){a=D.Error}else if(t[1]!==undefined&&t[1]!==null&&e<t[1]){a=D.Warning}else if(t[2]!==undefined&&t[2]!==null&&e<t[2]){a=D.None}else{a=D.Success}return a}function x(e){let t;switch(e){case 1:case"1":case 2:case"2":t="Up";break;case 4:case"4":case 5:case"5":t="Down";break;default:t="None"}return t}function A(e,t,a,n){let i;if(!n||a&&!t){return"None"}const r=a?(e-t)/t:e-t;if(n[0]!==undefined&&n[0]!==null&&r<=n[0]){i="Down"}else if(n[1]!==undefined&&n[1]!==null&&r<=n[1]){i="Down"}else if(n[3]!==undefined&&n[3]!==null&&r>=n[3]){i="Up"}else if(n[2]!==undefined&&n[2]!==null&&r>=n[2]){i="Up"}else{i="None"}return i}function F(e){if(e.ranges.length===0){return undefined}else if(e.ranges.length===1){return new l(e.propertyPath,e.ranges[0].operator,e.ranges[0].rangeLow,e.ranges[0].rangeHigh)}else{const t=e.ranges.map(t=>new l(e.propertyPath,t.operator,t.rangeLow,t.rangeHigh));return new l({filters:t,and:false})}}function V(e){const t=new o(sap.ui.getCore().getConfiguration().getLanguage());const a=n.getLibraryResourceBundle("sap.fe.core");const r=i.getDateInstance({style:"medium"},t);function s(t){const n=e.propertyType.indexOf("Edm.Date")===0?r.format(new Date(t.rangeLow)):t.rangeLow;const i=e.propertyType.indexOf("Edm.Date")===0?r.format(new Date(t.rangeHigh)):t.rangeHigh;switch(t.operator){case"BT":return`[${n} - ${i}]`;case"Contains":return`*${n}*`;case"GE":return`≥${n}`;case"GT":return`>${n}`;case"LE":return`≤${n}`;case"LT":return`<${n}`;case"NB":return a.getText("C_KPICARD_FILTERSTRING_NOT",[`[${n} - ${i}]`]);case"NE":return`≠${n}`;case"NotContains":return a.getText("C_KPICARD_FILTERSTRING_NOT",[`*${n}*`]);case"EQ":default:return n}}if(e.ranges.length===0){return""}else if(e.ranges.length===1){return s(e.ranges[0])}else{return`(${e.ranges.map(s).join(",")})`}}function O(e){const t=n.getLibraryResourceBundle("sap.fe.core");function a(e){if(e.length===0){return""}else if(e.length===1){return e[0].label}else{let a=e[0].label;for(let t=1;t<e.length-1;t++){a+=`, ${e[t].label}`}return t.getText("C_KPICARD_ITEMSLIST",[a,e[e.length-1].label])}}return t.getText("C_KPICARD_CHARTTITLE",[a(e.chart.measures),a(e.chart.dimensions)])}function E(e,t){switch(e.chartType){case"Donut":t.categoryAxis={title:{visible:false}};t.valueAxis={title:{visible:false},label:{formatString:"ShortFloat"}};t.plotArea.dataLabel={visible:true,type:"value",formatString:"ShortFloat_MFD2"};break;case"bubble":t.valueAxis={title:{visible:true},label:{formatString:"ShortFloat"}};t.valueAxis2={title:{visible:true},label:{formatString:"ShortFloat"}};t.legendGroup={layout:{position:"bottom",alignment:"topLeft"}};t.sizeLegend={visible:true};t.plotArea.dataLabel={visible:false};break;case"scatter":t.valueAxis={title:{visible:false},label:{formatString:"ShortFloat"}};t.valueAxis2={title:{visible:false},label:{formatString:"ShortFloat"}};t.plotArea.dataLabel={visible:false};break;default:t.categoryAxis={title:{visible:false}};t.valueAxis={title:{visible:false},label:{formatString:"ShortFloat"}};t.plotArea.dataLabel={visible:false}}}function L(e,t){if(t&&t.length){return e.filter(e=>t.indexOf(e.role)>=0).map(e=>e.label)}else{return e.map(e=>e.label)}}function M(e){const t=L(e.measures,["Axis1"]);const a=L(e.measures,["Axis2"]);const n=L(e.measures,["Axis3"]);const i=L(e.measures,[undefined]);const r=L(e.dimensions,["Series"]);const o=e.dimensions.find(e=>e.role==="Category");const s=t.shift()||a.shift()||n.shift()||i.shift()||"";const l=a.shift()||t.shift()||n.shift()||i.shift()||"";const d=[{uid:"valueAxis",type:"Measure",values:[s]},{uid:"valueAxis2",type:"Measure",values:[l]}];if(e.chartType==="bubble"){const e=n.shift()||t.shift()||a.shift()||i.shift()||"";d.push({uid:"bubbleWidth",type:"Measure",values:[e]})}if(r.length){d.push({uid:"color",type:"Dimension",values:r})}if(o){d.push({uid:"shape",type:"Dimension",values:[o.label]})}return d}function R(e){let t;switch(e.chartType){case"Donut":t=[{uid:"size",type:"Measure",values:L(e.measures)},{uid:"color",type:"Dimension",values:L(e.dimensions)}];break;case"bubble":case"scatter":t=M(e);break;case"vertical_bullet":t=[{uid:"actualValues",type:"Measure",values:L(e.measures,[undefined,"Axis1"])},{uid:"targetValues",type:"Measure",values:L(e.measures,["Axis2"])},{uid:"categoryAxis",type:"Dimension",values:L(e.dimensions,[undefined,"Category"])},{uid:"color",type:"Dimension",values:L(e.dimensions,["Series"])}];break;default:t=[{uid:"valueAxis",type:"Measure",values:L(e.measures)},{uid:"categoryAxis",type:"Dimension",values:L(e.dimensions,[undefined,"Category"])},{uid:"color",type:"Dimension",values:L(e.dimensions,["Series"])}]}return t}function _(e,t){if(e.semanticObject){if(e.action){return t.getLinks({semanticObject:e.semanticObject,action:e.action}).then(t=>t.length?{semanticObject:e.semanticObject,action:e.action}:undefined)}else{return t.getPrimaryIntent(e.semanticObject).then(a=>{if(!a){return undefined}const n=t.parseShellHash(a.intent);return e.unavailableActions&&e.unavailableActions.indexOf(n.action)>=0?undefined:{semanticObject:n.semanticObject,action:n.action}})}}else{return e.outboundNavigation?Promise.resolve({outbound:e.outboundNavigation}):Promise.resolve(undefined)}}let K=(p=v("sap.fe.core.controllerextensions.KPIManagement"),f=b(),g=b(),m=P(),p(h=(y=function(t){C(i,t);function i(){return t.apply(this,arguments)||this}var s=i.prototype;s.initCardManifest=function e(t,a){var i;const r={"sap.app":{id:"sap.fe",type:"card"},"sap.ui":{technology:"UI5"},"sap.card":{type:"Analytical",data:{json:{}},header:{type:"Numeric",title:t.datapoint.title,subTitle:t.datapoint.description,unitOfMeasurement:"{mainUnit}",mainIndicator:{number:"{mainValueNoScale}",unit:"{mainValueScale}",state:"{mainState}",trend:"{trend}"}},content:{minHeight:"25rem",chartProperties:{plotArea:{},title:{visible:true,alignment:"left"}},data:{path:"/chartData"}}}};if(t.datapoint.targetPath||t.datapoint.targetValue!==undefined){const e=n.getLibraryResourceBundle("sap.fe.core");r["sap.card"].header.sideIndicators=[{title:e.getText("C_KPICARD_INDICATOR_TARGET"),number:"{targetNumber}",unit:"{targetUnit}"},{title:e.getText("C_KPICARD_INDICATOR_DEVIATION"),number:"{deviationNumber}",unit:"%"}]}if((i=t.selectionVariantFilterDefinitions)!==null&&i!==void 0&&i.length){const e=[];t.selectionVariantFilterDefinitions.forEach(t=>{const a=V(t);if(a){e.push(a)}});if(e.length){r["sap.card"].header.details=e.join(", ")}}r["sap.card"].content.chartType=t.chart.chartType;E(t.chart,r["sap.card"].content.chartProperties);r["sap.card"].content.chartProperties.title.text=O(t);r["sap.card"].content.dimensions=t.chart.dimensions.map(e=>({label:e.label,value:`{${e.name}}`}));r["sap.card"].content.measures=t.chart.measures.map(e=>({label:e.label,value:`{${e.name}}`}));r["sap.card"].content.feeds=R(t.chart);a.setProperty(`/${t.id}`,{manifest:r})};s.initNavigationInfo=function e(t,a,n){if(t.navigation){return _(t.navigation,n).then(e=>{if(e){a.setProperty(`/${t.id}/manifest/sap.card/header/actions`,[{type:"Navigation",parameters:e}])}})}else{return Promise.resolve()}};s.onInit=function t(){var a;this.aKPIDefinitions=(a=this.getView().getController()._getPageModel())===null||a===void 0?void 0:a.getProperty("/kpiDefinitions");if(this.aKPIDefinitions&&this.aKPIDefinitions.length){const t=this.getView();const a=t.getController().getAppComponent();const n=new d;t.setModel(n,"kpiModel");this.aKPIDefinitions.forEach(t=>{this.initCardManifest(t,n);this.initNavigationInfo(t,n,a.getShellServices()).catch(function(t){e.error(t)});this.loadKPITagData(t,a.getModel(),n).catch(function(t){e.error(t)})})}};s.onExit=function e(){const t=this.getView().getModel("kpiModel");if(t){t.destroy()}};s.updateDatapointValueAndCurrency=function e(t,a,n){var i,s,l;const d=new o(sap.ui.getCore().getConfiguration().getLanguage());const u=(i=t.datapoint.unit)!==null&&i!==void 0&&i.isPath?a.getProperty(t.datapoint.unit.value):(s=t.datapoint.unit)===null||s===void 0?void 0:s.value;const c=((l=t.datapoint.unit)===null||l===void 0?void 0:l.isCurrency)===false&&u==="%";const p=Number.parseFloat(a.getProperty(t.datapoint.propertyPath));const f=r.getFloatInstance({style:c?undefined:"short",minFractionDigits:0,maxFractionDigits:1,showScale:!c},d).format(p);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValue`,f);const g=r.getFloatInstance({maxFractionDigits:2,showScale:false,groupingEnabled:true},d).format(p);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueUnscaled`,g);const m=r.getFloatInstance({style:c?undefined:"short",minFractionDigits:0,maxFractionDigits:1,showScale:false},d).format(p);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueNoScale`,m);const h=r.getFloatInstance({style:c?undefined:"short",decimals:0,maxIntegerDigits:0,showScale:true},d).format(p);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueScale`,h);if(t.datapoint.unit&&u){if(t.datapoint.unit.isCurrency){n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainUnit`,u)}else{const e=r.getUnitInstance({showNumber:false},d).format(p,u);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainUnit`,e)}}};s.updateDatapointCriticality=function e(t,a,n){const i=Number.parseFloat(a.getProperty(t.datapoint.propertyPath));let r=D.None;if(t.datapoint.criticalityValue){r=t.datapoint.criticalityValue}else if(t.datapoint.criticalityPath){r=$[a.getProperty(t.datapoint.criticalityPath)]||D.None}else if(t.datapoint.criticalityCalculationThresholds&&t.datapoint.criticalityCalculationMode){switch(t.datapoint.criticalityCalculationMode){case"UI.ImprovementDirectionType/Target":r=S(i,t.datapoint.criticalityCalculationThresholds);break;case"UI.ImprovementDirectionType/Minimize":r=j(i,t.datapoint.criticalityCalculationThresholds);break;case"UI.ImprovementDirectionType/Maximize":default:r=w(i,t.datapoint.criticalityCalculationThresholds);break}}n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainCriticality`,r);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainState`,T[r]||"None")};s.updateDatapointTrend=function e(t,a,n){const i=Number.parseFloat(a.getProperty(t.datapoint.propertyPath));let r="None";if(t.datapoint.trendValue){r=t.datapoint.trendValue}else if(t.datapoint.trendPath){r=x(a.getProperty(t.datapoint.trendPath))}else if(t.datapoint.trendCalculationReferenceValue!==undefined||t.datapoint.trendCalculationReferencePath){let e;if(t.datapoint.trendCalculationReferenceValue!==undefined){e=t.datapoint.trendCalculationReferenceValue}else{e=Number.parseFloat(a.getProperty(t.datapoint.trendCalculationReferencePath||""))}r=A(i,e,!!t.datapoint.trendCalculationIsRelative,t.datapoint.trendCalculationTresholds)}n.setProperty(`/${t.id}/manifest/sap.card/data/json/trend`,r)};s.updateTargetValue=function e(t,a,n){if(t.datapoint.targetValue===undefined&&t.datapoint.targetPath===undefined){return}const i=Number.parseFloat(a.getProperty(t.datapoint.propertyPath));const s=new o(sap.ui.getCore().getConfiguration().getLanguage());let l;if(t.datapoint.targetValue!==undefined){l=t.datapoint.targetValue}else{l=Number.parseFloat(a.getProperty(t.datapoint.targetPath||""))}const d=l!==0?(i-l)/l*100:undefined;const u=r.getFloatInstance({style:"short",minFractionDigits:0,maxFractionDigits:1,showScale:false},s).format(l);const c=r.getFloatInstance({style:"short",decimals:0,maxIntegerDigits:0,showScale:true},s).format(l);n.setProperty(`/${t.id}/manifest/sap.card/data/json/targetNumber`,u);n.setProperty(`/${t.id}/manifest/sap.card/data/json/targetUnit`,c);if(d!==undefined){const e=r.getFloatInstance({minFractionDigits:0,maxFractionDigits:1,showScale:false},s).format(d);n.setProperty(`/${t.id}/manifest/sap.card/data/json/deviationNumber`,e)}else{n.setProperty(`/${t.id}/manifest/sap.card/data/json/deviationNumber`,"N/A")}};s.loadKPITagData=function e(t,a,n,i){var r,o;const s=i?a.bindList(`/${t.entitySet}`,undefined,undefined,undefined,{$$groupId:"$auto.Workers"}):a.bindList(`/${t.entitySet}`,undefined,undefined,undefined,{$$groupId:"$auto.LongRunners"});const l={};if((r=t.datapoint.unit)!==null&&r!==void 0&&r.isPath){l[t.datapoint.propertyPath]={unit:t.datapoint.unit.value}}else{l[t.datapoint.propertyPath]={}}if(t.datapoint.criticalityPath){l[t.datapoint.criticalityPath]={}}if(i){if(t.datapoint.trendPath){l[t.datapoint.trendPath]={}}if(t.datapoint.trendCalculationReferencePath){l[t.datapoint.trendCalculationReferencePath]={}}if(t.datapoint.targetPath){l[t.datapoint.targetPath]={}}}s.setAggregation({aggregate:l});if((o=t.selectionVariantFilterDefinitions)!==null&&o!==void 0&&o.length){const e=t.selectionVariantFilterDefinitions.map(F).filter(e=>e!==undefined);s.filter(e)}return s.requestContexts(0,1).then(e=>{if(e.length){var a,r;const o=(a=t.datapoint.unit)!==null&&a!==void 0&&a.isPath?e[0].getProperty(t.datapoint.unit.value):(r=t.datapoint.unit)===null||r===void 0?void 0:r.value;if(t.datapoint.unit&&!o){n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValue`,"*");n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueUnscaled`,"*");n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueNoScale`,"*");n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainValueScale`,"");n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainUnit`,undefined);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainCriticality`,D.None);n.setProperty(`/${t.id}/manifest/sap.card/data/json/mainState`,"None");n.setProperty(`/${t.id}/manifest/sap.card/data/json/trend`,"None");n.setProperty(`/${t.id}/manifest/sap.card/data/json/targetNumber`,undefined);n.setProperty(`/${t.id}/manifest/sap.card/data/json/targetUnit`,undefined);n.setProperty(`/${t.id}/manifest/sap.card/data/json/deviationNumber`,undefined)}else{this.updateDatapointValueAndCurrency(t,e[0],n);this.updateDatapointCriticality(t,e[0],n);if(i){this.updateDatapointTrend(t,e[0],n);this.updateTargetValue(t,e[0],n)}}}})};s.loadKPICardData=function e(t,a,n){var i;const r=a.bindList(`/${t.entitySet}`,undefined,undefined,undefined,{$$groupId:"$auto.Workers"});const o={};const s={};t.chart.dimensions.forEach(e=>{o[e.name]={}});t.chart.measures.forEach(e=>{s[e.name]={}});r.setAggregation({group:o,aggregate:s});if((i=t.selectionVariantFilterDefinitions)!==null&&i!==void 0&&i.length){const e=t.selectionVariantFilterDefinitions.map(F).filter(e=>e!==undefined);r.filter(e)}if(t.chart.sortOrder){r.sort(t.chart.sortOrder.map(e=>new u(e.name,e.descending)))}return r.requestContexts(0,t.chart.maxItems).then(e=>{const a=e.map(function(e){const a={};t.chart.dimensions.forEach(t=>{a[t.name]=e.getProperty(t.name)});t.chart.measures.forEach(t=>{a[t.name]=e.getProperty(t.name)});return a});n.setProperty(`/${t.id}/manifest/sap.card/data/json/chartData`,a)})};s.getPopover=function e(t){if(!this.oPopover){return new Promise((e,i)=>{n.loadLibrary("sap/ui/integration",{async:true}).then(()=>{sap.ui.require(["sap/ui/integration/widgets/Card","sap/ui/integration/Host"],(n,i)=>{const r=new i;r.attachAction(e=>{const t=e.getParameter("type");const a=e.getParameter("parameters");if(t==="Navigation"){if(a.semanticObject){this.getView().getController()._intentBasedNavigation.navigate(a.semanticObject,a.action)}else{this.getView().getController()._intentBasedNavigation.navigateOutbound(a.outbound)}}});this.oCard=new n({width:"25rem",height:"auto"});this.oCard.setHost(r);this.oPopover=new a("kpi-Popover",{showHeader:false,placement:"Auto",content:[this.oCard]});t.addDependent(this.oPopover);e(this.oPopover)})}).catch(function(){i()})})}else{return Promise.resolve(this.oPopover)}};s.onKPIPressed=function t(a,n){const i=a.getModel("kpiModel");if(this.aKPIDefinitions&&this.aKPIDefinitions.length){const t=this.aKPIDefinitions.find(function(e){return e.id===n});if(t){const r=a.getModel();const o=[this.loadKPITagData(t,r,i,true),this.loadKPICardData(t,r,i),this.getPopover(a)];Promise.all(o).then(e=>{this.oCard.setManifest(i.getProperty(`/${n}/manifest`));this.oCard.refresh();const t=e[2];t.openBy(a,false)}).catch(t=>{e.error(t)})}}};return i}(s),N(y.prototype,"onInit",[f],Object.getOwnPropertyDescriptor(y.prototype,"onInit"),y.prototype),N(y.prototype,"onExit",[g],Object.getOwnPropertyDescriptor(y.prototype,"onExit"),y.prototype),N(y.prototype,"onKPIPressed",[m],Object.getOwnPropertyDescriptor(y.prototype,"onKPIPressed"),y.prototype),y))||h);return K},false);
|
|
6
|
+
//# sourceMappingURL=KPIManagement.js.map
|