@sapui5/sap.fe.core 1.113.0 → 1.115.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +68 -5
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +120 -4
- package/src/sap/fe/core/AppComponent-dbg.js +8 -2
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +19 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +14 -10
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +17 -11
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +13 -2
- package/src/sap/fe/core/CommonUtils-dbg.js +74 -317
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +96 -473
- package/src/sap/fe/core/ExtensionAPI-dbg.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +2 -2
- package/src/sap/fe/core/StateFilterToSelectionVariant-dbg.js +263 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.js +6 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.js.map +1 -0
- package/src/sap/fe/core/StateFilterToSelectionVariant.ts +316 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +10 -3
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +8 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +7 -7
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +68 -36
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +83 -43
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +12 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +17 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +233 -133
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +260 -145
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +3 -3
- package/src/sap/fe/core/controllerextensions/Routing-dbg.js +5 -3
- package/src/sap/fe/core/controllerextensions/Routing.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +25 -18
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +40 -26
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +59 -33
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +23 -25
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +5 -48
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +73 -90
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +88 -101
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +26 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +29 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +64 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +91 -8
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +2 -4
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +3 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +9 -9
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +8 -8
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +0 -8
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters-dbg.js +435 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js +6 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.js.map +1 -0
- package/src/sap/fe/core/controls/filterbar/adapter/SelectionVariantToStateFilters.ts +532 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +38 -0
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -5
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +36 -4
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +45 -4
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +18 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +18 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +679 -676
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +30 -18
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +6 -37
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +100 -72
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +146 -99
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +37 -10
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +49 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +47 -18
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +74 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +26 -9
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -8
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +28 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -9
- package/src/sap/fe/core/converters/helpers/InsightsHelpers-dbg.js +39 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +13 -15
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +18 -54
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -12
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +16 -11
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -11
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -25
- package/src/sap/fe/core/fpm/Component-dbg.js +3 -1
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/Component.js.map +1 -1
- package/src/sap/fe/core/fpm/Component.ts +3 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +74 -26
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +116 -33
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +82 -37
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +109 -56
- package/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +7 -5
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +13 -3
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +28 -18
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +2 -1
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +5 -2
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +5 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +24 -2
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +23 -1
- package/src/sap/fe/core/helpers/TitleHelper-dbg.js +239 -0
- package/src/sap/fe/core/helpers/TitleHelper.js +6 -0
- package/src/sap/fe/core/helpers/TitleHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/TitleHelper.ts +295 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +4 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +41 -17
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +45 -21
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +8 -4
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +7 -2
- package/src/sap/fe/core/library-dbg.js +4 -3
- package/src/sap/fe/core/library-preload.js +91 -74
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.js.map +1 -1
- package/src/sap/fe/core/library.ts +1 -1
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +4 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +3 -2
- package/src/sap/fe/core/messagebundle.properties +12 -8
- package/src/sap/fe/core/messagebundle_ar.properties +7 -5
- package/src/sap/fe/core/messagebundle_bg.properties +7 -5
- package/src/sap/fe/core/messagebundle_ca.properties +7 -5
- package/src/sap/fe/core/messagebundle_cs.properties +7 -5
- package/src/sap/fe/core/messagebundle_cy.properties +7 -5
- package/src/sap/fe/core/messagebundle_da.properties +7 -5
- package/src/sap/fe/core/messagebundle_de.properties +7 -5
- package/src/sap/fe/core/messagebundle_el.properties +7 -5
- package/src/sap/fe/core/messagebundle_en.properties +7 -5
- package/src/sap/fe/core/messagebundle_en_GB.properties +6 -4
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +6 -4
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +7 -4
- package/src/sap/fe/core/messagebundle_es.properties +7 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -5
- package/src/sap/fe/core/messagebundle_et.properties +7 -5
- package/src/sap/fe/core/messagebundle_fi.properties +7 -5
- package/src/sap/fe/core/messagebundle_fr.properties +7 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/core/messagebundle_hi.properties +7 -5
- package/src/sap/fe/core/messagebundle_hr.properties +7 -5
- package/src/sap/fe/core/messagebundle_hu.properties +7 -5
- package/src/sap/fe/core/messagebundle_id.properties +7 -5
- package/src/sap/fe/core/messagebundle_it.properties +8 -6
- package/src/sap/fe/core/messagebundle_iw.properties +7 -5
- package/src/sap/fe/core/messagebundle_ja.properties +7 -5
- package/src/sap/fe/core/messagebundle_kk.properties +7 -5
- package/src/sap/fe/core/messagebundle_ko.properties +7 -5
- package/src/sap/fe/core/messagebundle_lt.properties +7 -5
- package/src/sap/fe/core/messagebundle_lv.properties +7 -5
- package/src/sap/fe/core/messagebundle_ms.properties +7 -5
- package/src/sap/fe/core/messagebundle_nl.properties +7 -5
- package/src/sap/fe/core/messagebundle_no.properties +7 -5
- package/src/sap/fe/core/messagebundle_pl.properties +7 -5
- package/src/sap/fe/core/messagebundle_pt.properties +7 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -5
- package/src/sap/fe/core/messagebundle_ro.properties +7 -5
- package/src/sap/fe/core/messagebundle_ru.properties +7 -5
- package/src/sap/fe/core/messagebundle_sh.properties +7 -5
- package/src/sap/fe/core/messagebundle_sk.properties +7 -5
- package/src/sap/fe/core/messagebundle_sl.properties +7 -5
- package/src/sap/fe/core/messagebundle_sv.properties +7 -5
- package/src/sap/fe/core/messagebundle_th.properties +7 -5
- package/src/sap/fe/core/messagebundle_tr.properties +7 -5
- package/src/sap/fe/core/messagebundle_uk.properties +7 -5
- package/src/sap/fe/core/messagebundle_vi.properties +7 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +7 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -5
- package/src/sap/fe/core/operationsHelper-dbg.js +1 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -1
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +8 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +8 -1
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +8 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +10 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +16 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -4
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +54 -5
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +52 -6
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +31 -14
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +10 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +5 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +9 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +2 -18
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +8 -8
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +9 -9
- package/src/sap/fe/core/templating/CriticalityFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters-dbg.js +38 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +40 -0
- package/src/sap/fe/core/templating/FieldControlHelper-dbg.js +5 -6
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.ts +13 -11
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +13 -1
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -1
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +7 -7
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +5 -6
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -7
- package/src/sap/fe/core/type/TypeUtil-dbg.js +2 -2
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +0 -243
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +0 -6
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +0 -283
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +0 -121
- package/src/sap/fe/core/controllerextensions/collaboration/UserDetails.fragment.xml +0 -11
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Property } from "@sap-ux/vocabularies-types";
|
|
1
|
+
import type { ActionParameter, Property } from "@sap-ux/vocabularies-types";
|
|
2
2
|
import { isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
3
3
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
4
4
|
import * as SemanticObjectHelper from "sap/fe/core/templating/SemanticObjectHelper";
|
|
@@ -165,7 +165,7 @@ export const getAssociatedTextPropertyPath = function (oProperty: Property): str
|
|
|
165
165
|
* @param property The target property to be checked
|
|
166
166
|
* @returns `true` if it has a value help
|
|
167
167
|
*/
|
|
168
|
-
export const hasValueHelp = function (property: Property): boolean {
|
|
168
|
+
export const hasValueHelp = function (property: Property | ActionParameter): boolean {
|
|
169
169
|
return (
|
|
170
170
|
!!property.annotations?.Common?.ValueList ||
|
|
171
171
|
!!property.annotations?.Common?.ValueListReferences ||
|
|
@@ -180,7 +180,7 @@ export const hasValueHelp = function (property: Property): boolean {
|
|
|
180
180
|
* @param oProperty The target property
|
|
181
181
|
* @returns `true` if it has a value help
|
|
182
182
|
*/
|
|
183
|
-
export const hasValueHelpWithFixedValues = function (oProperty: Property): boolean {
|
|
183
|
+
export const hasValueHelpWithFixedValues = function (oProperty: Property | ActionParameter): boolean {
|
|
184
184
|
return !!oProperty?.annotations?.Common?.ValueListWithFixedValues?.valueOf();
|
|
185
185
|
};
|
|
186
186
|
|
|
@@ -190,7 +190,7 @@ export const hasValueHelpWithFixedValues = function (oProperty: Property): boole
|
|
|
190
190
|
* @param oProperty The target property
|
|
191
191
|
* @returns `true` if it has a value help
|
|
192
192
|
*/
|
|
193
|
-
export const hasValueListForValidation = function (oProperty: Property): boolean {
|
|
193
|
+
export const hasValueListForValidation = function (oProperty: Property | ActionParameter): boolean {
|
|
194
194
|
return oProperty.annotations?.Common?.ValueListForValidation !== undefined;
|
|
195
195
|
};
|
|
196
196
|
|
|
@@ -203,7 +203,7 @@ export const hasTimezone = function (oProperty: Property): boolean {
|
|
|
203
203
|
* @param property The property to be checked
|
|
204
204
|
* @returns `true` if it is a unit
|
|
205
205
|
*/
|
|
206
|
-
export const isUnit = function (property: Property): boolean {
|
|
206
|
+
export const isUnit = function (property: Property | ActionParameter): boolean {
|
|
207
207
|
return !!property.annotations?.Common?.IsUnit?.valueOf();
|
|
208
208
|
};
|
|
209
209
|
|
|
@@ -233,7 +233,7 @@ export const isImageURL = function (property: Property): boolean {
|
|
|
233
233
|
* @param oProperty The property to be checked
|
|
234
234
|
* @returns `true` if it is a currency
|
|
235
235
|
*/
|
|
236
|
-
export const isCurrency = function (oProperty: Property): boolean {
|
|
236
|
+
export const isCurrency = function (oProperty: Property | ActionParameter): boolean {
|
|
237
237
|
return !!oProperty.annotations?.Common?.IsCurrency?.valueOf();
|
|
238
238
|
};
|
|
239
239
|
|
|
@@ -264,7 +264,7 @@ export const hasUnit = function (property: Property): boolean {
|
|
|
264
264
|
* @param property The property to be checked
|
|
265
265
|
* @returns `true` if it is a Guid
|
|
266
266
|
*/
|
|
267
|
-
export const isGuid = function (property: Property): boolean {
|
|
267
|
+
export const isGuid = function (property: Property | ActionParameter): boolean {
|
|
268
268
|
return property.type === "Edm.Guid";
|
|
269
269
|
};
|
|
270
270
|
|
|
@@ -25,7 +25,6 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
25
25
|
var isMultipleNavigationProperty = TypeGuards.isMultipleNavigationProperty;
|
|
26
26
|
var pathInModel = BindingToolkit.pathInModel;
|
|
27
27
|
var or = BindingToolkit.or;
|
|
28
|
-
var notEqual = BindingToolkit.notEqual;
|
|
29
28
|
var not = BindingToolkit.not;
|
|
30
29
|
var isTruthy = BindingToolkit.isTruthy;
|
|
31
30
|
var isConstant = BindingToolkit.isConstant;
|
|
@@ -430,8 +429,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
430
429
|
if (dataModelObjectPath) {
|
|
431
430
|
relativePath = getRelativePaths(dataModelObjectPath);
|
|
432
431
|
}
|
|
433
|
-
let dataFieldRequiredExpression = constant(
|
|
434
|
-
if (oDataFieldConverted !== null) {
|
|
432
|
+
let dataFieldRequiredExpression = constant(false);
|
|
433
|
+
if (oDataFieldConverted !== null && oDataFieldConverted !== undefined) {
|
|
435
434
|
dataFieldRequiredExpression = isRequiredExpression(oDataFieldConverted);
|
|
436
435
|
}
|
|
437
436
|
let requiredPropertyFromInsertRestrictionsExpression = constant(false);
|
|
@@ -442,10 +441,10 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
442
441
|
const requiredExpression = isRequiredExpression(oProperty, relativePath);
|
|
443
442
|
const editMode = forceEditMode || UI.IsEditable;
|
|
444
443
|
if (aRequiredPropertiesFromInsertRestrictions !== null && aRequiredPropertiesFromInsertRestrictions !== void 0 && aRequiredPropertiesFromInsertRestrictions.includes(oPropertyPath.name)) {
|
|
445
|
-
requiredPropertyFromInsertRestrictionsExpression =
|
|
444
|
+
requiredPropertyFromInsertRestrictionsExpression = UI.IsCreateMode;
|
|
446
445
|
}
|
|
447
446
|
if (aRequiredPropertiesFromUpdateRestrictions !== null && aRequiredPropertiesFromUpdateRestrictions !== void 0 && aRequiredPropertiesFromUpdateRestrictions.includes(oPropertyPath.name)) {
|
|
448
|
-
requiredPropertyFromUpdateRestrictionsExpression = and(
|
|
447
|
+
requiredPropertyFromUpdateRestrictionsExpression = and(UI.IsEditable, not(UI.IsCreateMode));
|
|
449
448
|
}
|
|
450
449
|
const returnExpression = or(and(or(requiredExpression, dataFieldRequiredExpression), editMode), requiredPropertyFromInsertRestrictionsExpression, requiredPropertyFromUpdateRestrictionsExpression);
|
|
451
450
|
if (bAsObject) {
|
|
@@ -501,4 +500,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
501
500
|
_exports.getRequiredExpressionForConnectedDataField = getRequiredExpressionForConnectedDataField;
|
|
502
501
|
return _exports;
|
|
503
502
|
}, false);
|
|
504
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwiYkFzT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlmRWxzZSIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwib1Byb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlciIsIm9iamVjdFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiYWN0aXZpdHlFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJrZXlzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXNFeHByZXNzaW9ucyIsImZvckVhY2giLCJrZXkiLCJrZXlFeHByZXNzaW9uIiwibmFtZSIsInB1c2giLCJmb3JtYXRSZXN1bHQiLCJnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsIm1lYXN1cmVSZWFkT25seSIsImFzT2JqZWN0IiwiZGF0YUZpZWxkQ29udmVydGVkIiwiJFR5cGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJwcm9wZXJ0eSIsImFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwicmVzdWx0RXhwcmVzc2lvbiIsIkVkaXRhYmxlIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJFZGl0YWJsZVJlYWRPbmx5IiwiRWRpdGFibGVEaXNwbGF5IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiUmVhZE9ubHkiLCJEaXNhYmxlZCIsImhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0Iiwib1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJjdXJyZW5jeSIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1lYXN1cmUiLCJVbml0IiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiaWZVbml0RWRpdGFibGUiLCJzRWRpdGFibGVWYWx1ZSIsInNOb25FZGl0YWJsZVZhbHVlIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJpc1Byb3BlcnR5Iiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIkNvbW1vbiIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidG9TdHJpbmciLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsIm5vdEVxdWFsIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1ZhbHVlSGVscCxcblx0aXNDb21wdXRlZCxcblx0aXNJbW11dGFibGUsXG5cdGlzS2V5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiBhbnlbXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlLFxuXHRcdGlzRWRpdGFibGUsXG5cdFx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnNcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBkYXRlRm9ybWF0T3B0aW9ucyA9IHtcblx0c2hvd0RhdGU6IHN0cmluZztcblx0c2hvd1RpbWU6IHN0cmluZztcblx0c2hvd1RpbWV6b25lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uczogYm9vbGVhbiA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihcblx0XHRcdGFuZChub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSxcblx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpXG5cdFx0KSxcblx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRpc0VkaXRhYmxlXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdHRlcjogYW55XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhY3Rpdml0eUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChgL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7b2JqZWN0UGF0aH1gLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBrZXlzID0gZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdID0gW107XG5cdGtleXM/LmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGNvbnN0IGtleUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChrZXkubmFtZSk7XG5cdFx0a2V5c0V4cHJlc3Npb25zLnB1c2goa2V5RXhwcmVzc2lvbik7XG5cdH0pO1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFthY3Rpdml0eUV4cHJlc3Npb24sIC4uLmtleXNFeHByZXNzaW9uc10sIGZvcm1hdHRlcik7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RW5hYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgdHJ1ZSwgb0RhdGFNb2RlbE9iamVjdFBhdGgpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVuYWJsZWRcIiBCb29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odHJ1ZSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgZmFsc2UsIHRydWUpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdG1lYXN1cmVSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuXHRhc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSA9IG51bGwsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoIXByb3BlcnR5UGF0aCB8fCB0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiIHx8IGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSA/IHByb3BlcnR5UGF0aC4kdGFyZ2V0IDogcHJvcGVydHlQYXRoO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5LFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHQvLyB3ZSBnZXQgdGhlIGVkaXRhYmxlIEV4cHJlc3Npb24gd2l0aG91dCBjb25zaWRlcmluZyB1cGRhdGUgUmVzdHJpY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlLCBmYWxzZSk7XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSBjb25zdGFudChFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSksXG5cdFx0XHRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksIEVkaXRNb2RlLlJlYWRPbmx5LCBFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBFZGl0TW9kZS5EaXNhYmxlZCwgRWRpdE1vZGUuRGlzcGxheSlcblx0XHQpLFxuXHRcdEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihpc1RydXRoeShnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24obWVhc3VyZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgaWZVbml0RWRpdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c0VkaXRhYmxlVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nLFxuXHRzTm9uRWRpdGFibGVWYWx1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmdcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc05vbkVkaXRhYmxlVmFsdWUpO1xuXHR9XG5cdGNvbnN0IGlzVW5pdFJlYWRPbmx5ID0gaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5KTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKFxuXHRcdG9yKCFpc0NvbnN0YW50KGlzVW5pdFJlYWRPbmx5KSwgbm90KGlzVW5pdFJlYWRPbmx5KSksXG5cdFx0bm90KGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSksXG5cdFx0bm90KGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSkpXG5cdCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZWRpdGFibGVFeHByZXNzaW9uLCBzRWRpdGFibGVWYWx1ZSwgc05vbkVkaXRhYmxlVmFsdWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c1RhcmdldERpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIGhhc1ZhbHVlSGVscChvUHJvcGVydHkpXG5cdFx0PyBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpXG5cdFx0OiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRWRpdGFibGVcIiksIFwiVmFsdWVcIiwgc1RhcmdldERpc3BsYXlNb2RlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdGNvbnN0IG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1sob1Byb3BlcnR5IGFzIFByb3BlcnR5KT8udHlwZV0gfHwgKGRhdGFUeXBlID8gRURNX1RZUEVfTUFQUElOR1tkYXRhVHlwZV0gOiB1bmRlZmluZWQpO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IGNvbmZpZ1R5cGUgPSB7XG5cdFx0dHlwZTogb1RhcmdldE1hcHBpbmcudHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSkge1xuXHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cyA9IHtcblx0XHRcdHNjYWxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFNjYWxlID8gb1Byb3BlcnR5LnNjYWxlIDogdW5kZWZpbmVkLFxuXHRcdFx0cHJlY2lzaW9uOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiA/IG9Qcm9wZXJ0eS5wcmVjaXNpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRtYXhMZW5ndGg6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoID8gb1Byb3BlcnR5Lm1heExlbmd0aCA6IHVuZGVmaW5lZCxcblx0XHRcdG51bGxhYmxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE51bGxhYmxlID8gb1Byb3BlcnR5Lm51bGxhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0bWluaW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4aW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0aXNEaWdpdFNlcXVlbmNlOlxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0VjQ6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kVjQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiBhbnlcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdGlmIChmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlKTtcblx0fVxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyBhbnkpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPSAodW5pdCBhcyBhbnkpLiR0YXJnZXRcblx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdCh1bml0IGFzIGFueSkuJHRhcmdldCxcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAodW5pdD8udG9TdHJpbmcoKSA9PT0gXCIlXCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIGFueSk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQgIClcblx0XHQ6IChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxQYXRoKVxuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB0cnVlKTtcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwge1xuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogdHJ1ZSxcblx0XHRlbXB0eVN0cmluZzogXCJcIixcblx0XHRzaG93TnVtYmVyOiBmYWxzZVxuXHR9KTtcbn07XG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGRhdGVGb3JtYXRPcHRpb25zPzogZGF0ZUZvcm1hdE9wdGlvbnNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB0aW1lem9uZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPSAodGltZXpvbmUgYXMgYW55KS4kdGFyZ2V0XG5cdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHQodGltZXpvbmUgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dEYXRlKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93RGF0ZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZXpvbmUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5OiBzdHJpbmcgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQ6IHN0cmluZyA9IFwiQmVnaW5cIlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgbWV0YW1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgVGhlIENvbnZlcnRlckNvbnRleHQgcmVwcmVzZW50aW5nIHRoYXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGggfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRmb3JjZUVkaXRNb2RlOiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0Zm9yY2VFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczogYW55ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHR9XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBlZGl0TW9kZSA9IGZvcmNlRWRpdE1vZGUgfHwgVUkuSXNFZGl0YWJsZTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPy5pbmNsdWRlcygob1Byb3BlcnR5UGF0aCBhcyBhbnkpLm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKGNvbnN0YW50KHRydWUpLCBVSS5Jc0NyZWF0ZU1vZGUpO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMoKG9Qcm9wZXJ0eVBhdGggYXMgYW55KS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChjb25zdGFudCh0cnVlKSwgbm90RXF1YWwoVUkuSXNDcmVhdGVNb2RlLCB0cnVlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGEgPSBkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGE7XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XVtcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdLmluZGV4T2YoXCJEYXRhRmllbGRcIikgPiAtMSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGVcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0XHRpc1JlcXVpcmVkRXhwcmVzc2lvbnMucHVzaChnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZCwgZmFsc2UpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoLi4uKGlzUmVxdWlyZWRFeHByZXNzaW9ucyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZGTyxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsb0JBQXlDLEVBQWU7SUFDL0YsT0FBT0Msb0JBQW9CLENBQUNGLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNFLFlBQVksRUFBRUYsb0JBQW9CLENBQUM7RUFDcEcsQ0FBQztFQUFDO0VBQ0ssTUFBTUcsNkJBQTZCLEdBQUcsVUFDNUNDLGFBQXVDLEVBS0g7SUFBQSxJQUpwQ0MsbUJBQXdCLHVFQUFHLElBQUk7SUFBQSxJQUMvQkwsb0JBQXlDO0lBQUEsSUFDekNNLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsT0FBT0MscUJBQXFCLENBQzNCTixhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkwsb0JBQW9CLEVBQ3BCLElBQUksRUFDSk0sVUFBVSxFQUNWRywwQkFBMEIsQ0FDMUI7RUFDRixDQUFDO0VBQUM7RUFRRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUMscUJBQXFCLEdBQUcsVUFDcENOLGFBQXVDLEVBTWdDO0lBQUEsSUFMdkVDLG1CQUF3Qix1RUFBRyxJQUFJO0lBQUEsSUFDL0JMLG9CQUF5QztJQUFBLElBQ3pDVyxTQUFrQix1RUFBRyxLQUFLO0lBQUEsSUFDMUJMLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsSUFBSSxDQUFDTCxhQUFhLElB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
|
|
503
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwiYkFzT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlmRWxzZSIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwib1Byb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlciIsIm9iamVjdFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiYWN0aXZpdHlFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJrZXlzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXNFeHByZXNzaW9ucyIsImZvckVhY2giLCJrZXkiLCJrZXlFeHByZXNzaW9uIiwibmFtZSIsInB1c2giLCJmb3JtYXRSZXN1bHQiLCJnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsIm1lYXN1cmVSZWFkT25seSIsImFzT2JqZWN0IiwiZGF0YUZpZWxkQ29udmVydGVkIiwiJFR5cGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJwcm9wZXJ0eSIsImFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwicmVzdWx0RXhwcmVzc2lvbiIsIkVkaXRhYmxlIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJFZGl0YWJsZVJlYWRPbmx5IiwiRWRpdGFibGVEaXNwbGF5IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiUmVhZE9ubHkiLCJEaXNhYmxlZCIsImhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0Iiwib1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJjdXJyZW5jeSIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1lYXN1cmUiLCJVbml0IiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiaWZVbml0RWRpdGFibGUiLCJzRWRpdGFibGVWYWx1ZSIsInNOb25FZGl0YWJsZVZhbHVlIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJpc1Byb3BlcnR5Iiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIkNvbW1vbiIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidG9TdHJpbmciLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsInJldHVybkV4cHJlc3Npb24iLCJnZXRSZXF1aXJlZEV4cHJlc3Npb25Gb3JDb25uZWN0ZWREYXRhRmllbGQiLCJkYXRhRmllbGRPYmplY3RQYXRoIiwiZGF0YSIsIkRhdGEiLCJPYmplY3QiLCJkYXRhRmllbGRzIiwiaXNSZXF1aXJlZEV4cHJlc3Npb25zIiwiZGF0YUZpZWxkIiwiVmFsdWUiLCJUYXJnZXQiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJRm9ybWF0dGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgc2luZ2xldG9uUGF0aFZpc2l0b3IsIFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCwgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YWRkVHlwZUluZm9ybWF0aW9uLFxuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0RURNX1RZUEVfTUFQUElORyxcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Zm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbixcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzVHJ1dGh5LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1ZhbHVlSGVscCxcblx0aXNDb21wdXRlZCxcblx0aXNJbW11dGFibGUsXG5cdGlzS2V5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiBhbnlbXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlLFxuXHRcdGlzRWRpdGFibGUsXG5cdFx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnNcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBkYXRlRm9ybWF0T3B0aW9ucyA9IHtcblx0c2hvd0RhdGU6IHN0cmluZztcblx0c2hvd1RpbWU6IHN0cmluZztcblx0c2hvd1RpbWV6b25lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uczogYm9vbGVhbiA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihcblx0XHRcdGFuZChub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSxcblx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpXG5cdFx0KSxcblx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRpc0VkaXRhYmxlXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdHRlcjogYW55XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhY3Rpdml0eUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChgL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7b2JqZWN0UGF0aH1gLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBrZXlzID0gZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdID0gW107XG5cdGtleXM/LmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGNvbnN0IGtleUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChrZXkubmFtZSk7XG5cdFx0a2V5c0V4cHJlc3Npb25zLnB1c2goa2V5RXhwcmVzc2lvbik7XG5cdH0pO1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFthY3Rpdml0eUV4cHJlc3Npb24sIC4uLmtleXNFeHByZXNzaW9uc10sIGZvcm1hdHRlcik7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RW5hYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgdHJ1ZSwgb0RhdGFNb2RlbE9iamVjdFBhdGgpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVuYWJsZWRcIiBCb29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odHJ1ZSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgZmFsc2UsIHRydWUpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdG1lYXN1cmVSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuXHRhc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSA9IG51bGwsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoIXByb3BlcnR5UGF0aCB8fCB0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiIHx8IGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSA/IHByb3BlcnR5UGF0aC4kdGFyZ2V0IDogcHJvcGVydHlQYXRoO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5LFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHQvLyB3ZSBnZXQgdGhlIGVkaXRhYmxlIEV4cHJlc3Npb24gd2l0aG91dCBjb25zaWRlcmluZyB1cGRhdGUgUmVzdHJpY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlLCBmYWxzZSk7XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSBjb25zdGFudChFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSksXG5cdFx0XHRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksIEVkaXRNb2RlLlJlYWRPbmx5LCBFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBFZGl0TW9kZS5EaXNhYmxlZCwgRWRpdE1vZGUuRGlzcGxheSlcblx0XHQpLFxuXHRcdEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihpc1RydXRoeShnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24obWVhc3VyZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgaWZVbml0RWRpdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c0VkaXRhYmxlVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHwgYm9vbGVhbixcblx0c05vbkVkaXRhYmxlVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHwgYm9vbGVhblxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KG9Qcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShvUHJvcGVydHkpO1xuXHRpZiAoIXVuaXRQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihzTm9uRWRpdGFibGVWYWx1ZSk7XG5cdH1cblx0Y29uc3QgaXNVbml0UmVhZE9ubHkgPSBpc1JlYWRPbmx5RXhwcmVzc2lvbih1bml0UHJvcGVydHkpO1xuXHRjb25zdCBlZGl0YWJsZUV4cHJlc3Npb24gPSBhbmQoXG5cdFx0b3IoIWlzQ29uc3RhbnQoaXNVbml0UmVhZE9ubHkpLCBub3QoaXNVbml0UmVhZE9ubHkpKSxcblx0XHRub3QoaXNDb21wdXRlZCh1bml0UHJvcGVydHkpKSxcblx0XHRub3QoaXNJbW11dGFibGUodW5pdFByb3BlcnR5KSlcblx0KTtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlZGl0YWJsZUV4cHJlc3Npb24sIHNFZGl0YWJsZVZhbHVlLCBzTm9uRWRpdGFibGVWYWx1ZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpZWxkRGlzcGxheSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRzVGFyZ2V0RGlzcGxheU1vZGU6IHN0cmluZyxcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblxuXHRyZXR1cm4gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSlcblx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKHNUYXJnZXREaXNwbGF5TW9kZSlcblx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlQ29uZmlnID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50PzogYm9vbGVhbixcblx0Zm9ybWF0T3B0aW9ucz86IGFueVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKHVuaXQ/LnRvU3RyaW5nKCkgPT09IFwiJVwiKSB7XG5cdFx0aWYgKGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIGFueSk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0ICApXG5cdFx0OiAoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTtcblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdHJldHVybiBjb25zdGFudChcIiVcIik7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgYW55KTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKHVuaXQgYXMgYW55KS4kdGFyZ2V0XG5cdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHQodW5pdCBhcyBhbnkpLiR0YXJnZXQsXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChcblx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHRydWUpO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCB7XG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdGVtcHR5U3RyaW5nOiBcIlwiLFxuXHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdH0pO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZGF0ZUZvcm1hdE9wdGlvbnM/OiBkYXRlRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh0aW1lem9uZSBhcyBhbnkpLiR0YXJnZXRcblx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdCh0aW1lem9uZSBhcyBhbnkpLiR0YXJnZXQsXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0ICApXG5cdFx0OiAoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cdGxldCBmb3JtYXRPcHRpb25zID0ge307XG5cdGlmIChoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcykge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlczogZmFsc2Vcblx0XHR9O1xuXHR9XG5cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGRhdGVGb3JtYXRPcHRpb25zLnNob3dUaW1lID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWUgfSB9O1xuXHR9XG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd0RhdGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dUaW1lem9uZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWV6b25lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZSB9IH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXk6IHN0cmluZyA9IFwiQmVnaW5cIixcblx0c0FsaWduRWRpdDogc3RyaW5nID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIChcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKGlzTXVsdGlwbGVOYXZpZ2F0aW9uUHJvcGVydHkob05hdikpIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBhbnksXG5cdGZvcmNlRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRmb3JjZUVkaXRNb2RlOiBib29sZWFuID0gZmFsc2UsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnkgPSB7fSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCAmJiBvRGF0YUZpZWxkQ29udmVydGVkICE9PSB1bmRlZmluZWQpIHtcblx0XHRkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24gPSBpc1JlcXVpcmVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKTtcblx0fVxuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMoKG9Qcm9wZXJ0eVBhdGggYXMgYW55KS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IFVJLklzQ3JlYXRlTW9kZTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKChvUHJvcGVydHlQYXRoIGFzIGFueSkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBhbmQoVUkuSXNFZGl0YWJsZSwgbm90KFVJLklzQ3JlYXRlTW9kZSkpO1xuXHR9XG5cdGNvbnN0IHJldHVybkV4cHJlc3Npb24gPSBvcihcblx0XHRhbmQob3IocmVxdWlyZWRFeHByZXNzaW9uLCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24pLCBlZGl0TW9kZSksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvblxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIHJldHVybkV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHJldHVybkV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhID0gZGF0YUZpZWxkT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py4kdGFyZ2V0Py5EYXRhO1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV1bXCIkVHlwZVwiXSAmJiBkYXRhW2tleV1bXCIkVHlwZVwiXS5pbmRleE9mKFwiRGF0YUZpZWxkXCIpID4gLTEpIHtcblx0XHRcdGRhdGFGaWVsZHMucHVzaChkYXRhW2tleV0pO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGRhdGFGaWVsZCBvZiBkYXRhRmllbGRzKSB7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTRGTyxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsb0JBQXlDLEVBQWU7SUFDL0YsT0FBT0Msb0JBQW9CLENBQUNGLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNFLFlBQVksRUFBRUYsb0JBQW9CLENBQUM7RUFDcEcsQ0FBQztFQUFDO0VBQ0ssTUFBTUcsNkJBQTZCLEdBQUcsVUFDNUNDLGFBQXVDLEVBS0g7SUFBQSxJQUpwQ0MsbUJBQXdCLHVFQUFHLElBQUk7SUFBQSxJQUMvQkwsb0JBQXlDO0lBQUEsSUFDekNNLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsT0FBT0MscUJBQXFCLENBQzNCTixhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkwsb0JBQW9CLEVBQ3BCLElBQUksRUFDSk0sVUFBVSxFQUNWRywwQkFBMEIsQ0FDMUI7RUFDRixDQUFDO0VBQUM7RUFRRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUMscUJBQXFCLEdBQUcsVUFDcENOLGFBQXVDLEVBTWdDO0lBQUEsSUFMdkVDLG1CQUF3Qix1RUFBRyxJQUFJO0lBQUEsSUFDL0JMLG9CQUF5QztJQUFBLElBQ3pDVyxTQUFrQix1RUFBRyxLQUFLO0lBQUEsSUFDMUJMLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsSUFBSSxDQUFDTCxhQUFhLElB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
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper","sap/fe/core/converters/MetaModelConverter","sap/fe/core/formatters/ValueFormatter","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/TypeGuards","sap/fe/core/templating/DataModelPathHelper","sap/fe/core/templating/DisplayModeFormatter","sap/fe/core/templating/FieldControlHelper","sap/fe/core/templating/PropertyHelper","sap/ui/mdc/enum/EditMode"],function(e,t,n,i,o,a,r,l,s,d){"use strict";var u={};var c=s.isKey;var v=s.isImmutable;var f=s.isComputed;var p=s.hasValueHelp;var g=s.getAssociatedUnitProperty;var m=s.getAssociatedCurrencyProperty;var y=l.isRequiredExpression;var h=l.isReadOnlyExpression;var b=l.isNonEditableExpression;var E=l.isDisabledExpression;var x=a.isPathUpdatable;var D=a.getTargetObjectPath;var T=a.getRelativePaths;var I=a.getContextRelativeTargetObjectPath;var $=o.isProperty;var O=o.isPathAnnotationExpression;var M=o.isMultipleNavigationProperty;var P=i.pathInModel;var C=i.or;var U=i.notEqual;var V=i.not;var F=i.isTruthy;var j=i.isConstant;var S=i.ifElse;var q=i.getExpressionFromAnnotation;var w=i.formatWithTypeInformation;var A=i.formatResult;var N=i.equal;var R=i.EDM_TYPE_MAPPING;var B=i.constant;var W=i.compileExpression;var z=i.and;var k=i.addTypeInformation;var H=t.getInvolvedDataModelObjects;var L=t.convertMetaModelContext;var K=e.UI;var G=e.singletonPathVisitor;const _=function(e){return r.getDisplayMode(e.targetObject,e)};u.getDisplayMode=_;const Y=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:K.IsEditable;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;return J(e,t,n,true,i,o)};u.getEditableExpressionAsObject=Y;const J=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:K.IsEditable;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;if(!e||typeof e==="string"){return W(false)}let r=B(true);if(t!==null){r=S(b(t),false,o)}const l=O(e)?e.$target:e;const s=T(n);const d=x(n,{propertyPath:e,pathVisitor:(e,t)=>G(e,n.convertedTypes,t)});if(W(d)==="false"&&a){return i?d:"false"}const u=S(C(z(V(d),a),f(l),c(l),v(l),b(l,s)),S(C(f(l),b(l,s)),false,K.IsTransientBinding),o);if(i){return z(u,r)}return W(z(u,r))};u.getEditableExpression=J;const Q=function(e,t){var n;const i=D(e);const o=P(`/collaboration/activities${i}`,"internal");const a=e===null||e===void 0?void 0:(n=e.targetEntityType)===null||n===void 0?void 0:n.keys;const r=[];a===null||a===void 0?void 0:a.forEach(function(e){const t=P(e.name);r.push(t)});return A([o,...r],t)};u.getCollaborationExpression=Q;const X=function(e,t,n){return Z(e,t,true,n)};u.getEnabledExpressionAsObject=X;const Z=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3?arguments[3]:undefined;if(!e||typeof e==="string"){return W(true)}let o;if(i){o=T(i)}let a=B(true);if(t!==null){a=S(E(t),false,true)}const r=O(e)?e.$target:e;const l=S(E(r,o),false,true);if(n){return z(l,a)}return W(z(l,a))};u.getEnabledExpression=Z;const ee=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:K.IsEditable;if(!e||typeof e==="string"||(o===null||o===void 0?void 0:o.$Type)==="com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath"){return d.Display}const r=O(e)?e.$target:e;const l=T(t);const s=x(t,{propertyPath:r,pathVisitor:(e,n)=>G(e,t.convertedTypes,n)});const u=Y(e,o,t,a,false);const c=X(e,o,t);const p=m(r);const y=p||g(r);let b=B(d.Editable);if(y){const e=h(y,l);b=S(C(e,f(y),z(v(y),V(K.IsTransientBinding)),n),S(!j(e)&&e,d.EditableReadOnly,d.EditableDisplay),d.Editable)}const E=C(h(r,l),h(o));const D=S(C(s,K.IsTransientBinding),S(c,S(u,b,S(z(!j(E)&&E,a),d.ReadOnly,d.Display)),S(a,d.Disabled,d.Display)),d.Display);if(i){return D}return W(D)};u.getEditMode=ee;const te=function(e){var t,n,i,o;const a=e.targetObject;const r=(t=a.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.ISOCurrency;const l=r?r:(i=a.annotations)===null||i===void 0?void 0:(o=i.Measures)===null||o===void 0?void 0:o.Unit;if(l){return W(C(F(q(l)),V(K.IsTotal)))}else{return W(B(true))}};u.hasValidAnalyticalCurrencyOrUnit=te;const ne=function(e,t,n){const i=O(e)&&e.$target||e;const o=m(i)||g(i);if(!o){return W(n)}const a=h(o);const r=z(C(!j(a),V(a)),V(f(o)),V(v(o)));return W(S(r,t,n))};u.ifUnitEditable=ne;const ie=function(e,t,n){const i=O(e)&&e.$target||e;return p(i)?W(t):W(S(N(n,"Editable"),"Value",t))};u.getFieldDisplay=ie;const oe=function(e,t){var n,i,o,a;const r=R[e===null||e===void 0?void 0:e.type]||(t?R[t]:undefined);const l={type:r.type,constraints:{},formatOptions:{}};if($(e)){var s,d,u,c,v,f,p,g,m,y,h,b,E,x,D,T,I,O;l.constraints={scale:(s=r.constraints)!==null&&s!==void 0&&s.$Scale?e.scale:undefined,precision:(d=r.constraints)!==null&&d!==void 0&&d.$Precision?e.precision:undefined,maxLength:(u=r.constraints)!==null&&u!==void 0&&u.$MaxLength?e.maxLength:undefined,nullable:(c=r.constraints)!==null&&c!==void 0&&c.$Nullable?e.nullable:undefined,minimum:(v=r.constraints)!==null&&v!==void 0&&v["@Org.OData.Validation.V1.Minimum/$Decimal"]&&!isNaN((f=e.annotations)===null||f===void 0?void 0:(p=f.Validation)===null||p===void 0?void 0:p.Minimum)?`${(g=e.annotations)===null||g===void 0?void 0:(m=g.Validation)===null||m===void 0?void 0:m.Minimum}`:undefined,maximum:(y=r.constraints)!==null&&y!==void 0&&y["@Org.OData.Validation.V1.Maximum/$Decimal"]&&!isNaN((h=e.annotations)===null||h===void 0?void 0:(b=h.Validation)===null||b===void 0?void 0:b.Maximum)?`${(E=e.annotations)===null||E===void 0?void 0:(x=E.Validation)===null||x===void 0?void 0:x.Maximum}`:undefined,isDigitSequence:l.type==="sap.ui.model.odata.type.String"&&(D=r.constraints)!==null&&D!==void 0&&D["@com.sap.vocabularies.Common.v1.IsDigitSequence"]&&(T=e.annotations)!==null&&T!==void 0&&(I=T.Common)!==null&&I!==void 0&&I.IsDigitSequence?true:undefined,V4:(O=r.constraints)!==null&&O!==void 0&&O.$V4?true:undefined}}l.formatOptions={parseAsString:(l===null||l===void 0?void 0:(n=l.type)===null||n===void 0?void 0:n.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(i=l.type)===null||i===void 0?void 0:i.indexOf("sap.ui.model.odata.type.Double"))===0?false:undefined,emptyString:(l===null||l===void 0?void 0:(o=l.type)===null||o===void 0?void 0:o.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(a=l.type)===null||a===void 0?void 0:a.indexOf("sap.ui.model.odata.type.Double"))===0?"":undefined,parseKeepsEmptyString:l.type==="sap.ui.model.odata.type.String"?true:undefined};return l};u.getTypeConfig=oe;const ae=function(e,t,i,o){var a,r,l,s,d;const u=e.targetObject;let c=(a=u.annotations)===null||a===void 0?void 0:(r=a.Measures)===null||r===void 0?void 0:r.Unit;const v=T(e);t=w(u,t);if(((l=c)===null||l===void 0?void 0:l.toString())==="%"){if((o===null||o===void 0?void 0:o.showMeasure)===false){return t}return A([t],n.formatWithPercentage)}const f=c?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";c=c?c:(s=u.annotations)===null||s===void 0?void 0:(d=s.Measures)===null||d===void 0?void 0:d.ISOCurrency;const p=c.$target?w(c.$target,q(c,v),i):q(c,v);return k([t,p],f,undefined,o)};u.getBindingWithUnitOrCurrency=ae;const re=function(e){var t,n,i,o,a;const r=e.targetObject;let l=(t=r.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.Unit;if(((i=l)===null||i===void 0?void 0:i.toString())==="%"){return B("%")}const s=T(e);const d=l?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";l=l?l:(o=r.annotations)===null||o===void 0?void 0:(a=o.Measures)===null||a===void 0?void 0:a.ISOCurrency;const u=l.$target?w(l.$target,q(l,s)):q(l,s);let c=P(I(e));c=w(r,c,true);return k([c,u],d,undefined,{parseKeepsEmptyString:true,emptyString:"",showNumber:false})};u.getBindingForUnitOrCurrency=re;const le=function(e,t){var n,i;let o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let r=arguments.length>4?arguments[4]:undefined;const l=e.targetObject;const s=(n=l.annotations)===null||n===void 0?void 0:(i=n.Common)===null||i===void 0?void 0:i.Timezone;const d=T(e);t=w(l,t);const u="sap.fe.core.type.DateTimeWithTimezone";const c=s.$target?w(s.$target,q(s,d),o):q(s,d);let v={};if(a){v={showTimezoneForEmptyValues:false}}if(r!==null&&r!==void 0&&r.showTime){v={...v,...{showTime:r.showTime==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showDate){v={...v,...{showDate:r.showDate==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showTimezone){v={...v,...{showTimezone:r.showTimezone==="false"?false:true}}}return k([t,c],u,undefined,v)};u.getBindingWithTimezone=le;const se=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"Begin";let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"Begin";return W(S(N(e,"Display"),t,n))};u.getAlignmentExpression=se;const de=function(e,t){if(t&&t.context){return L(t.context)}return null};de.requiresIContext=true;u.getConverterContext=de;const ue=function(e,t){if(t&&t.context){return H(t.context)}return null};ue.requiresIContext=true;u.getDataModelObjectPath=ue;const ce=function(e){var t;if((t=e.navigationProperties)!==null&&t!==void 0&&t.length){const t=(e===null||e===void 0?void 0:e.navigationProperties.findIndex(t=>{if(M(t)){var n,i;if((n=e.contextLocation)!==null&&n!==void 0&&(i=n.navigationProperties)!==null&&i!==void 0&&i.length){var o;return((o=e.contextLocation)===null||o===void 0?void 0:o.navigationProperties.findIndex(e=>e.name===t.name))===-1}return true}return false}))>-1;if(t){return true}}return false};u.isMultiValueField=ce;const ve=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return fe(e,t,n,true)};u.getRequiredExpressionAsObject=ve;const fe=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};let a=arguments.length>5?arguments[5]:undefined;const r=o.requiredPropertiesFromInsertRestrictions;const l=o.requiredPropertiesFromUpdateRestrictions;if(!e||typeof e==="string"){if(i){return B(false)}return W(B(false))}let s;if(a){s=T(a)}let d=B(true);if(t!==null){d=y(t)}let u=B(false);let c=B(false);const v=O(e)&&e.$target||e;const f=y(v,s);const p=n||K.IsEditable;if(r!==null&&r!==void 0&&r.includes(e.name)){u=z(B(true),K.IsCreateMode)}if(l!==null&&l!==void 0&&l.includes(e.name)){c=z(B(true),U(K.IsCreateMode,true))}const g=C(z(C(f,d),p),u,c);if(i){return g}return W(g)};u.getRequiredExpression=fe;const pe=function(e){var t,n;const i=e===null||e===void 0?void 0:(t=e.targetObject)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.Data;const o=Object.keys(i);const a=[];let r;const l=[];for(const e of o){if(i[e]["$Type"]&&i[e]["$Type"].indexOf("DataField")>-1){a.push(i[e])}}for(const e of a){switch(e.$Type){case"com.sap.vocabularies.UI.v1.DataField":case"com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":case"com.sap.vocabularies.UI.v1.DataFieldWithUrl":case"com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":case"com.sap.vocabularies.UI.v1.DataFieldWithAction":if(typeof e.Value==="object"){r=e.Value.$target}break;case"com.sap.vocabularies.UI.v1.DataFieldForAnnotation":if(e.Target.$target){if(e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataField"||e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataPointType"){if(typeof e.Target.$target.Value==="object"){r=e.Target.$target.Value.$target}}else{if(typeof e.Target==="object"){r=e.Target.$target}break}}break}l.push(ve(r,e,false))}return W(C(...l))};u.getRequiredExpressionForConnectedDataField=pe;return u},false);
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper","sap/fe/core/converters/MetaModelConverter","sap/fe/core/formatters/ValueFormatter","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/TypeGuards","sap/fe/core/templating/DataModelPathHelper","sap/fe/core/templating/DisplayModeFormatter","sap/fe/core/templating/FieldControlHelper","sap/fe/core/templating/PropertyHelper","sap/ui/mdc/enum/EditMode"],function(e,t,n,i,o,a,r,l,s,d){"use strict";var u={};var c=s.isKey;var v=s.isImmutable;var f=s.isComputed;var p=s.hasValueHelp;var g=s.getAssociatedUnitProperty;var m=s.getAssociatedCurrencyProperty;var y=l.isRequiredExpression;var h=l.isReadOnlyExpression;var b=l.isNonEditableExpression;var E=l.isDisabledExpression;var x=a.isPathUpdatable;var D=a.getTargetObjectPath;var T=a.getRelativePaths;var I=a.getContextRelativeTargetObjectPath;var $=o.isProperty;var O=o.isPathAnnotationExpression;var M=o.isMultipleNavigationProperty;var P=i.pathInModel;var C=i.or;var U=i.not;var V=i.isTruthy;var F=i.isConstant;var j=i.ifElse;var S=i.getExpressionFromAnnotation;var w=i.formatWithTypeInformation;var A=i.formatResult;var q=i.equal;var N=i.EDM_TYPE_MAPPING;var R=i.constant;var B=i.compileExpression;var W=i.and;var z=i.addTypeInformation;var k=t.getInvolvedDataModelObjects;var H=t.convertMetaModelContext;var L=e.UI;var K=e.singletonPathVisitor;const G=function(e){return r.getDisplayMode(e.targetObject,e)};u.getDisplayMode=G;const _=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:L.IsEditable;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;return Y(e,t,n,true,i,o)};u.getEditableExpressionAsObject=_;const Y=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:L.IsEditable;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;if(!e||typeof e==="string"){return B(false)}let r=R(true);if(t!==null){r=j(b(t),false,o)}const l=O(e)?e.$target:e;const s=T(n);const d=x(n,{propertyPath:e,pathVisitor:(e,t)=>K(e,n.convertedTypes,t)});if(B(d)==="false"&&a){return i?d:"false"}const u=j(C(W(U(d),a),f(l),c(l),v(l),b(l,s)),j(C(f(l),b(l,s)),false,L.IsTransientBinding),o);if(i){return W(u,r)}return B(W(u,r))};u.getEditableExpression=Y;const J=function(e,t){var n;const i=D(e);const o=P(`/collaboration/activities${i}`,"internal");const a=e===null||e===void 0?void 0:(n=e.targetEntityType)===null||n===void 0?void 0:n.keys;const r=[];a===null||a===void 0?void 0:a.forEach(function(e){const t=P(e.name);r.push(t)});return A([o,...r],t)};u.getCollaborationExpression=J;const Q=function(e,t,n){return X(e,t,true,n)};u.getEnabledExpressionAsObject=Q;const X=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3?arguments[3]:undefined;if(!e||typeof e==="string"){return B(true)}let o;if(i){o=T(i)}let a=R(true);if(t!==null){a=j(E(t),false,true)}const r=O(e)?e.$target:e;const l=j(E(r,o),false,true);if(n){return W(l,a)}return B(W(l,a))};u.getEnabledExpression=X;const Z=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:L.IsEditable;if(!e||typeof e==="string"||(o===null||o===void 0?void 0:o.$Type)==="com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath"){return d.Display}const r=O(e)?e.$target:e;const l=T(t);const s=x(t,{propertyPath:r,pathVisitor:(e,n)=>K(e,t.convertedTypes,n)});const u=_(e,o,t,a,false);const c=Q(e,o,t);const p=m(r);const y=p||g(r);let b=R(d.Editable);if(y){const e=h(y,l);b=j(C(e,f(y),W(v(y),U(L.IsTransientBinding)),n),j(!F(e)&&e,d.EditableReadOnly,d.EditableDisplay),d.Editable)}const E=C(h(r,l),h(o));const D=j(C(s,L.IsTransientBinding),j(c,j(u,b,j(W(!F(E)&&E,a),d.ReadOnly,d.Display)),j(a,d.Disabled,d.Display)),d.Display);if(i){return D}return B(D)};u.getEditMode=Z;const ee=function(e){var t,n,i,o;const a=e.targetObject;const r=(t=a.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.ISOCurrency;const l=r?r:(i=a.annotations)===null||i===void 0?void 0:(o=i.Measures)===null||o===void 0?void 0:o.Unit;if(l){return B(C(V(S(l)),U(L.IsTotal)))}else{return B(R(true))}};u.hasValidAnalyticalCurrencyOrUnit=ee;const te=function(e,t,n){const i=O(e)&&e.$target||e;const o=m(i)||g(i);if(!o){return B(n)}const a=h(o);const r=W(C(!F(a),U(a)),U(f(o)),U(v(o)));return B(j(r,t,n))};u.ifUnitEditable=te;const ne=function(e,t,n){const i=O(e)&&e.$target||e;return p(i)?B(t):B(j(q(n,"Editable"),"Value",t))};u.getFieldDisplay=ne;const ie=function(e,t){var n,i,o,a;const r=N[e===null||e===void 0?void 0:e.type]||(t?N[t]:undefined);const l={type:r.type,constraints:{},formatOptions:{}};if($(e)){var s,d,u,c,v,f,p,g,m,y,h,b,E,x,D,T,I,O;l.constraints={scale:(s=r.constraints)!==null&&s!==void 0&&s.$Scale?e.scale:undefined,precision:(d=r.constraints)!==null&&d!==void 0&&d.$Precision?e.precision:undefined,maxLength:(u=r.constraints)!==null&&u!==void 0&&u.$MaxLength?e.maxLength:undefined,nullable:(c=r.constraints)!==null&&c!==void 0&&c.$Nullable?e.nullable:undefined,minimum:(v=r.constraints)!==null&&v!==void 0&&v["@Org.OData.Validation.V1.Minimum/$Decimal"]&&!isNaN((f=e.annotations)===null||f===void 0?void 0:(p=f.Validation)===null||p===void 0?void 0:p.Minimum)?`${(g=e.annotations)===null||g===void 0?void 0:(m=g.Validation)===null||m===void 0?void 0:m.Minimum}`:undefined,maximum:(y=r.constraints)!==null&&y!==void 0&&y["@Org.OData.Validation.V1.Maximum/$Decimal"]&&!isNaN((h=e.annotations)===null||h===void 0?void 0:(b=h.Validation)===null||b===void 0?void 0:b.Maximum)?`${(E=e.annotations)===null||E===void 0?void 0:(x=E.Validation)===null||x===void 0?void 0:x.Maximum}`:undefined,isDigitSequence:l.type==="sap.ui.model.odata.type.String"&&(D=r.constraints)!==null&&D!==void 0&&D["@com.sap.vocabularies.Common.v1.IsDigitSequence"]&&(T=e.annotations)!==null&&T!==void 0&&(I=T.Common)!==null&&I!==void 0&&I.IsDigitSequence?true:undefined,V4:(O=r.constraints)!==null&&O!==void 0&&O.$V4?true:undefined}}l.formatOptions={parseAsString:(l===null||l===void 0?void 0:(n=l.type)===null||n===void 0?void 0:n.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(i=l.type)===null||i===void 0?void 0:i.indexOf("sap.ui.model.odata.type.Double"))===0?false:undefined,emptyString:(l===null||l===void 0?void 0:(o=l.type)===null||o===void 0?void 0:o.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(a=l.type)===null||a===void 0?void 0:a.indexOf("sap.ui.model.odata.type.Double"))===0?"":undefined,parseKeepsEmptyString:l.type==="sap.ui.model.odata.type.String"?true:undefined};return l};u.getTypeConfig=ie;const oe=function(e,t,i,o){var a,r,l,s,d;const u=e.targetObject;let c=(a=u.annotations)===null||a===void 0?void 0:(r=a.Measures)===null||r===void 0?void 0:r.Unit;const v=T(e);t=w(u,t);if(((l=c)===null||l===void 0?void 0:l.toString())==="%"){if((o===null||o===void 0?void 0:o.showMeasure)===false){return t}return A([t],n.formatWithPercentage)}const f=c?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";c=c?c:(s=u.annotations)===null||s===void 0?void 0:(d=s.Measures)===null||d===void 0?void 0:d.ISOCurrency;const p=c.$target?w(c.$target,S(c,v),i):S(c,v);return z([t,p],f,undefined,o)};u.getBindingWithUnitOrCurrency=oe;const ae=function(e){var t,n,i,o,a;const r=e.targetObject;let l=(t=r.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.Unit;if(((i=l)===null||i===void 0?void 0:i.toString())==="%"){return R("%")}const s=T(e);const d=l?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";l=l?l:(o=r.annotations)===null||o===void 0?void 0:(a=o.Measures)===null||a===void 0?void 0:a.ISOCurrency;const u=l.$target?w(l.$target,S(l,s)):S(l,s);let c=P(I(e));c=w(r,c,true);return z([c,u],d,undefined,{parseKeepsEmptyString:true,emptyString:"",showNumber:false})};u.getBindingForUnitOrCurrency=ae;const re=function(e,t){var n,i;let o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let r=arguments.length>4?arguments[4]:undefined;const l=e.targetObject;const s=(n=l.annotations)===null||n===void 0?void 0:(i=n.Common)===null||i===void 0?void 0:i.Timezone;const d=T(e);t=w(l,t);const u="sap.fe.core.type.DateTimeWithTimezone";const c=s.$target?w(s.$target,S(s,d),o):S(s,d);let v={};if(a){v={showTimezoneForEmptyValues:false}}if(r!==null&&r!==void 0&&r.showTime){v={...v,...{showTime:r.showTime==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showDate){v={...v,...{showDate:r.showDate==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showTimezone){v={...v,...{showTimezone:r.showTimezone==="false"?false:true}}}return z([t,c],u,undefined,v)};u.getBindingWithTimezone=re;const le=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"Begin";let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"Begin";return B(j(q(e,"Display"),t,n))};u.getAlignmentExpression=le;const se=function(e,t){if(t&&t.context){return H(t.context)}return null};se.requiresIContext=true;u.getConverterContext=se;const de=function(e,t){if(t&&t.context){return k(t.context)}return null};de.requiresIContext=true;u.getDataModelObjectPath=de;const ue=function(e){var t;if((t=e.navigationProperties)!==null&&t!==void 0&&t.length){const t=(e===null||e===void 0?void 0:e.navigationProperties.findIndex(t=>{if(M(t)){var n,i;if((n=e.contextLocation)!==null&&n!==void 0&&(i=n.navigationProperties)!==null&&i!==void 0&&i.length){var o;return((o=e.contextLocation)===null||o===void 0?void 0:o.navigationProperties.findIndex(e=>e.name===t.name))===-1}return true}return false}))>-1;if(t){return true}}return false};u.isMultiValueField=ue;const ce=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return ve(e,t,n,true)};u.getRequiredExpressionAsObject=ce;const ve=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};let a=arguments.length>5?arguments[5]:undefined;const r=o.requiredPropertiesFromInsertRestrictions;const l=o.requiredPropertiesFromUpdateRestrictions;if(!e||typeof e==="string"){if(i){return R(false)}return B(R(false))}let s;if(a){s=T(a)}let d=R(false);if(t!==null&&t!==undefined){d=y(t)}let u=R(false);let c=R(false);const v=O(e)&&e.$target||e;const f=y(v,s);const p=n||L.IsEditable;if(r!==null&&r!==void 0&&r.includes(e.name)){u=L.IsCreateMode}if(l!==null&&l!==void 0&&l.includes(e.name)){c=W(L.IsEditable,U(L.IsCreateMode))}const g=C(W(C(f,d),p),u,c);if(i){return g}return B(g)};u.getRequiredExpression=ve;const fe=function(e){var t,n;const i=e===null||e===void 0?void 0:(t=e.targetObject)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.Data;const o=Object.keys(i);const a=[];let r;const l=[];for(const e of o){if(i[e]["$Type"]&&i[e]["$Type"].indexOf("DataField")>-1){a.push(i[e])}}for(const e of a){switch(e.$Type){case"com.sap.vocabularies.UI.v1.DataField":case"com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":case"com.sap.vocabularies.UI.v1.DataFieldWithUrl":case"com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":case"com.sap.vocabularies.UI.v1.DataFieldWithAction":if(typeof e.Value==="object"){r=e.Value.$target}break;case"com.sap.vocabularies.UI.v1.DataFieldForAnnotation":if(e.Target.$target){if(e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataField"||e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataPointType"){if(typeof e.Target.$target.Value==="object"){r=e.Target.$target.Value.$target}}else{if(typeof e.Target==="object"){r=e.Target.$target}break}}break}l.push(ce(r,e,false))}return B(C(...l))};u.getRequiredExpressionForConnectedDataField=fe;return u},false);
|
|
6
6
|
//# sourceMappingURL=UIFormatters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UIFormatters.js","names":["sap","ui","define","BindingHelper","MetaModelConverter","valueFormatters","BindingToolkit","TypeGuards","DataModelPathHelper","DisplayModeFormatter","FieldControlHelper","PropertyHelper","EditMode","_exports","isKey","isImmutable","isComputed","hasValueHelp","getAssociatedUnitProperty","getAssociatedCurrencyProperty","isRequiredExpression","isReadOnlyExpression","isNonEditableExpression","isDisabledExpression","isPathUpdatable","getTargetObjectPath","getRelativePaths","getContextRelativeTargetObjectPath","isProperty","isPathAnnotationExpression","isMultipleNavigationProperty","pathInModel","or","notEqual","not","isTruthy","isConstant","ifElse","getExpressionFromAnnotation","formatWithTypeInformation","formatResult","equal","EDM_TYPE_MAPPING","constant","compileExpression","and","addTypeInformation","getInvolvedDataModelObjects","convertMetaModelContext","UI","singletonPathVisitor","getDisplayMode","oDataModelObjectPath","targetObject","getEditableExpressionAsObject","oPropertyPath","oDataFieldConverted","arguments","length","undefined","isEditable","IsEditable","considerUpdateRestrictions","getEditableExpression","bAsObject","dataFieldEditableExpression","oProperty","$target","relativePath","isPathUpdatableExpression","propertyPath","pathVisitor","path","navigationPaths","convertedTypes","editableExpression","IsTransientBinding","getCollaborationExpression","dataModelObjectPath","formatter","_dataModelObjectPath$","objectPath","activityExpression","keys","targetEntityType","keysExpressions","forEach","key","keyExpression","name","push","getEnabledExpressionAsObject","getEnabledExpression","dataFieldEnabledExpression","enabledExpression","getEditMode","measureReadOnly","asObject","dataFieldConverted","$Type","Display","property","associatedCurrencyProperty","unitProperty","resultExpression","Editable","isUnitReadOnly","EditableReadOnly","EditableDisplay","readOnlyExpression","editModeExpression","ReadOnly","Disabled","hasValidAnalyticalCurrencyOrUnit","oPropertyDataModelObjectPath","_oPropertyDefinition$","_oPropertyDefinition$2","_oPropertyDefinition$3","_oPropertyDefinition$4","oPropertyDefinition","currency","annotations","Measures","ISOCurrency","measure","Unit","IsTotal","ifUnitEditable","sEditableValue","sNonEditableValue","getFieldDisplay","sTargetDisplayMode","oComputedEditMode","getTypeConfig","dataType","_propertyTypeConfig$t","_propertyTypeConfig$t2","_propertyTypeConfig$t3","_propertyTypeConfig$t4","oTargetMapping","type","propertyTypeConfig","constraints","formatOptions","_oTargetMapping$const","_oTargetMapping$const2","_oTargetMapping$const3","_oTargetMapping$const4","_oTargetMapping$const5","_oProperty$annotation","_oProperty$annotation2","_oProperty$annotation3","_oProperty$annotation4","_oTargetMapping$const6","_oProperty$annotation5","_oProperty$annotation6","_oProperty$annotation7","_oProperty$annotation8","_oTargetMapping$const7","_oProperty$annotation9","_oProperty$annotation10","_oTargetMapping$const8","scale","$Scale","precision","$Precision","maxLength","$MaxLength","nullable","$Nullable","minimum","isNaN","Validation","Minimum","maximum","Maximum","isDigitSequence","Common","IsDigitSequence","V4","$V4","parseAsString","indexOf","emptyString","parseKeepsEmptyString","getBindingWithUnitOrCurrency","oPropertyDataModelPath","propertyBindingExpression","ignoreUnitConstraint","_oPropertyDefinition$5","_oPropertyDefinition$6","_unit","_oPropertyDefinition$7","_oPropertyDefinition$8","unit","relativeLocation","toString","showMeasure","formatWithPercentage","complexType","unitBindingExpression","getBindingForUnitOrCurrency","_oPropertyDefinition$9","_oPropertyDefinition$10","_unit2","_oPropertyDefinition$11","_oPropertyDefinition$12","showNumber","getBindingWithTimezone","_oPropertyDefinition$13","_oPropertyDefinition$14","hideTimezoneForEmptyValues","dateFormatOptions","timezone","Timezone","showTimezoneForEmptyValues","showTime","showDate","showTimezone","getAlignmentExpression","sAlignDisplay","sAlignEdit","getConverterContext","oContext","oInterface","context","requiresIContext","getDataModelObjectPath","isMultiValueField","oDataModelPath","_oDataModelPath$navig","navigationProperties","hasOneToManyNavigation","findIndex","oNav","_oDataModelPath$conte","_oDataModelPath$conte2","contextLocation","_oDataModelPath$conte3","oContextNav","getRequiredExpressionAsObject","forceEditMode","getRequiredExpression","oRequiredProperties","aRequiredPropertiesFromInsertRestrictions","requiredPropertiesFromInsertRestrictions","aRequiredPropertiesFromUpdateRestrictions","requiredPropertiesFromUpdateRestrictions","dataFieldRequiredExpression","requiredPropertyFromInsertRestrictionsExpression","requiredPropertyFromUpdateRestrictionsExpression","requiredExpression","editMode","includes","IsCreateMode","returnExpression","getRequiredExpressionForConnectedDataField","dataFieldObjectPath","_dataFieldObjectPath$","_dataFieldObjectPath$2","data","Data","Object","dataFields","isRequiredExpressions","dataField","Value","Target"],"sources":["UIFormatters-dbg.js"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UIFormatters.js","names":["sap","ui","define","BindingHelper","MetaModelConverter","valueFormatters","BindingToolkit","TypeGuards","DataModelPathHelper","DisplayModeFormatter","FieldControlHelper","PropertyHelper","EditMode","_exports","isKey","isImmutable","isComputed","hasValueHelp","getAssociatedUnitProperty","getAssociatedCurrencyProperty","isRequiredExpression","isReadOnlyExpression","isNonEditableExpression","isDisabledExpression","isPathUpdatable","getTargetObjectPath","getRelativePaths","getContextRelativeTargetObjectPath","isProperty","isPathAnnotationExpression","isMultipleNavigationProperty","pathInModel","or","not","isTruthy","isConstant","ifElse","getExpressionFromAnnotation","formatWithTypeInformation","formatResult","equal","EDM_TYPE_MAPPING","constant","compileExpression","and","addTypeInformation","getInvolvedDataModelObjects","convertMetaModelContext","UI","singletonPathVisitor","getDisplayMode","oDataModelObjectPath","targetObject","getEditableExpressionAsObject","oPropertyPath","oDataFieldConverted","arguments","length","undefined","isEditable","IsEditable","considerUpdateRestrictions","getEditableExpression","bAsObject","dataFieldEditableExpression","oProperty","$target","relativePath","isPathUpdatableExpression","propertyPath","pathVisitor","path","navigationPaths","convertedTypes","editableExpression","IsTransientBinding","getCollaborationExpression","dataModelObjectPath","formatter","_dataModelObjectPath$","objectPath","activityExpression","keys","targetEntityType","keysExpressions","forEach","key","keyExpression","name","push","getEnabledExpressionAsObject","getEnabledExpression","dataFieldEnabledExpression","enabledExpression","getEditMode","measureReadOnly","asObject","dataFieldConverted","$Type","Display","property","associatedCurrencyProperty","unitProperty","resultExpression","Editable","isUnitReadOnly","EditableReadOnly","EditableDisplay","readOnlyExpression","editModeExpression","ReadOnly","Disabled","hasValidAnalyticalCurrencyOrUnit","oPropertyDataModelObjectPath","_oPropertyDefinition$","_oPropertyDefinition$2","_oPropertyDefinition$3","_oPropertyDefinition$4","oPropertyDefinition","currency","annotations","Measures","ISOCurrency","measure","Unit","IsTotal","ifUnitEditable","sEditableValue","sNonEditableValue","getFieldDisplay","sTargetDisplayMode","oComputedEditMode","getTypeConfig","dataType","_propertyTypeConfig$t","_propertyTypeConfig$t2","_propertyTypeConfig$t3","_propertyTypeConfig$t4","oTargetMapping","type","propertyTypeConfig","constraints","formatOptions","_oTargetMapping$const","_oTargetMapping$const2","_oTargetMapping$const3","_oTargetMapping$const4","_oTargetMapping$const5","_oProperty$annotation","_oProperty$annotation2","_oProperty$annotation3","_oProperty$annotation4","_oTargetMapping$const6","_oProperty$annotation5","_oProperty$annotation6","_oProperty$annotation7","_oProperty$annotation8","_oTargetMapping$const7","_oProperty$annotation9","_oProperty$annotation10","_oTargetMapping$const8","scale","$Scale","precision","$Precision","maxLength","$MaxLength","nullable","$Nullable","minimum","isNaN","Validation","Minimum","maximum","Maximum","isDigitSequence","Common","IsDigitSequence","V4","$V4","parseAsString","indexOf","emptyString","parseKeepsEmptyString","getBindingWithUnitOrCurrency","oPropertyDataModelPath","propertyBindingExpression","ignoreUnitConstraint","_oPropertyDefinition$5","_oPropertyDefinition$6","_unit","_oPropertyDefinition$7","_oPropertyDefinition$8","unit","relativeLocation","toString","showMeasure","formatWithPercentage","complexType","unitBindingExpression","getBindingForUnitOrCurrency","_oPropertyDefinition$9","_oPropertyDefinition$10","_unit2","_oPropertyDefinition$11","_oPropertyDefinition$12","showNumber","getBindingWithTimezone","_oPropertyDefinition$13","_oPropertyDefinition$14","hideTimezoneForEmptyValues","dateFormatOptions","timezone","Timezone","showTimezoneForEmptyValues","showTime","showDate","showTimezone","getAlignmentExpression","sAlignDisplay","sAlignEdit","getConverterContext","oContext","oInterface","context","requiresIContext","getDataModelObjectPath","isMultiValueField","oDataModelPath","_oDataModelPath$navig","navigationProperties","hasOneToManyNavigation","findIndex","oNav","_oDataModelPath$conte","_oDataModelPath$conte2","contextLocation","_oDataModelPath$conte3","oContextNav","getRequiredExpressionAsObject","forceEditMode","getRequiredExpression","oRequiredProperties","aRequiredPropertiesFromInsertRestrictions","requiredPropertiesFromInsertRestrictions","aRequiredPropertiesFromUpdateRestrictions","requiredPropertiesFromUpdateRestrictions","dataFieldRequiredExpression","requiredPropertyFromInsertRestrictionsExpression","requiredPropertyFromUpdateRestrictionsExpression","requiredExpression","editMode","includes","IsCreateMode","returnExpression","getRequiredExpressionForConnectedDataField","dataFieldObjectPath","_dataFieldObjectPath$","_dataFieldObjectPath$2","data","Data","Object","dataFields","isRequiredExpressions","dataField","Value","Target"],"sources":["UIFormatters-dbg.js"],"mappings":"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"}
|