@sapui5/sap.fe.core 1.124.2 → 1.126.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +5 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +4 -4
- package/src/sap/fe/core/AppComponent.js +2 -2
- package/src/sap/fe/core/AppComponent.ts +1 -1
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/AppStateHandler.ts +1 -1
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/BaseController.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +12 -15
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/ExtensionAPI.ts +4 -3
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/PageController.ts +1 -1
- package/src/sap/fe/core/ResourceModel.js +2 -2
- package/src/sap/fe/core/ResourceModel.ts +1 -1
- package/src/sap/fe/core/ReuseComponent.js +172 -0
- package/src/sap/fe/core/ReuseComponent.ts +165 -0
- package/src/sap/fe/core/TemplateComponent.js +2 -2
- package/src/sap/fe/core/TemplateComponent.ts +5 -1
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
- package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
- package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/Share.js +4 -4
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
- package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
- package/src/sap/fe/core/converters/ConverterContext.js +4 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
- package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
- package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
- package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
- package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
- package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
- package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/fpm/Component.js +3 -3
- package/src/sap/fe/core/fpm/Component.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
- package/src/sap/fe/core/helpers/MetaPath.js +9 -3
- package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
- package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
- package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
- package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
- package/src/sap/fe/core/library.js +4 -4
- package/src/sap/fe/core/library.ts +2 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
- package/src/sap/fe/core/messagebundle.properties +8 -57
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +4 -2
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +6 -57
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +3 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +3 -1
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +64 -62
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +3 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper.js +3 -3
- package/src/sap/fe/core/operationsHelper.ts +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +2 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +7 -7
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +1 -1
- package/src/sap/fe/core/type/InputMask.js +124 -0
- package/src/sap/fe/core/type/InputMask.ts +131 -0
- package/ui5.yaml +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
- package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
- package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
- package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
- package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
- package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
- package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
- package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
- package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
- package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
- package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2024 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/Key", "sap/fe/core/templating/DataModelPathHelper", "sap/ui/core/Lib", "../../ManifestSettings", "../../helpers/Aggregation", "../../helpers/ID", "../../helpers/InsightsHelpers"], function (Log, BindingToolkit, DataField, Action, ConfigurableObject, Key, DataModelPathHelper, Library, ManifestSettings, Aggregation, ID, InsightsHelpers) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -16,16 +16,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
16
16
|
var TemplateType = ManifestSettings.TemplateType;
|
|
17
17
|
var ActionType = ManifestSettings.ActionType;
|
|
18
18
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
19
|
-
var not = BindingToolkit.not;
|
|
20
|
-
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
21
|
-
var equal = BindingToolkit.equal;
|
|
22
|
-
var compileExpression = BindingToolkit.compileExpression;
|
|
23
|
-
var and = BindingToolkit.and;
|
|
24
19
|
var KeyHelper = Key.KeyHelper;
|
|
25
20
|
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
26
21
|
var OverrideType = ConfigurableObject.OverrideType;
|
|
27
22
|
var getActionsFromManifest = Action.getActionsFromManifest;
|
|
28
23
|
var isDataFieldForActionAbstract = DataField.isDataFieldForActionAbstract;
|
|
24
|
+
var not = BindingToolkit.not;
|
|
25
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
26
|
+
var equal = BindingToolkit.equal;
|
|
27
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
28
|
+
var and = BindingToolkit.and;
|
|
29
29
|
/**
|
|
30
30
|
* Method to retrieve all chart actions from annotations.
|
|
31
31
|
*
|
|
@@ -293,6 +293,38 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
293
293
|
return variantManagement === "Control" && !p13nMode ? VariantManagementType.None : variantManagement;
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
+
/**
|
|
297
|
+
* Create the ChartVisualization configuration that will be used to during templating.
|
|
298
|
+
*
|
|
299
|
+
* @param converterContext The converter context
|
|
300
|
+
* @param visualizationPath The path of the visualization annotation
|
|
301
|
+
* @param visualization The visualization annotation
|
|
302
|
+
* @returns The chart visualization based on the annotation used for templating
|
|
303
|
+
*/
|
|
304
|
+
function createChartVisualizationForTemplating(converterContext, visualizationPath, visualization) {
|
|
305
|
+
var _dataModelPath$target;
|
|
306
|
+
const qualifier = visualization.fullyQualifiedName.split("#").length > 1 ? visualization.fullyQualifiedName.split("#")[1] : "";
|
|
307
|
+
const [navigationPropertyPath] = visualizationPath.split("@");
|
|
308
|
+
const dataModelPath = converterContext.getDataModelObjectPath();
|
|
309
|
+
const isEntitySet = navigationPropertyPath.length === 0;
|
|
310
|
+
const entityName = ((_dataModelPath$target = dataModelPath.targetEntitySet) === null || _dataModelPath$target === void 0 ? void 0 : _dataModelPath$target.name) ?? dataModelPath.startingEntitySet.name;
|
|
311
|
+
const aggregationHelper = new AggregationHelper(converterContext.getEntityType(), converterContext, true);
|
|
312
|
+
const allowedTransformations = aggregationHelper.getAllowedTransformations();
|
|
313
|
+
const isParameterizedEntitySet = !!converterContext.getParameterEntityType();
|
|
314
|
+
return {
|
|
315
|
+
annotationPath: converterContext.getAbsoluteAnnotationPath(visualizationPath),
|
|
316
|
+
isParameterizedEntitySet,
|
|
317
|
+
collection: getTargetObjectPath(converterContext.getDataModelObjectPath()),
|
|
318
|
+
type: VisualizationType.Chart,
|
|
319
|
+
entityName,
|
|
320
|
+
id: qualifier ? getChartID(isEntitySet ? entityName : navigationPropertyPath, qualifier, VisualizationType.Chart) : getChartID(isEntitySet ? entityName : navigationPropertyPath, VisualizationType.Chart),
|
|
321
|
+
applySupported: {
|
|
322
|
+
$Type: "Org.OData.Aggregation.V1.ApplySupportedType",
|
|
323
|
+
enableSearch: (allowedTransformations === null || allowedTransformations === void 0 ? void 0 : allowedTransformations.includes("search")) ?? true
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
296
328
|
/**
|
|
297
329
|
* Method to get compile expression for DataFieldForAction and DataFieldForIntentBasedNavigation.
|
|
298
330
|
*
|
|
@@ -300,6 +332,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
300
332
|
* @param converterContext
|
|
301
333
|
* @returns Compile expression for DataFieldForAction and DataFieldForIntentBasedNavigation
|
|
302
334
|
*/
|
|
335
|
+
_exports.createChartVisualizationForTemplating = createChartVisualizationForTemplating;
|
|
303
336
|
function getCompileExpressionForAction(dataField, converterContext) {
|
|
304
337
|
var _dataField$annotation, _dataField$annotation2;
|
|
305
338
|
return compileExpression(not(equal(getExpressionFromAnnotation((_dataField$annotation = dataField.annotations) === null || _dataField$annotation === void 0 ? void 0 : (_dataField$annotation2 = _dataField$annotation.UI) === null || _dataField$annotation2 === void 0 ? void 0 : _dataField$annotation2.Hidden, [], undefined, converterContext.getRelativeModelPathFunction()), true)));
|
|
@@ -345,4 +378,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/converters/annotations/DataField", "
|
|
|
345
378
|
_exports.createBlankChartVisualization = createBlankChartVisualization;
|
|
346
379
|
return _exports;
|
|
347
380
|
}, false);
|
|
348
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImlzTmF2aWdhYmxlIiwiZ2V0Q2hhcnRBY3Rpb25zIiwiYUFubm90YXRpb25BY3Rpb25zIiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJhY3Rpb25zIiwiYWN0aW9uT3ZlcndyaXRlQ29uZmlnIiwiZW5hYmxlZCIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiY29tbWFuZCIsInBvc2l0aW9uIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFAxM25Nb2RlIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiY2hhcnRNYW5pZmVzdFNldHRpbmdzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJjaGFydFNldHRpbmdzIiwiaXNDb250cm9sVmFyaWFudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpdGVtIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0IiwiYWdnUHJvcCIsIm9iaiIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsInZhbHVlIiwibmFtZSIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsIkVycm9yIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJwMTNuTW9kZSIsIkxvZyIsIndhcm5pbmciLCJtQ3VzdG9tQWdncmVnYXRlcyIsImVudGl0eVR5cGUiLCJjdXN0b21BZ2dyZWdhdGUiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwicXVhbGlmaWVyIiwicmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsImxhYmVsIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsInNvcnRhYmxlIiwic29ydE9yZGVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydHkiLCJtYXAiLCJvQ3R4RGVmUHJvcGVydHkiLCJtVHJhbnNBZ2dyZWdhdGlvbnMiLCJvUmVzb3VyY2VCdW5kbGVDb3JlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZWxlbWVudCIsIk5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiQWdncmVnYXRpb25NZXRob2QiLCJnZXRUZXh0IiwiY3VzdG9tIiwiYUFnZ1Byb3BzIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcnBQcm9wcyIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJtQXBwbHlTdXBwb3J0ZWQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsInByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsInN1YnN0cmluZyIsInRpdGxlIiwiVGl0bGUiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiZW50aXR5TmFtZSIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic0ZpbHRlcmJhcklkIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXRDb250ZXh0UGF0aCIsIm9WaXpQcm9wZXJ0aWVzIiwicGxvdEFyZWEiLCJ3aW5kb3ciLCJzdGFydCIsImVuZCIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwiYXV0b0JpbmRPbkluaXQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiTGlzdFJlcG9ydCIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZVNlYXJjaCIsImluY2x1ZGVzIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJhbmQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJWaXN1YWxpemF0aW9uVHlwZSIsIkNoYXJ0IiwiaWQiLCJnZXRDaGFydElEIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsIk5vbmUiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsImVxdWFsIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiVUkiLCJIaWRkZW4iLCJnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uIiwiY3JlYXRlQmxhbmtDaGFydFZpc3VhbGl6YXRpb24iLCJ2aXN1YWxpemF0aW9uIiwibXVsdGlWaWV3cyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUsIEFnZ3JlZ2F0aW9uTWV0aG9kIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5ub3RhdGlvbkFjdGlvbixcblx0QmFzZUFjdGlvbixcblx0Q29tYmluZWRBY3Rpb24sXG5cdEN1c3RvbUFjdGlvbixcblx0T3ZlcnJpZGVUeXBlQWN0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB7IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBPdmVycmlkZVR5cGUsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGVxdWFsLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdG5vdCxcblx0dHlwZSBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi8uLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uLCBNYW5pZmVzdEFjdGlvbiB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlLCBUZW1wbGF0ZVR5cGUsIFZhcmlhbnRNYW5hZ2VtZW50VHlwZSwgVmlzdWFsaXphdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCIuLi8uLi9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IGdldENoYXJ0SUQsIGdldEZpbHRlckJhcklEIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IGdldEluc2lnaHRzRW5hYmxlbWVudCwgZ2V0SW5zaWdodHNWaXNpYmlsaXR5IH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvSW5zaWdodHNIZWxwZXJzXCI7XG5cbnR5cGUgQ2hhcnRBcHBseVN1cHBvcnRlZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0ZW5hYmxlU2VhcmNoOiBib29sZWFuO1xuXHRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiB1bmtub3duW107XG5cdEdyb3VwYWJsZVByb3BlcnRpZXM6IHVua25vd25bXTtcbn07XG4vKipcbiAqIEB0eXBlZGVmIENoYXJ0VmlzdWFsaXphdGlvblxuICovXG5leHBvcnQgdHlwZSBDaGFydFZpc3VhbGl6YXRpb24gPSB7XG5cdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0O1xuXHRpZDogc3RyaW5nO1xuXHRjb2xsZWN0aW9uOiBzdHJpbmc7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0cGVyc29uYWxpemF0aW9uPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRmaWx0ZXJJZD86IHN0cmluZztcblx0dml6UHJvcGVydGllczogc3RyaW5nO1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xuXHR0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBzdHJpbmc7XG5cdHZpc2libGU6IHN0cmluZztcblx0Y3VzdG9tQWdnOiBvYmplY3Q7XG5cdHRyYW5zQWdnOiBvYmplY3Q7XG5cdGFwcGx5U3VwcG9ydGVkOiBDaGFydEFwcGx5U3VwcG9ydGVkO1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7XG5cdGlzSW5zaWdodHNFbmFibGVkPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2lnaHRzVmlzaWJsZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0PzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBjaGFydCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGNoYXJ0IGFjdGlvbnMgZnJvbSB0aGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkFjdGlvbltdIHtcblx0Y29uc3QgY2hhcnRBY3Rpb25zOiBBbm5vdGF0aW9uQWN0aW9uW10gPSBbXTtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uQWN0aW9ucykge1xuXHRcdGNoYXJ0QW5ub3RhdGlvbi5BY3Rpb25zLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJiAhZGF0YUZpZWxkLklubGluZSAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRcdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0ICYmICFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0LmlzQm91bmQpIHtcblx0XHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBjaGFydEFjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydEFjdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVPblNlbGVjdDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgY2hhcnRBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHM8QmFzZUFjdGlvbj4oYUFubm90YXRpb25BY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5wZXJzb25hbGl6YXRpb247XG5cdGNvbnN0IGlzQ29udHJvbFZhcmlhbnQgPSB2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB0cnVlIDogZmFsc2U7XG5cdC8vIGlmIHBlcnNvbmFsaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgZG8gbm90IHNob3cgYW55IG9wdGlvblxuXHRpZiAoKHBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmICFwZXJzb25hbGl6YXRpb24pIHx8IHBlcnNvbmFsaXphdGlvbiA9PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi50eXBlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJUeXBlXCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLml0ZW0pIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkl0ZW1cIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH0gZWxzZSBpZiAoaXNDb250cm9sVmFyaWFudCB8fCAhIXBlcnNvbmFsaXphdGlvbikge1xuXHRcdC8vIG1hbmlmZXN0IGhhcyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCwgY2hlY2sgaWYgaXQncyB0cnVlXG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgY2hlY2sgZm9yIHZhcmlhbnQgbWFuYWdlbWVudCBpcyBzZXQgdG8gY29udHJvbFxuXHRcdHJldHVybiBcIlNvcnQsVHlwZSxJdGVtLEZpbHRlclwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG1hbmlmZXN0IGRvZXNuJ3QgaGF2ZSBwZXJzb25hbGl6YXRpb24sIHNob3cgZGVmYXVsdCBvcHRpb25zIHdpdGhvdXQgZmlsdGVyXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW1cIjtcblx0fVxufVxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21BZ2dyZWdhdGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHNvcnRPcmRlcjogXCJib3RoXCI7XG5cdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRyYW5zQWdnID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZDogQWdncmVnYXRpb25NZXRob2Q7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRzb3J0T3JkZXI6IFwiYm90aFwiO1xuXHRjdXN0b206IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllc09iamVjdChhZ2dQcm9wOiBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUgfCBQcm9wZXJ0eSk6IHsgUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0gfSB7XG5cdGxldCBvYmo7XG5cdGlmICgoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eSkge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0b2JqID0ge1xuXHRcdFx0UHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogKGFnZ1Byb3AgYXMgUHJvcGVydHkpPy5uYW1lXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBDcmVhdGUgdGhlIENoYXJ0VmlzdWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgYSBjaGFydCB1c2luZyB0aGUgQ2hhcnQgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChwMTNuTW9kZSA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdExvZy53YXJuaW5nKFwiVmFyaWFudCBNYW5hZ2VtZW50IGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHR9XG5cdGNvbnN0IG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGlmIChhQ3VzdG9tQWdncmVnYXRlcykge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Zm9yIChjb25zdCBjdXN0b21BZ2dyZWdhdGUgb2YgYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gY3VzdG9tQWdncmVnYXRlPy5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRjb25zdCBxdWFsaWZpZXIgPSBjdXN0b21BZ2dyZWdhdGU/LnF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSA9IHF1YWxpZmllciAmJiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IHF1YWxpZmllcik7XG5cdFx0XHRjb25zdCBsYWJlbCA9IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSAmJiByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbcXVhbGlmaWVyXSA9IHtcblx0XHRcdFx0bmFtZTogcXVhbGlmaWVyLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwgfHwgYEN1c3RvbSBBZ2dyZWdhdGUgKCR7cXVhbGlmaWVyfSlgLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0c29ydE9yZGVyOiBcImJvdGhcIixcblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydHk6IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAoKG9DdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0N0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHRcdCAgfSlcblx0XHRcdFx0XHQ6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1UcmFuc0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgVHJhbnNBZ2c+ID0ge307XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZUNvcmUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRpZiAoYVRyYW5zQWdncmVnYXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdFx0bVRyYW5zQWdncmVnYXRpb25zW2VsZW1lbnQuTmFtZSBhcyBzdHJpbmddID0ge1xuXHRcdFx0XHRuYW1lOiBlbGVtZW50Lk5hbWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGVsZW1lbnQuQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBlbGVtZW50LkFnZ3JlZ2F0aW9uTWV0aG9kLFxuXHRcdFx0XHRsYWJlbDogZWxlbWVudD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWxcblx0XHRcdFx0XHQ/IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdFx0OiBgJHtvUmVzb3VyY2VCdW5kbGVDb3JlLmdldFRleHQoXCJBR0dSRUdBVEFCTEVfUFJPUEVSVFlcIil9ICgke2VsZW1lbnQuTmFtZX0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGN1c3RvbTogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYUFnZ1Byb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBhR3JwUHJvcHMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IG1BcHBseVN1cHBvcnRlZCA9IHt9IGFzIENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdG1BcHBseVN1cHBvcnRlZC4kVHlwZSA9IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblR5cGVzLkFwcGx5U3VwcG9ydGVkVHlwZTtcblx0bUFwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBbXTtcblx0bUFwcGx5U3VwcG9ydGVkLkdyb3VwYWJsZVByb3BlcnRpZXMgPSBbXTtcblxuXHRpZiAoYUFnZ1Byb3BzKSB7XG5cdFx0bUFwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBhQWdnUHJvcHMubWFwKChwcm9wKSA9PiBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0KHByb3ApKTtcblx0fVxuXG5cdGlmIChhR3JwUHJvcHMpIHtcblx0XHRtQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcyA9IGFHcnBQcm9wcy5tYXAoKHByb3ApID0+ICh7IFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWUgfSkpO1xuXHR9XG5cblx0Y29uc3QgY2hhcnRBY3Rpb25zID0gZ2V0Q2hhcnRBY3Rpb25zKGNoYXJ0QW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGggLyosIGFubm90YXRpb25QYXRoKi9dID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRjb25zdCB0aXRsZSA9IGNoYXJ0QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSB8fCBcIlwiOyAvLyByZWFkIHRpdGxlIGZyb20gY2hhcnQgYW5ub3RhdGlvblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3Qgc0ZpbHRlcmJhcklkID0gaXNFbnRpdHlTZXQgPyBnZXRGaWx0ZXJCYXJJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVml6UHJvcGVydGllcyA9IHtcblx0XHRwbG90QXJlYToge1xuXHRcdFx0d2luZG93OiB7XG5cdFx0XHRcdHN0YXJ0OiBcImZpcnN0RGF0YVBvaW50XCIsXG5cdFx0XHRcdGVuZDogXCJsYXN0RGF0YVBvaW50XCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGxlZ2VuZEdyb3VwOiB7XG5cdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGxldCBhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0YXV0b0JpbmRPbkluaXQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0Y29uc3Qgb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiLmhhbmRsZXJzLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZFwiIDogXCJcIjtcblx0Y29uc3QgdmlzaWJsZSA9IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRtQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRsZXQgcXVhbGlmaWVyID0gXCJcIjtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpLmxlbmd0aCA+IDEpIHtcblx0XHRxdWFsaWZpZXIgPSBjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXTtcblx0fVxuXHRjb25zdCBpc0luc2lnaHRzVmlzaWJsZSA9IGdldEluc2lnaHRzVmlzaWJpbGl0eShcIkFuYWx5dGljYWxcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgaXNJbnNpZ2h0c0VuYWJsZWQgPSBhbmQoZ2V0SW5zaWdodHNFbmFibGVtZW50KCksIGlzSW5zaWdodHNWaXNpYmxlKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHRwZXJzb25hbGl6YXRpb246IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHRmaWx0ZXJJZDogc0ZpbHRlcmJhcklkLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KG9WaXpQcm9wZXJ0aWVzKSxcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMuYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogY2hhcnRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRhdXRvQmluZE9uSW5pdDogYXV0b0JpbmRPbkluaXQsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQsXG5cdFx0dmlzaWJsZTogdmlzaWJsZSxcblx0XHRjdXN0b21BZ2c6IG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdHRyYW5zQWdnOiBtVHJhbnNBZ2dyZWdhdGlvbnMsXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IG1BcHBseVN1cHBvcnRlZCxcblx0XHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlLCB2YXJpYW50TWFuYWdlbWVudCksXG5cdFx0aXNJbnNpZ2h0c0VuYWJsZWQ6IGlzSW5zaWdodHNFbmFibGVkLFxuXHRcdGlzSW5zaWdodHNWaXNpYmxlOiBpc0luc2lnaHRzVmlzaWJsZSxcblx0XHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQ6IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldFxuXHR9O1xufVxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQuXG4gKlxuICogQHBhcmFtIHAxM25Nb2RlXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEByZXR1cm5zIFRoZSB2YXJpYW50IG1hbmFnZW1lbnQgZm9yIHRoZSBjaGFydFxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFudE1hbmFnZW1lbnQocDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdHJldHVybiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZ2V0IGNvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIGRhdGFGaWVsZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIENvbXBpbGUgZXhwcmVzc2lvbiBmb3IgRGF0YUZpZWxkRm9yQWN0aW9uIGFuZCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGlsZUV4cHJlc3Npb25Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRub3QoXG5cdFx0XHRlcXVhbChcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbixcblx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKClcblx0XHRcdFx0KSxcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KVxuXHRcdClcblx0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJsYW5rQ2hhcnRWaXN1YWxpemF0aW9uKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pik6IENoYXJ0VmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRjb25zdCBlbnRpdHlOYW1lID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgPyBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldC5uYW1lIDogZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb246IENoYXJ0VmlzdWFsaXphdGlvbiA9IHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogZ2V0Q2hhcnRJRChlbnRpdHlOYW1lLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHR0aXRsZTogXCJcIixcblx0XHRjb2xsZWN0aW9uOiBcIlwiLFxuXHRcdHBlcnNvbmFsaXphdGlvbjogdW5kZWZpbmVkLFxuXHRcdG5hdmlnYXRpb25QYXRoOiBcIlwiLFxuXHRcdGFubm90YXRpb25QYXRoOiBcIlwiLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdGxlZ2VuZEdyb3VwOiB7XG5cdFx0XHRcdGxheW91dDoge1xuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImJvdHRvbVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0XHRhY3Rpb25zOiBbXSxcblx0XHRjb21tYW5kQWN0aW9uczoge30sXG5cdFx0YXV0b0JpbmRPbkluaXQ6IGZhbHNlLFxuXHRcdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogXCJcIixcblx0XHR2aXNpYmxlOiBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID8gXCJ7PSAke3BhZ2VJbnRlcm5hbD5hbHBDb250ZW50Vmlld30gIT09ICdUYWJsZSd9XCIgOiBcInRydWVcIixcblx0XHRjdXN0b21BZ2c6IHt9LFxuXHRcdHRyYW5zQWdnOiB7fSxcblx0XHRhcHBseVN1cHBvcnRlZDoge1xuXHRcdFx0JFR5cGU6IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkVHlwZVwiLFxuXHRcdFx0QWdncmVnYXRhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRHcm91cGFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdGVuYWJsZVNlYXJjaDogZmFsc2Vcblx0XHR9LFxuXHRcdG11bHRpVmlld3M6IGZhbHNlLFxuXHRcdHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZVxuXHR9O1xuXG5cdHJldHVybiB2aXN1YWxpemF0aW9uO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQSw4QkFBOEIs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
|
|
381
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMiLCJjaGFydEFubm90YXRpb24iLCJ2aXN1YWxpemF0aW9uUGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJjaGFydEFjdGlvbnMiLCJBY3Rpb25zIiwiZm9yRWFjaCIsImRhdGFGaWVsZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QiLCJJbmxpbmUiLCJEZXRlcm1pbmluZyIsImtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsIiRUeXBlIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInB1c2giLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIkRhdGFGaWVsZEZvckFjdGlvbiIsImFubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInZpc2libGUiLCJnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbiIsIkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImlzTmF2aWdhYmxlIiwiZ2V0Q2hhcnRBY3Rpb25zIiwiYUFubm90YXRpb25BY3Rpb25zIiwibWFuaWZlc3RBY3Rpb25zIiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsImdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb24iLCJhY3Rpb25zIiwiYWN0aW9uT3ZlcndyaXRlQ29uZmlnIiwiZW5hYmxlZCIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImVuYWJsZU9uU2VsZWN0IiwiY29tbWFuZCIsInBvc2l0aW9uIiwiaW5zZXJ0Q3VzdG9tRWxlbWVudHMiLCJjb21tYW5kQWN0aW9ucyIsImdldFAxM25Nb2RlIiwibWFuaWZlc3RXcmFwcGVyIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiY2hhcnRNYW5pZmVzdFNldHRpbmdzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImFQZXJzb25hbGl6YXRpb24iLCJwZXJzb25hbGl6YXRpb24iLCJjaGFydFNldHRpbmdzIiwiaXNDb250cm9sVmFyaWFudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpdGVtIiwic29ydCIsImZpbHRlciIsImpvaW4iLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0IiwiYWdnUHJvcCIsIm9iaiIsIlByb3BlcnR5IiwiJFByb3BlcnR5UGF0aCIsInZhbHVlIiwibmFtZSIsImNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbiIsImRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRQYXRoIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsIkVycm9yIiwiYVRyYW5zQWdncmVnYXRpb25zIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhQ3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwicGFnZU1hbmlmZXN0U2V0dGluZ3MiLCJwMTNuTW9kZSIsIkxvZyIsIndhcm5pbmciLCJtQ3VzdG9tQWdncmVnYXRlcyIsImVudGl0eVR5cGUiLCJjdXN0b21BZ2dyZWdhdGUiLCJhQ29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwicXVhbGlmaWVyIiwicmVsYXRlZEN1c3RvbUFnZ3JlZ2F0ZVByb3BlcnR5IiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsImxhYmVsIiwiQ29tbW9uIiwiTGFiZWwiLCJ0b1N0cmluZyIsInNvcnRhYmxlIiwic29ydE9yZGVyIiwiY29udGV4dERlZmluaW5nUHJvcGVydHkiLCJtYXAiLCJvQ3R4RGVmUHJvcGVydHkiLCJtVHJhbnNBZ2dyZWdhdGlvbnMiLCJvUmVzb3VyY2VCdW5kbGVDb3JlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZWxlbWVudCIsIk5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiQWdncmVnYXRpb25NZXRob2QiLCJnZXRUZXh0IiwiY3VzdG9tIiwiYUFnZ1Byb3BzIiwiZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcyIsImFHcnBQcm9wcyIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJtQXBwbHlTdXBwb3J0ZWQiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsInByb3AiLCJuYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsImxlbmd0aCIsInN1YnN0cmluZyIsInRpdGxlIiwiVGl0bGUiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImlzRW50aXR5U2V0IiwiZW50aXR5TmFtZSIsInRhcmdldEVudGl0eVNldCIsInN0YXJ0aW5nRW50aXR5U2V0Iiwic0ZpbHRlcmJhcklkIiwiZ2V0RmlsdGVyQmFySUQiLCJnZXRDb250ZXh0UGF0aCIsIm9WaXpQcm9wZXJ0aWVzIiwicGxvdEFyZWEiLCJ3aW5kb3ciLCJzdGFydCIsImVuZCIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwiYXV0b0JpbmRPbkluaXQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJPYmplY3RQYWdlIiwiTGlzdFJlcG9ydCIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQiLCJhbGxvd2VkVHJhbnNmb3JtYXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsImVuYWJsZVNlYXJjaCIsImluY2x1ZGVzIiwiaXNJbnNpZ2h0c1Zpc2libGUiLCJnZXRJbnNpZ2h0c1Zpc2liaWxpdHkiLCJpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQiLCJnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNJbnNpZ2h0c0VuYWJsZWQiLCJhbmQiLCJnZXRJbnNpZ2h0c0VuYWJsZW1lbnQiLCJWaXN1YWxpemF0aW9uVHlwZSIsIkNoYXJ0IiwiaWQiLCJnZXRDaGFydElEIiwiY29sbGVjdGlvbiIsImdldFRhcmdldE9iamVjdFBhdGgiLCJuYXZpZ2F0aW9uUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJmaWx0ZXJJZCIsInZpelByb3BlcnRpZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQWdnIiwidHJhbnNBZ2ciLCJhcHBseVN1cHBvcnRlZCIsImZpbmRWYXJpYW50TWFuYWdlbWVudCIsIk5vbmUiLCJjcmVhdGVDaGFydFZpc3VhbGl6YXRpb25Gb3JUZW1wbGF0aW5nIiwidmlzdWFsaXphdGlvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJVSSIsIkhpZGRlbiIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbiIsIm11bHRpVmlld3MiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNoYXJ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRhYmxlUHJvcGVydHlUeXBlLCBBZ2dyZWdhdGlvbk1ldGhvZCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBub3QsIHR5cGUgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25BY3Rpb24sXG5cdEJhc2VBY3Rpb24sXG5cdENvbWJpbmVkQWN0aW9uLFxuXHRDdXN0b21BY3Rpb24sXG5cdE92ZXJyaWRlVHlwZUFjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgT3ZlcnJpZGVUeXBlLCBpbnNlcnRDdXN0b21FbGVtZW50cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIE1hbmlmZXN0QWN0aW9uIH0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUsIFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcIi4uLy4uL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgZ2V0Q2hhcnRJRCwgZ2V0RmlsdGVyQmFySUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHsgZ2V0SW5zaWdodHNFbmFibGVtZW50LCBnZXRJbnNpZ2h0c1Zpc2liaWxpdHkgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9JbnNpZ2h0c0hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zIH0gZnJvbSBcIi4vRGF0YVZpc3VhbGl6YXRpb25cIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnRBcHBseVN1cHBvcnRlZCA9IHtcblx0JFR5cGU6IHN0cmluZztcblx0ZW5hYmxlU2VhcmNoPzogYm9vbGVhbjtcblx0QWdncmVnYXRhYmxlUHJvcGVydGllcz86IHVua25vd25bXTtcblx0R3JvdXBhYmxlUHJvcGVydGllcz86IHVua25vd25bXTtcbn07XG5leHBvcnQgdHlwZSBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiA9IHtcblx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQ7XG5cdGlkOiBzdHJpbmc7XG5cdGVudGl0eU5hbWU6IHN0cmluZztcblx0Y29sbGVjdGlvbjogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRhcHBseVN1cHBvcnRlZDogQ2hhcnRBcHBseVN1cHBvcnRlZDtcblx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0PzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQHR5cGVkZWYgQ2hhcnRWaXN1YWxpemF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0VmlzdWFsaXphdGlvbiA9IENoYXJ0VGVtcGxhdGVWaXN1YWxpemF0aW9uICYge1xuXHRlbnRpdHlOYW1lOiBzdHJpbmc7XG5cdHBlcnNvbmFsaXphdGlvbj86IHN0cmluZztcblx0bmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0ZmlsdGVySWQ/OiBzdHJpbmc7XG5cdHZpelByb3BlcnRpZXM6IHN0cmluZztcblx0YWN0aW9uczogQmFzZUFjdGlvbltdO1xuXHRjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPjtcblx0dGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0YXV0b0JpbmRPbkluaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdG9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZDogc3RyaW5nO1xuXHR2aXNpYmxlOiBzdHJpbmc7XG5cdGN1c3RvbUFnZzogb2JqZWN0O1xuXHR0cmFuc0FnZzogb2JqZWN0O1xuXHRtdWx0aVZpZXdzPzogYm9vbGVhbjtcblx0dmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZTtcblx0c2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7XG5cdGlzSW5zaWdodHNFbmFibGVkPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpc0luc2lnaHRzVmlzaWJsZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJldHJpZXZlIGFsbCBjaGFydCBhY3Rpb25zIGZyb20gYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgVGhlIGNoYXJ0IGFjdGlvbnMgZnJvbSB0aGUgYW5ub3RhdGlvblxuICovXG5mdW5jdGlvbiBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQW5ub3RhdGlvbkFjdGlvbltdIHtcblx0Y29uc3QgY2hhcnRBY3Rpb25zOiBBbm5vdGF0aW9uQWN0aW9uW10gPSBbXTtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbj8uQWN0aW9ucykge1xuXHRcdGNoYXJ0QW5ub3RhdGlvbi5BY3Rpb25zLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkKSAmJiAhZGF0YUZpZWxkLklubGluZSAmJiAhZGF0YUZpZWxkLkRldGVybWluaW5nKSB7XG5cdFx0XHRcdGNvbnN0IGtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKTtcblx0XHRcdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbjpcblx0XHRcdFx0XHRcdGlmIChkYXRhRmllbGQuQWN0aW9uVGFyZ2V0ICYmICFkYXRhRmllbGQuQWN0aW9uVGFyZ2V0LmlzQm91bmQpIHtcblx0XHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSksXG5cdFx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU6IGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgY29udmVydGVyQ29udGV4dClcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0XHRcdFx0Y2hhcnRBY3Rpb25zLnB1c2goe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKSxcblx0XHRcdFx0XHRcdFx0a2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBnZXRDb21waWxlRXhwcmVzc2lvbkZvckFjdGlvbihkYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0XHRcdFx0XHRpc05hdmlnYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBjaGFydEFjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFydEFjdGlvbnMoXG5cdGNoYXJ0QW5ub3RhdGlvbjogQ2hhcnQsXG5cdHZpc3VhbGl6YXRpb25QYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tYmluZWRBY3Rpb24ge1xuXHRjb25zdCBhQW5ub3RhdGlvbkFjdGlvbnMgPSBnZXRDaGFydEFjdGlvbnNGcm9tQW5ub3RhdGlvbnMoY2hhcnRBbm5vdGF0aW9uLCB2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IG1hbmlmZXN0QWN0aW9ucyA9IGdldEFjdGlvbnNGcm9tTWFuaWZlc3QoXG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uPENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uPih2aXN1YWxpemF0aW9uUGF0aCkuYWN0aW9ucyBhcyBSZWNvcmQ8XG5cdFx0XHRzdHJpbmcsXG5cdFx0XHRNYW5pZmVzdEFjdGlvblxuXHRcdD4sXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRhQW5ub3RhdGlvbkFjdGlvbnNcblx0KTtcblx0Y29uc3QgYWN0aW9uT3ZlcndyaXRlQ29uZmlnOiBPdmVycmlkZVR5cGVBY3Rpb24gPSB7XG5cdFx0ZW5hYmxlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRlbmFibGVPblNlbGVjdDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR2aXNpYmxlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGNvbW1hbmQ6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGVcblx0fTtcblx0Y29uc3QgY2hhcnRBY3Rpb25zID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHM8QmFzZUFjdGlvbj4oYUFubm90YXRpb25BY3Rpb25zLCBtYW5pZmVzdEFjdGlvbnMuYWN0aW9ucywgYWN0aW9uT3ZlcndyaXRlQ29uZmlnKTtcblx0cmV0dXJuIHtcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMsXG5cdFx0Y29tbWFuZEFjdGlvbnM6IG1hbmlmZXN0QWN0aW9ucy5jb21tYW5kQWN0aW9uc1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UDEzbk1vZGUodmlzdWFsaXphdGlvblBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyOiBNYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCBjaGFydE1hbmlmZXN0U2V0dGluZ3M6IENoYXJ0TWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uKHZpc3VhbGl6YXRpb25QYXRoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpO1xuXHRjb25zdCBhUGVyc29uYWxpemF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuXHQvLyBQZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCBpbiBtYW5pZmVzdC5cblx0Y29uc3QgcGVyc29uYWxpemF0aW9uID0gY2hhcnRNYW5pZmVzdFNldHRpbmdzPy5jaGFydFNldHRpbmdzPy5wZXJzb25hbGl6YXRpb247XG5cdGNvbnN0IGlzQ29udHJvbFZhcmlhbnQgPSB2YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB0cnVlIDogZmFsc2U7XG5cdC8vIGlmIHBlcnNvbmFsaXphdGlvbiBpcyBzZXQgdG8gZmFsc2UgZG8gbm90IHNob3cgYW55IG9wdGlvblxuXHRpZiAoKHBlcnNvbmFsaXphdGlvbiAhPT0gdW5kZWZpbmVkICYmICFwZXJzb25hbGl6YXRpb24pIHx8IHBlcnNvbmFsaXphdGlvbiA9PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0eXBlb2YgcGVyc29uYWxpemF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gU3BlY2lmaWMgcGVyc29uYWxpemF0aW9uIG9wdGlvbnMgZW5hYmxlZCBpbiBtYW5pZmVzdC4gVXNlIHRoZW0gYXMgaXMuXG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi50eXBlKSB7XG5cdFx0XHRhUGVyc29uYWxpemF0aW9uLnB1c2goXCJUeXBlXCIpO1xuXHRcdH1cblx0XHRpZiAocGVyc29uYWxpemF0aW9uLml0ZW0pIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkl0ZW1cIik7XG5cdFx0fVxuXHRcdGlmIChwZXJzb25hbGl6YXRpb24uc29ydCkge1xuXHRcdFx0YVBlcnNvbmFsaXphdGlvbi5wdXNoKFwiU29ydFwiKTtcblx0XHR9XG5cdFx0aWYgKHBlcnNvbmFsaXphdGlvbi5maWx0ZXIpIHtcblx0XHRcdGFQZXJzb25hbGl6YXRpb24ucHVzaChcIkZpbHRlclwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQZXJzb25hbGl6YXRpb24uam9pbihcIixcIik7XG5cdH0gZWxzZSBpZiAoaXNDb250cm9sVmFyaWFudCB8fCAhIXBlcnNvbmFsaXphdGlvbikge1xuXHRcdC8vIG1hbmlmZXN0IGhhcyBwZXJzb25hbGl6YXRpb24gY29uZmlndXJlZCwgY2hlY2sgaWYgaXQncyB0cnVlXG5cdFx0Ly8gaWYgbWFuaWZlc3QgZG9lc24ndCBoYXZlIHBlcnNvbmFsaXphdGlvbiwgY2hlY2sgZm9yIHZhcmlhbnQgbWFuYWdlbWVudCBpcyBzZXQgdG8gY29udHJvbFxuXHRcdHJldHVybiBcIlNvcnQsVHlwZSxJdGVtLEZpbHRlclwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG1hbmlmZXN0IGRvZXNuJ3QgaGF2ZSBwZXJzb25hbGl6YXRpb24sIHNob3cgZGVmYXVsdCBvcHRpb25zIHdpdGhvdXQgZmlsdGVyXG5cdFx0cmV0dXJuIFwiU29ydCxUeXBlLEl0ZW1cIjtcblx0fVxufVxuZXhwb3J0IHR5cGUgQ2hhcnRDdXN0b21BZ2dyZWdhdGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0c29ydGFibGU6IGJvb2xlYW47XG5cdHNvcnRPcmRlcjogXCJib3RoXCI7XG5cdGNvbnRleHREZWZpbmluZ1Byb3BlcnR5OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFRyYW5zQWdnID0ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHByb3BlcnR5UGF0aDogc3RyaW5nO1xuXHRhZ2dyZWdhdGlvbk1ldGhvZDogQWdncmVnYXRpb25NZXRob2Q7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHNvcnRhYmxlOiBib29sZWFuO1xuXHRzb3J0T3JkZXI6IFwiYm90aFwiO1xuXHRjdXN0b206IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllc09iamVjdChhZ2dQcm9wOiBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUgfCBQcm9wZXJ0eSk6IHsgUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0gfSB7XG5cdGxldCBvYmo7XG5cdGlmICgoYWdnUHJvcCBhcyBBZ2dyZWdhdGFibGVQcm9wZXJ0eVR5cGUpPy5Qcm9wZXJ0eSkge1xuXHRcdG9iaiA9IHtcblx0XHRcdFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IChhZ2dQcm9wIGFzIEFnZ3JlZ2F0YWJsZVByb3BlcnR5VHlwZSk/LlByb3BlcnR5Py52YWx1ZVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0b2JqID0ge1xuXHRcdFx0UHJvcGVydHk6IHtcblx0XHRcdFx0JFByb3BlcnR5UGF0aDogKGFnZ1Byb3AgYXMgUHJvcGVydHkpPy5uYW1lXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXHRyZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBDcmVhdGUgdGhlIENoYXJ0VmlzdWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgYSBjaGFydCB1c2luZyB0aGUgQ2hhcnQgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGNoYXJ0QW5ub3RhdGlvbiBUaGUgdGFyZ2V0ZWQgY2hhcnQgYW5ub3RhdGlvblxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgQXBwbHlTdXBwb3J0ZWQgbmVlZHMgdG8gYmUgY2hlY2tlZCBvciBub3RcbiAqIEBwYXJhbSBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aFxuICogQHJldHVybnMgVGhlIGNoYXJ0IHZpc3VhbGl6YXRpb24gYmFzZWQgb24gdGhlIGFubm90YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbihcblx0Y2hhcnRBbm5vdGF0aW9uOiBDaGFydCxcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRkb05vdENoZWNrQXBwbHlTdXBwb3J0ZWQ/OiBib29sZWFuLFxuXHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aD86IHN0cmluZ1xuKTogQ2hhcnRWaXN1YWxpemF0aW9uIHtcblx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQsIHRydWUpOyAvLyBwYXNzaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBhcyB0cnVlIHRvIGNvbnNpZGVyIHRoZSBvbGQgYW5ub3RhdGlvbnMgaS5lLiBBZ2dyZWdhdGlvbi5BZ2dyZWdhdGFibGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaW4gY2FzZSBvZiBjaGFydFxuXHRpZiAoIWRvTm90Q2hlY2tBcHBseVN1cHBvcnRlZCAmJiAhYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkFwcGx5U3VwcG9ydGVkIGlzIG5vdCBhZGRlZCB0byB0aGUgYW5ub3RhdGlvbnNcIik7XG5cdH1cblx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRjb25zdCBwYWdlTWFuaWZlc3RTZXR0aW5nczogTWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3QgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSA9IHBhZ2VNYW5pZmVzdFNldHRpbmdzLmdldFZhcmlhbnRNYW5hZ2VtZW50KCk7XG5cdGNvbnN0IHAxM25Nb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRQMTNuTW9kZSh2aXN1YWxpemF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChwMTNuTW9kZSA9PT0gdW5kZWZpbmVkICYmIHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdExvZy53YXJuaW5nKFwiVmFyaWFudCBNYW5hZ2VtZW50IGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHR9XG5cdGNvbnN0IG1DdXN0b21BZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cdGlmIChhQ3VzdG9tQWdncmVnYXRlcykge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0Zm9yIChjb25zdCBjdXN0b21BZ2dyZWdhdGUgb2YgYUN1c3RvbUFnZ3JlZ2F0ZXMpIHtcblx0XHRcdGNvbnN0IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzID0gY3VzdG9tQWdncmVnYXRlPy5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM7XG5cdFx0XHRjb25zdCBxdWFsaWZpZXIgPSBjdXN0b21BZ2dyZWdhdGU/LnF1YWxpZmllcjtcblx0XHRcdGNvbnN0IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSA9IHF1YWxpZmllciAmJiBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IHByb3BlcnR5Lm5hbWUgPT09IHF1YWxpZmllcik7XG5cdFx0XHRjb25zdCBsYWJlbCA9IHJlbGF0ZWRDdXN0b21BZ2dyZWdhdGVQcm9wZXJ0eSAmJiByZWxhdGVkQ3VzdG9tQWdncmVnYXRlUHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpO1xuXHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbcXVhbGlmaWVyXSA9IHtcblx0XHRcdFx0bmFtZTogcXVhbGlmaWVyLFxuXHRcdFx0XHRsYWJlbDogbGFiZWwgfHwgYEN1c3RvbSBBZ2dyZWdhdGUgKCR7cXVhbGlmaWVyfSlgLFxuXHRcdFx0XHRzb3J0YWJsZTogdHJ1ZSxcblx0XHRcdFx0c29ydE9yZGVyOiBcImJvdGhcIixcblx0XHRcdFx0Y29udGV4dERlZmluaW5nUHJvcGVydHk6IGFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAoKG9DdHhEZWZQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0N0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHRcdCAgfSlcblx0XHRcdFx0XHQ6IFtdXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1UcmFuc0FnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgVHJhbnNBZ2c+ID0ge307XG5cdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZUNvcmUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRpZiAoYVRyYW5zQWdncmVnYXRpb25zKSB7XG5cdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFUcmFuc0FnZ3JlZ2F0aW9ucykge1xuXHRcdFx0bVRyYW5zQWdncmVnYXRpb25zW2VsZW1lbnQuTmFtZSBhcyBzdHJpbmddID0ge1xuXHRcdFx0XHRuYW1lOiBlbGVtZW50Lk5hbWUgYXMgc3RyaW5nLFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGVsZW1lbnQuQWdncmVnYXRhYmxlUHJvcGVydHkudmFsdWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBlbGVtZW50LkFnZ3JlZ2F0aW9uTWV0aG9kLFxuXHRcdFx0XHRsYWJlbDogZWxlbWVudD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWxcblx0XHRcdFx0XHQ/IGVsZW1lbnQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpXG5cdFx0XHRcdFx0OiBgJHtvUmVzb3VyY2VCdW5kbGVDb3JlLmdldFRleHQoXCJBR0dSRUdBVEFCTEVfUFJPUEVSVFlcIil9ICgke2VsZW1lbnQuTmFtZX0pYCxcblx0XHRcdFx0c29ydGFibGU6IHRydWUsXG5cdFx0XHRcdHNvcnRPcmRlcjogXCJib3RoXCIsXG5cdFx0XHRcdGN1c3RvbTogZmFsc2Vcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgYUFnZ1Byb3BzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpO1xuXHRjb25zdCBhR3JwUHJvcHMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRHcm91cGFibGVQcm9wZXJ0aWVzKCk7XG5cdGNvbnN0IG1BcHBseVN1cHBvcnRlZCA9IHt9IGFzIENoYXJ0QXBwbHlTdXBwb3J0ZWQ7XG5cdG1BcHBseVN1cHBvcnRlZC4kVHlwZSA9IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblR5cGVzLkFwcGx5U3VwcG9ydGVkVHlwZTtcblx0bUFwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBbXTtcblx0bUFwcGx5U3VwcG9ydGVkLkdyb3VwYWJsZVByb3BlcnRpZXMgPSBbXTtcblxuXHRpZiAoYUFnZ1Byb3BzKSB7XG5cdFx0bUFwcGx5U3VwcG9ydGVkLkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSBhQWdnUHJvcHMubWFwKChwcm9wKSA9PiBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzT2JqZWN0KHByb3ApKTtcblx0fVxuXG5cdGlmIChhR3JwUHJvcHMpIHtcblx0XHRtQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcyA9IGFHcnBQcm9wcy5tYXAoKHByb3ApID0+ICh7IFtcIiRQcm9wZXJ0eVBhdGhcIl06IHByb3AudmFsdWUgfSkpO1xuXHR9XG5cblx0Y29uc3QgY2hhcnRBY3Rpb25zID0gZ2V0Q2hhcnRBY3Rpb25zKGNoYXJ0QW5ub3RhdGlvbiwgdmlzdWFsaXphdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGggLyosIGFubm90YXRpb25QYXRoKi9dID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXHRpZiAobmF2aWdhdGlvblByb3BlcnR5UGF0aC5sYXN0SW5kZXhPZihcIi9cIikgPT09IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgubGVuZ3RoIC0gMSkge1xuXHRcdC8vIERyb3AgdHJhaWxpbmcgc2xhc2hcblx0XHRuYXZpZ2F0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5zdWJzdHJpbmcoMCwgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggLSAxKTtcblx0fVxuXHRjb25zdCB0aXRsZSA9IGNoYXJ0QW5ub3RhdGlvbi5UaXRsZT8udG9TdHJpbmcoKSB8fCBcIlwiOyAvLyByZWFkIHRpdGxlIGZyb20gY2hhcnQgYW5ub3RhdGlvblxuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IGlzRW50aXR5U2V0OiBib29sZWFuID0gbmF2aWdhdGlvblByb3BlcnR5UGF0aC5sZW5ndGggPT09IDA7XG5cdGNvbnN0IGVudGl0eU5hbWU6IHN0cmluZyA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblx0Y29uc3Qgc0ZpbHRlcmJhcklkID0gaXNFbnRpdHlTZXQgPyBnZXRGaWx0ZXJCYXJJRChjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCkpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBvVml6UHJvcGVydGllcyA9IHtcblx0XHRwbG90QXJlYToge1xuXHRcdFx0d2luZG93OiB7XG5cdFx0XHRcdHN0YXJ0OiBcImZpcnN0RGF0YVBvaW50XCIsXG5cdFx0XHRcdGVuZDogXCJsYXN0RGF0YVBvaW50XCJcblx0XHRcdH1cblx0XHR9LFxuXHRcdGxlZ2VuZEdyb3VwOiB7XG5cdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCJcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGxldCBhdXRvQmluZE9uSW5pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlKSB7XG5cdFx0YXV0b0JpbmRPbkluaXQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0IHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRhdXRvQmluZE9uSW5pdCA9IGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPVxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0Y29uc3Qgb25TZWdtZW50ZWRCdXR0b25QcmVzc2VkID0gaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiLmhhbmRsZXJzLm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZFwiIDogXCJcIjtcblx0Y29uc3QgdmlzaWJsZSA9IGhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMgPyBcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSAhPT0gJ1RhYmxlJ31cIiA6IFwidHJ1ZVwiO1xuXHRjb25zdCBhbGxvd2VkVHJhbnNmb3JtYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpO1xuXHRtQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoID0gYWxsb3dlZFRyYW5zZm9ybWF0aW9ucyA/IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMuaW5jbHVkZXMoXCJzZWFyY2hcIikgOiB0cnVlO1xuXHRsZXQgcXVhbGlmaWVyID0gXCJcIjtcblx0aWYgKGNoYXJ0QW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpLmxlbmd0aCA+IDEpIHtcblx0XHRxdWFsaWZpZXIgPSBjaGFydEFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKVsxXTtcblx0fVxuXHRjb25zdCBpc0luc2lnaHRzVmlzaWJsZSA9IGdldEluc2lnaHRzVmlzaWJpbGl0eShcIkFuYWx5dGljYWxcIiwgY29udmVydGVyQ29udGV4dCwgdmlzdWFsaXphdGlvblBhdGgpO1xuXHRjb25zdCBpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldFBhcmFtZXRlckVudGl0eVR5cGUoKSA/IHRydWUgOiBmYWxzZTtcblx0Y29uc3QgaXNJbnNpZ2h0c0VuYWJsZWQgPSBhbmQoZ2V0SW5zaWdodHNFbmFibGVtZW50KCksIGlzSW5zaWdodHNWaXNpYmxlKTtcblx0cmV0dXJuIHtcblx0XHR0eXBlOiBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCxcblx0XHRpZDogcXVhbGlmaWVyXG5cdFx0XHQ/IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgcXVhbGlmaWVyLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydClcblx0XHRcdDogZ2V0Q2hhcnRJRChpc0VudGl0eVNldCA/IGVudGl0eU5hbWUgOiBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLCBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCksXG5cdFx0Y29sbGVjdGlvbjogZ2V0VGFyZ2V0T2JqZWN0UGF0aChjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKSksXG5cdFx0ZW50aXR5TmFtZTogZW50aXR5TmFtZSxcblx0XHRwZXJzb25hbGl6YXRpb246IGdldFAxM25Nb2RlKHZpc3VhbGl6YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRuYXZpZ2F0aW9uUGF0aDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCxcblx0XHRhbm5vdGF0aW9uUGF0aDogY29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHZpc3VhbGl6YXRpb25QYXRoKSxcblx0XHRmaWx0ZXJJZDogc0ZpbHRlcmJhcklkLFxuXHRcdHZpelByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KG9WaXpQcm9wZXJ0aWVzKSxcblx0XHRhY3Rpb25zOiBjaGFydEFjdGlvbnMuYWN0aW9ucyxcblx0XHRjb21tYW5kQWN0aW9uczogY2hhcnRBY3Rpb25zLmNvbW1hbmRBY3Rpb25zLFxuXHRcdHRpdGxlOiB0aXRsZSxcblx0XHRhdXRvQmluZE9uSW5pdDogYXV0b0JpbmRPbkluaXQsXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkOiBvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQsXG5cdFx0dmlzaWJsZTogdmlzaWJsZSxcblx0XHRjdXN0b21BZ2c6IG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdHRyYW5zQWdnOiBtVHJhbnNBZ2dyZWdhdGlvbnMsXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IG1BcHBseVN1cHBvcnRlZCxcblx0XHRzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50UGF0aCxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogZmluZFZhcmlhbnRNYW5hZ2VtZW50KHAxM25Nb2RlLCB2YXJpYW50TWFuYWdlbWVudCksXG5cdFx0aXNJbnNpZ2h0c0VuYWJsZWQ6IGlzSW5zaWdodHNFbmFibGVkLFxuXHRcdGlzSW5zaWdodHNWaXNpYmxlOiBpc0luc2lnaHRzVmlzaWJsZSxcblx0XHRpc1BhcmFtZXRlcml6ZWRFbnRpdHlTZXQ6IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldFxuXHR9O1xufVxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSB2YXJpYW50IG1hbmFnZW1lbnQuXG4gKlxuICogQHBhcmFtIHAxM25Nb2RlXG4gKiBAcGFyYW0gdmFyaWFudE1hbmFnZW1lbnRcbiAqIEByZXR1cm5zIFRoZSB2YXJpYW50IG1hbmFnZW1lbnQgZm9yIHRoZSBjaGFydFxuICovXG5mdW5jdGlvbiBmaW5kVmFyaWFudE1hbmFnZW1lbnQocDEzbk1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmFyaWFudE1hbmFnZW1lbnQ6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSk6IFZhcmlhbnRNYW5hZ2VtZW50VHlwZSB7XG5cdHJldHVybiB2YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIgJiYgIXAxM25Nb2RlID8gVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmUgOiB2YXJpYW50TWFuYWdlbWVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIENoYXJ0VmlzdWFsaXphdGlvbiBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGR1cmluZyB0ZW1wbGF0aW5nLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHZpc3VhbGl6YXRpb25QYXRoIFRoZSBwYXRoIG9mIHRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2aXN1YWxpemF0aW9uIFRoZSB2aXN1YWxpemF0aW9uIGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSBjaGFydCB2aXN1YWxpemF0aW9uIGJhc2VkIG9uIHRoZSBhbm5vdGF0aW9uIHVzZWQgZm9yIHRlbXBsYXRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoYXJ0VmlzdWFsaXphdGlvbkZvclRlbXBsYXRpbmcoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0dmlzdWFsaXphdGlvblBhdGg6IHN0cmluZyxcblx0dmlzdWFsaXphdGlvbjogQWN0dWFsVmlzdWFsaXphdGlvbkFubm90YXRpb25zXG4pOiBDaGFydFRlbXBsYXRlVmlzdWFsaXphdGlvbiB7XG5cdGNvbnN0IHF1YWxpZmllciA9IHZpc3VhbGl6YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLnNwbGl0KFwiI1wiKS5sZW5ndGggPiAxID8gdmlzdWFsaXphdGlvbi5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCIjXCIpWzFdIDogXCJcIjtcblx0Y29uc3QgW25hdmlnYXRpb25Qcm9wZXJ0eVBhdGhdID0gdmlzdWFsaXphdGlvblBhdGguc3BsaXQoXCJAXCIpO1xuXG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgaXNFbnRpdHlTZXQ6IGJvb2xlYW4gPSBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoLmxlbmd0aCA9PT0gMDtcblx0Y29uc3QgZW50aXR5TmFtZTogc3RyaW5nID0gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQ/Lm5hbWUgPz8gZGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lO1xuXHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGNvbnN0IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZEVudGl0eVNldCA9ICEhY29udmVydGVyQ29udGV4dC5nZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk7XG5cdHJldHVybiB7XG5cdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCh2aXN1YWxpemF0aW9uUGF0aCksXG5cdFx0aXNQYXJhbWV0ZXJpemVkRW50aXR5U2V0LFxuXHRcdGNvbGxlY3Rpb246IGdldFRhcmdldE9iamVjdFBhdGgoY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkpLFxuXHRcdHR5cGU6IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0LFxuXHRcdGVudGl0eU5hbWUsXG5cdFx0aWQ6IHF1YWxpZmllclxuXHRcdFx0PyBnZXRDaGFydElEKGlzRW50aXR5U2V0ID8gZW50aXR5TmFtZSA6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsIHF1YWxpZmllciwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpXG5cdFx0XHQ6IGdldENoYXJ0SUQoaXNFbnRpdHlTZXQgPyBlbnRpdHlOYW1lIDogbmF2aWdhdGlvblByb3BlcnR5UGF0aCwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGFwcGx5U3VwcG9ydGVkOiB7XG5cdFx0XHQkVHlwZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCIsXG5cdFx0XHRlbmFibGVTZWFyY2g6IGFsbG93ZWRUcmFuc2Zvcm1hdGlvbnM/LmluY2x1ZGVzKFwic2VhcmNoXCIpID8/IHRydWVcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGdldCBjb21waWxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLlxuICpcbiAqIEBwYXJhbSBkYXRhRmllbGRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBDb21waWxlIGV4cHJlc3Npb24gZm9yIERhdGFGaWVsZEZvckFjdGlvbiBhbmQgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldENvbXBpbGVFeHByZXNzaW9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0bm90KFxuXHRcdFx0ZXF1YWwoXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4sXG5cdFx0XHRcdFx0W10sXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVNb2RlbFBhdGhGdW5jdGlvbigpXG5cdFx0XHRcdCksXG5cdFx0XHRcdHRydWVcblx0XHRcdClcblx0XHQpXG5cdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbGFua0NoYXJ0VmlzdWFsaXphdGlvbihjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBDaGFydFZpc3VhbGl6YXRpb24ge1xuXHRjb25zdCBoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zID1cblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoKSB8fFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgZW50aXR5TmFtZSA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5U2V0ID8gZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQubmFtZSA6IGRhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZTtcblxuXHRjb25zdCB2aXN1YWxpemF0aW9uOiBDaGFydFZpc3VhbGl6YXRpb24gPSB7XG5cdFx0dHlwZTogVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQsXG5cdFx0aWQ6IGdldENoYXJ0SUQoZW50aXR5TmFtZSwgVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpLFxuXHRcdGVudGl0eU5hbWU6IGVudGl0eU5hbWUsXG5cdFx0dGl0bGU6IFwiXCIsXG5cdFx0Y29sbGVjdGlvbjogXCJcIixcblx0XHRwZXJzb25hbGl6YXRpb246IHVuZGVmaW5lZCxcblx0XHRuYXZpZ2F0aW9uUGF0aDogXCJcIixcblx0XHRhbm5vdGF0aW9uUGF0aDogXCJcIixcblx0XHR2aXpQcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRsZWdlbmRHcm91cDoge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdFx0YWN0aW9uczogW10sXG5cdFx0Y29tbWFuZEFjdGlvbnM6IHt9LFxuXHRcdGF1dG9CaW5kT25Jbml0OiBmYWxzZSxcblx0XHRvblNlZ21lbnRlZEJ1dHRvblByZXNzZWQ6IFwiXCIsXG5cdFx0dmlzaWJsZTogaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyA/IFwiez0gJHtwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9ICE9PSAnVGFibGUnfVwiIDogXCJ0cnVlXCIsXG5cdFx0Y3VzdG9tQWdnOiB7fSxcblx0XHR0cmFuc0FnZzoge30sXG5cdFx0YXBwbHlTdXBwb3J0ZWQ6IHtcblx0XHRcdCRUeXBlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIixcblx0XHRcdEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM6IFtdLFxuXHRcdFx0R3JvdXBhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRlbmFibGVTZWFyY2g6IGZhbHNlXG5cdFx0fSxcblx0XHRtdWx0aVZpZXdzOiBmYWxzZSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmVcblx0fTtcblxuXHRyZXR1cm4gdmlzdWFsaXphdGlvbjtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0EsOEJBQThCLENBQ3RDQyxlQUFzQixFQUN0QkMsaUJBQXlCLEVBQ3pCQyxnQkFBeUQsRUFDcEM7SUFDckIsTUFBTUMsWUFBZ0MsR0FBRyxFQUFFO0lBQzNDLElBQUlILGVBQWUsYUFBZkEsZUFBZSxlQUFmQSxlQUFlLENBQUVJLE9BQU8sRUFBRTtNQUM3QkosZUFBZSxDQUFDSSxPQUFPLENBQUNDLE9BQU8sQ0FBRUMsU0FBaUMsSUFBSztRQUN0RSxJQUFJQyw0QkFBNEIsQ0FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQ0EsU0FBUyxDQUFDRSxNQUFNLElBQUksQ0FBQ0YsU0FBUyxDQUFDRyxXQUFXLEVBQUU7VUFDM0YsTUFBTUMsR0FBRyxHQUFHQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDTixTQUFTLENBQUM7VUFDekQsUUFBUUEsU0FBUyxDQUFDTyxLQUFLO1lBQ3RCO2NBQ0MsSUFBSVAsU0FBUyxDQUFDUSxZQUFZLElBQUksQ0FBQ1IsU0FBUyxDQUFDUSxZQUFZLENBQUNDLE9BQU8sRUFBRTtnQkFDOURaLFlBQVksQ0FBQ2EsSUFBSSxDQUFDO2tCQUNqQkMsSUFBSSxFQUFFQyxVQUFVLENBQUNDLGtCQUFrQjtrQkFDbkNDLGNBQWMsRUFBRWxCLGdCQUFnQixDQUFD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
|
|
@@ -4,6 +4,8 @@ import { AggregationAnnotationTypes } from "@sap-ux/vocabularies-types/vocabular
|
|
|
4
4
|
import type { Chart, DataFieldAbstractTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
5
5
|
import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
6
6
|
import Log from "sap/base/Log";
|
|
7
|
+
import type { CompiledBindingToolkitExpression } from "sap/fe/base/BindingToolkit";
|
|
8
|
+
import { and, compileExpression, equal, getExpressionFromAnnotation, not, type BindingToolkitExpression } from "sap/fe/base/BindingToolkit";
|
|
7
9
|
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
8
10
|
import { isDataFieldForActionAbstract } from "sap/fe/core/converters/annotations/DataField";
|
|
9
11
|
import type {
|
|
@@ -16,15 +18,6 @@ import type {
|
|
|
16
18
|
import { getActionsFromManifest } from "sap/fe/core/converters/controls/Common/Action";
|
|
17
19
|
import { OverrideType, insertCustomElements } from "sap/fe/core/converters/helpers/ConfigurableObject";
|
|
18
20
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
19
|
-
import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
20
|
-
import {
|
|
21
|
-
and,
|
|
22
|
-
compileExpression,
|
|
23
|
-
equal,
|
|
24
|
-
getExpressionFromAnnotation,
|
|
25
|
-
not,
|
|
26
|
-
type BindingToolkitExpression
|
|
27
|
-
} from "sap/fe/core/helpers/BindingToolkit";
|
|
28
21
|
import { getTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
29
22
|
import Library from "sap/ui/core/Lib";
|
|
30
23
|
import type ConverterContext from "../../ConverterContext";
|
|
@@ -34,24 +27,31 @@ import type ManifestWrapper from "../../ManifestWrapper";
|
|
|
34
27
|
import { AggregationHelper } from "../../helpers/Aggregation";
|
|
35
28
|
import { getChartID, getFilterBarID } from "../../helpers/ID";
|
|
36
29
|
import { getInsightsEnablement, getInsightsVisibility } from "../../helpers/InsightsHelpers";
|
|
30
|
+
import type { ActualVisualizationAnnotations } from "./DataVisualization";
|
|
37
31
|
|
|
38
|
-
type ChartApplySupported = {
|
|
32
|
+
export type ChartApplySupported = {
|
|
39
33
|
$Type: string;
|
|
40
|
-
enableSearch
|
|
41
|
-
AggregatableProperties
|
|
42
|
-
GroupableProperties
|
|
34
|
+
enableSearch?: boolean;
|
|
35
|
+
AggregatableProperties?: unknown[];
|
|
36
|
+
GroupableProperties?: unknown[];
|
|
43
37
|
};
|
|
44
|
-
|
|
45
|
-
* @typedef ChartVisualization
|
|
46
|
-
*/
|
|
47
|
-
export type ChartVisualization = {
|
|
38
|
+
export type ChartTemplateVisualization = {
|
|
48
39
|
type: VisualizationType.Chart;
|
|
49
40
|
id: string;
|
|
41
|
+
entityName: string;
|
|
50
42
|
collection: string;
|
|
43
|
+
annotationPath: string;
|
|
44
|
+
applySupported: ChartApplySupported;
|
|
45
|
+
isParameterizedEntitySet?: boolean;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @typedef ChartVisualization
|
|
50
|
+
*/
|
|
51
|
+
export type ChartVisualization = ChartTemplateVisualization & {
|
|
51
52
|
entityName: string;
|
|
52
53
|
personalization?: string;
|
|
53
54
|
navigationPath: string;
|
|
54
|
-
annotationPath: string;
|
|
55
55
|
filterId?: string;
|
|
56
56
|
vizProperties: string;
|
|
57
57
|
actions: BaseAction[];
|
|
@@ -62,13 +62,11 @@ export type ChartVisualization = {
|
|
|
62
62
|
visible: string;
|
|
63
63
|
customAgg: object;
|
|
64
64
|
transAgg: object;
|
|
65
|
-
applySupported: ChartApplySupported;
|
|
66
65
|
multiViews?: boolean;
|
|
67
66
|
variantManagement: VariantManagementType;
|
|
68
67
|
selectionPresentationVariantPath?: string;
|
|
69
68
|
isInsightsEnabled?: BindingToolkitExpression<boolean>;
|
|
70
69
|
isInsightsVisible?: BindingToolkitExpression<boolean>;
|
|
71
|
-
isParameterizedEntitySet?: boolean;
|
|
72
70
|
};
|
|
73
71
|
|
|
74
72
|
/**
|
|
@@ -385,6 +383,44 @@ function findVariantManagement(p13nMode: string | undefined, variantManagement:
|
|
|
385
383
|
return variantManagement === "Control" && !p13nMode ? VariantManagementType.None : variantManagement;
|
|
386
384
|
}
|
|
387
385
|
|
|
386
|
+
/**
|
|
387
|
+
* Create the ChartVisualization configuration that will be used to during templating.
|
|
388
|
+
*
|
|
389
|
+
* @param converterContext The converter context
|
|
390
|
+
* @param visualizationPath The path of the visualization annotation
|
|
391
|
+
* @param visualization The visualization annotation
|
|
392
|
+
* @returns The chart visualization based on the annotation used for templating
|
|
393
|
+
*/
|
|
394
|
+
export function createChartVisualizationForTemplating(
|
|
395
|
+
converterContext: ConverterContext<PageContextPathTarget>,
|
|
396
|
+
visualizationPath: string,
|
|
397
|
+
visualization: ActualVisualizationAnnotations
|
|
398
|
+
): ChartTemplateVisualization {
|
|
399
|
+
const qualifier = visualization.fullyQualifiedName.split("#").length > 1 ? visualization.fullyQualifiedName.split("#")[1] : "";
|
|
400
|
+
const [navigationPropertyPath] = visualizationPath.split("@");
|
|
401
|
+
|
|
402
|
+
const dataModelPath = converterContext.getDataModelObjectPath();
|
|
403
|
+
const isEntitySet: boolean = navigationPropertyPath.length === 0;
|
|
404
|
+
const entityName: string = dataModelPath.targetEntitySet?.name ?? dataModelPath.startingEntitySet.name;
|
|
405
|
+
const aggregationHelper = new AggregationHelper(converterContext.getEntityType(), converterContext, true);
|
|
406
|
+
const allowedTransformations = aggregationHelper.getAllowedTransformations();
|
|
407
|
+
const isParameterizedEntitySet = !!converterContext.getParameterEntityType();
|
|
408
|
+
return {
|
|
409
|
+
annotationPath: converterContext.getAbsoluteAnnotationPath(visualizationPath),
|
|
410
|
+
isParameterizedEntitySet,
|
|
411
|
+
collection: getTargetObjectPath(converterContext.getDataModelObjectPath()),
|
|
412
|
+
type: VisualizationType.Chart,
|
|
413
|
+
entityName,
|
|
414
|
+
id: qualifier
|
|
415
|
+
? getChartID(isEntitySet ? entityName : navigationPropertyPath, qualifier, VisualizationType.Chart)
|
|
416
|
+
: getChartID(isEntitySet ? entityName : navigationPropertyPath, VisualizationType.Chart),
|
|
417
|
+
applySupported: {
|
|
418
|
+
$Type: "Org.OData.Aggregation.V1.ApplySupportedType",
|
|
419
|
+
enableSearch: allowedTransformations?.includes("search") ?? true
|
|
420
|
+
}
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
|
|
388
424
|
/**
|
|
389
425
|
* Method to get compile expression for DataFieldForAction and DataFieldForIntentBasedNavigation.
|
|
390
426
|
*
|