@sapui5/sap.fe.core 1.103.0 → 1.106.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +121 -0
- package/src/sap/fe/core/ActionRuntime.ts +122 -0
- package/src/sap/fe/core/AppComponent.js +24 -11
- package/src/sap/fe/core/AppComponent.ts +17 -5
- package/src/sap/fe/core/AppStateHandler.js +74 -62
- package/src/sap/fe/core/AppStateHandler.ts +24 -29
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/CommonUtils.js +147 -180
- package/src/sap/fe/core/CommonUtils.ts +166 -193
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +3 -0
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +7 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +194 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +162 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -227
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +268 -119
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +111 -76
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +96 -76
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +723 -637
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +361 -398
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +83 -55
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +42 -44
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +29 -27
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +35 -30
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +171 -74
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +167 -76
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +5 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -17
- package/src/sap/fe/core/controllerextensions/MassEdit.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js +13 -13
- package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -11
- package/src/sap/fe/core/controllerextensions/Placeholder.js +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +154 -123
- package/src/sap/fe/core/controllerextensions/Share.ts +93 -95
- package/src/sap/fe/core/controllerextensions/SideEffects.js +157 -97
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +151 -95
- package/src/sap/fe/core/controllerextensions/ViewState.js +151 -80
- package/src/sap/fe/core/controllerextensions/ViewState.ts +95 -93
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +9 -9
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +6 -7
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +26 -11
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +30 -11
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -40
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +55 -47
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +31 -32
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1376 -914
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +654 -714
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +372 -326
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +210 -276
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +670 -521
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +537 -535
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +85 -65
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +16 -21
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +25 -13
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +53 -43
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +18 -27
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +9 -15
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +19 -3
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +26 -16
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +5 -5
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -3
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.js +8 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +5 -1
- package/src/sap/fe/core/controls/FilterBar.js +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +48 -17
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js +23 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +34 -9
- package/src/sap/fe/core/converters/ManifestSettings.js +19 -18
- package/src/sap/fe/core/converters/ManifestSettings.ts +53 -47
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +32 -10
- package/src/sap/fe/core/converters/MetaModelConverter.ts +42 -19
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +5 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +69 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +98 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +121 -44
- package/src/sap/fe/core/converters/controls/Common/Chart.js +31 -34
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -34
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +43 -7
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -33
- package/src/sap/fe/core/converters/controls/Common/Form.js +8 -6
- package/src/sap/fe/core/converters/controls/Common/Form.ts +11 -14
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +16 -15
- package/src/sap/fe/core/converters/controls/Common/Table.js +188 -157
- package/src/sap/fe/core/converters/controls/Common/Table.ts +279 -230
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +57 -21
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +71 -18
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +30 -8
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +24 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +43 -34
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +37 -25
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +85 -49
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +74 -50
- package/src/sap/fe/core/converters/helpers/Aggregation.js +54 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +56 -8
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +6 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +10 -2
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +182 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +167 -0
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +8 -14
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +6 -9
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +31 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +54 -47
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +44 -15
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +64 -30
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +13 -6
- package/src/sap/fe/core/formatters/StandardFormatter.ts +20 -14
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/fpm/Component.js +33 -7
- package/src/sap/fe/core/fpm/Component.ts +14 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +5 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +4 -3
- package/src/sap/fe/core/helpers/BindingToolkit.js +56 -24
- package/src/sap/fe/core/helpers/BindingToolkit.ts +67 -21
- package/src/sap/fe/core/helpers/ClassSupport.js +31 -3
- package/src/sap/fe/core/helpers/ClassSupport.ts +24 -1
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +39 -0
- package/src/sap/fe/core/helpers/LoaderUtils.ts +14 -0
- package/src/sap/fe/core/helpers/MassEditHelper.js +475 -99
- package/src/sap/fe/core/helpers/MassEditHelper.ts +468 -155
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +82 -36
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +52 -36
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +146 -0
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +128 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +119 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +98 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
- package/src/sap/fe/core/library.js +2 -2
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -41
- package/src/sap/fe/core/messagebundle_ar.properties +22 -45
- package/src/sap/fe/core/messagebundle_bg.properties +22 -45
- package/src/sap/fe/core/messagebundle_ca.properties +22 -45
- package/src/sap/fe/core/messagebundle_cs.properties +22 -45
- package/src/sap/fe/core/messagebundle_cy.properties +21 -44
- package/src/sap/fe/core/messagebundle_da.properties +22 -45
- package/src/sap/fe/core/messagebundle_de.properties +22 -45
- package/src/sap/fe/core/messagebundle_el.properties +22 -45
- package/src/sap/fe/core/messagebundle_en.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +21 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +21 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -42
- package/src/sap/fe/core/messagebundle_es.properties +22 -45
- package/src/sap/fe/core/messagebundle_es_MX.properties +22 -45
- package/src/sap/fe/core/messagebundle_et.properties +22 -45
- package/src/sap/fe/core/messagebundle_fi.properties +22 -45
- package/src/sap/fe/core/messagebundle_fr.properties +21 -44
- package/src/sap/fe/core/messagebundle_fr_CA.properties +20 -43
- package/src/sap/fe/core/messagebundle_hi.properties +22 -45
- package/src/sap/fe/core/messagebundle_hr.properties +22 -45
- package/src/sap/fe/core/messagebundle_hu.properties +22 -45
- package/src/sap/fe/core/messagebundle_id.properties +22 -45
- package/src/sap/fe/core/messagebundle_it.properties +22 -45
- package/src/sap/fe/core/messagebundle_iw.properties +22 -45
- package/src/sap/fe/core/messagebundle_ja.properties +22 -45
- package/src/sap/fe/core/messagebundle_kk.properties +22 -45
- package/src/sap/fe/core/messagebundle_ko.properties +27 -50
- package/src/sap/fe/core/messagebundle_lt.properties +22 -45
- package/src/sap/fe/core/messagebundle_lv.properties +22 -45
- package/src/sap/fe/core/messagebundle_ms.properties +22 -45
- package/src/sap/fe/core/messagebundle_nl.properties +24 -47
- package/src/sap/fe/core/messagebundle_no.properties +22 -45
- package/src/sap/fe/core/messagebundle_pl.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt.properties +23 -46
- package/src/sap/fe/core/messagebundle_pt_PT.properties +22 -45
- package/src/sap/fe/core/messagebundle_ro.properties +22 -45
- package/src/sap/fe/core/messagebundle_ru.properties +22 -45
- package/src/sap/fe/core/messagebundle_sh.properties +22 -45
- package/src/sap/fe/core/messagebundle_sk.properties +22 -45
- package/src/sap/fe/core/messagebundle_sl.properties +22 -45
- package/src/sap/fe/core/messagebundle_sv.properties +22 -45
- package/src/sap/fe/core/messagebundle_th.properties +20 -43
- package/src/sap/fe/core/messagebundle_tr.properties +22 -45
- package/src/sap/fe/core/messagebundle_uk.properties +22 -45
- package/src/sap/fe/core/messagebundle_vi.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_CN.properties +22 -45
- package/src/sap/fe/core/messagebundle_zh_TW.properties +22 -45
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +102 -74
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +62 -63
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -8
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -7
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ShellServicesFactory.js +22 -2
- package/src/sap/fe/core/services/ShellServicesFactory.ts +19 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +251 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +160 -144
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +5 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +8 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +5 -2
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.ts +4 -3
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js +34 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +28 -12
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js +5 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +7 -5
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +2 -2
|
@@ -56,6 +56,51 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
56
56
|
|
|
57
57
|
_exports.ButtonType = ButtonType;
|
|
58
58
|
|
|
59
|
+
function mapAction(actions, aAnnotationActions, aHiddenHeaderActions, commandActions) {
|
|
60
|
+
var _action, _action2, _action3, _action4;
|
|
61
|
+
|
|
62
|
+
var menuItems = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|
63
|
+
var menuKey = arguments.length > 5 ? arguments[5] : undefined;
|
|
64
|
+
var menuVisible = arguments.length > 6 ? arguments[6] : undefined;
|
|
65
|
+
var menuVisibleCb = arguments.length > 7 ? arguments[7] : undefined;
|
|
66
|
+
var action = aAnnotationActions.find(function (action) {
|
|
67
|
+
return action.key === menuKey;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
if (!action) {
|
|
71
|
+
action = actions[menuKey];
|
|
72
|
+
} else {
|
|
73
|
+
var _actions$action$key;
|
|
74
|
+
|
|
75
|
+
//check if "enabled" is overwritten via a manifest entry
|
|
76
|
+
var enabled = (_actions$action$key = actions[action.key]) === null || _actions$action$key === void 0 ? void 0 : _actions$action$key.enabled;
|
|
77
|
+
|
|
78
|
+
if (enabled) {
|
|
79
|
+
action.enabled = enabled;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (actions[action.key]) {
|
|
83
|
+
for (var prop in actions[action.key]) {
|
|
84
|
+
if (!action[prop] && prop !== "menu") {
|
|
85
|
+
action[prop] = actions[action.key][prop];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (((_action = action) !== null && _action !== void 0 && _action.visible || ((_action2 = action) === null || _action2 === void 0 ? void 0 : _action2.type) === ActionType.DataFieldForAction || ((_action3 = action) === null || _action3 === void 0 ? void 0 : _action3.type) === ActionType.DataFieldForIntentBasedNavigation) && !aHiddenHeaderActions.find(function (hiddenAction) {
|
|
92
|
+
return hiddenAction.key === menuKey;
|
|
93
|
+
})) {
|
|
94
|
+
menuVisibleCb(compileExpression(or(resolveBindingString(action.visible, "boolean"), resolveBindingString(menuVisible, "boolean"))));
|
|
95
|
+
menuItems.push(action);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if ((_action4 = action) !== null && _action4 !== void 0 && _action4.command) {
|
|
99
|
+
commandActions[action.key] = action;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return menuKey;
|
|
103
|
+
}
|
|
59
104
|
/**
|
|
60
105
|
* Creates the menu action from manifest actions.
|
|
61
106
|
*
|
|
@@ -64,63 +109,51 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
64
109
|
* @param aHiddenHeaderActions
|
|
65
110
|
* @returns The actions from the manifest and the menu option that were added
|
|
66
111
|
*/
|
|
112
|
+
|
|
113
|
+
|
|
67
114
|
function prepareMenuAction(actions, aAnnotationActions, aHiddenHeaderActions) {
|
|
68
115
|
var _menuItemKeys2;
|
|
69
116
|
|
|
70
117
|
var allActions = {};
|
|
71
118
|
var menuItemKeys = [];
|
|
119
|
+
var commandActions = {};
|
|
72
120
|
|
|
73
121
|
var _loop = function (actionKey) {
|
|
74
|
-
var
|
|
122
|
+
var _actions$actionKey;
|
|
75
123
|
|
|
76
|
-
if (
|
|
77
|
-
var
|
|
124
|
+
if (((_actions$actionKey = actions[actionKey]) === null || _actions$actionKey === void 0 ? void 0 : _actions$actionKey.defaultAction) !== undefined) {
|
|
125
|
+
var _actions$actionKey2;
|
|
78
126
|
|
|
79
127
|
var menuItems = [];
|
|
80
|
-
var menuVisible =
|
|
128
|
+
var menuVisible = true;
|
|
129
|
+
mapAction(actions, aAnnotationActions, aHiddenHeaderActions, commandActions, menuItems, (_actions$actionKey2 = actions[actionKey]) === null || _actions$actionKey2 === void 0 ? void 0 : _actions$actionKey2.defaultAction, menuVisible, function (ibMenuVisible) {
|
|
130
|
+
menuVisible = ibMenuVisible;
|
|
131
|
+
});
|
|
81
132
|
|
|
82
|
-
|
|
83
|
-
|
|
133
|
+
if (typeof menuItems[0] === "object") {
|
|
134
|
+
actions[actionKey].defaultAction = menuItems[0];
|
|
135
|
+
} //actions?.MenuActionsCreateFromTemplate?.menu?.push(actions.MenuActionsCreateFromTemplate.defaultAction);
|
|
84
136
|
|
|
85
|
-
|
|
86
|
-
return action.key === menuKey;
|
|
87
|
-
});
|
|
137
|
+
}
|
|
88
138
|
|
|
89
|
-
|
|
90
|
-
action = actions[menuKey];
|
|
91
|
-
} else {
|
|
92
|
-
var _actions$action$key;
|
|
93
|
-
|
|
94
|
-
//check if "enabled" is overwritten via a manifest entry
|
|
95
|
-
var enabled = (_actions$action$key = actions[action.key]) === null || _actions$action$key === void 0 ? void 0 : _actions$action$key.enabled;
|
|
96
|
-
|
|
97
|
-
if (enabled) {
|
|
98
|
-
action.enabled = enabled;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
if (actions[action.key]) {
|
|
102
|
-
for (var prop in actions[action.key]) {
|
|
103
|
-
if (!action[prop]) {
|
|
104
|
-
action[prop] = actions[action.key][prop];
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
139
|
+
var manifestAction = actions[actionKey];
|
|
109
140
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
141
|
+
if (manifestAction.type === ActionType.Menu) {
|
|
142
|
+
var _manifestAction$menu$, _manifestAction$menu;
|
|
143
|
+
|
|
144
|
+
var _menuItems = [];
|
|
145
|
+
var _menuVisible = false;
|
|
116
146
|
|
|
117
|
-
|
|
147
|
+
var _menuItemKeys = (_manifestAction$menu$ = (_manifestAction$menu = manifestAction.menu) === null || _manifestAction$menu === void 0 ? void 0 : _manifestAction$menu.map(function (menuKey) {
|
|
148
|
+
return mapAction(actions, aAnnotationActions, aHiddenHeaderActions, commandActions, _menuItems, menuKey, _menuVisible, function (ibMenuVisible) {
|
|
149
|
+
_menuVisible = ibMenuVisible;
|
|
150
|
+
});
|
|
118
151
|
})) !== null && _manifestAction$menu$ !== void 0 ? _manifestAction$menu$ : []; // Show menu button if it has one or more then 1 items visible
|
|
119
152
|
|
|
120
153
|
|
|
121
|
-
if (
|
|
122
|
-
manifestAction.visible =
|
|
123
|
-
manifestAction.menu =
|
|
154
|
+
if (_menuItems.length) {
|
|
155
|
+
manifestAction.visible = _menuVisible;
|
|
156
|
+
manifestAction.menu = _menuItems;
|
|
124
157
|
} else {
|
|
125
158
|
_menuItemKeys = [actionKey];
|
|
126
159
|
}
|
|
@@ -134,6 +167,10 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
134
167
|
manifestAction.visible = "false";
|
|
135
168
|
}
|
|
136
169
|
|
|
170
|
+
if (manifestAction.command) {
|
|
171
|
+
commandActions[actionKey] = manifestAction;
|
|
172
|
+
}
|
|
173
|
+
|
|
137
174
|
allActions[actionKey] = manifestAction;
|
|
138
175
|
};
|
|
139
176
|
|
|
@@ -145,7 +182,10 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
145
182
|
(_menuItemKeys2 = menuItemKeys) === null || _menuItemKeys2 === void 0 ? void 0 : _menuItemKeys2.forEach(function (actionKey) {
|
|
146
183
|
return delete allActions[actionKey];
|
|
147
184
|
});
|
|
148
|
-
return
|
|
185
|
+
return {
|
|
186
|
+
"actions": allActions,
|
|
187
|
+
"commandActions": commandActions
|
|
188
|
+
};
|
|
149
189
|
}
|
|
150
190
|
|
|
151
191
|
var removeDuplicateActions = function (actions) {
|
|
@@ -208,26 +248,25 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
208
248
|
|
|
209
249
|
|
|
210
250
|
function getActionsFromManifest(manifestActions, converterContext, aAnnotationActions, navigationSettings, considerNavigationSettings, aHiddenHeaderActions, facetName) {
|
|
211
|
-
var actions = {};
|
|
251
|
+
var actions = {}; // const commandActions: Record<string, CustomAction> = {};
|
|
212
252
|
|
|
213
253
|
var _loop2 = function (actionKey) {
|
|
214
254
|
var _manifestAction$press, _manifestAction$posit, _manifestAction$menu2;
|
|
215
255
|
|
|
216
256
|
var manifestAction = manifestActions[actionKey];
|
|
217
|
-
var lastDotIndex = ((_manifestAction$press = manifestAction.press) === null || _manifestAction$press === void 0 ? void 0 : _manifestAction$press.lastIndexOf(".")) || -1;
|
|
257
|
+
var lastDotIndex = ((_manifestAction$press = manifestAction.press) === null || _manifestAction$press === void 0 ? void 0 : _manifestAction$press.lastIndexOf(".")) || -1;
|
|
258
|
+
var oAnnotationAction = aAnnotationActions === null || aAnnotationActions === void 0 ? void 0 : aAnnotationActions.find(function (obj) {
|
|
259
|
+
return obj.key === actionKey;
|
|
260
|
+
}); // To identify the annotation action property overwrite via manifest use-case.
|
|
218
261
|
|
|
219
|
-
var isAnnotationAction =
|
|
220
|
-
return action.key === actionKey;
|
|
221
|
-
})) || false;
|
|
262
|
+
var isAnnotationAction = oAnnotationAction ? true : false;
|
|
222
263
|
|
|
223
264
|
if (manifestAction.facetName) {
|
|
224
265
|
facetName = manifestAction.facetName;
|
|
225
266
|
}
|
|
226
267
|
|
|
227
268
|
actions[actionKey] = {
|
|
228
|
-
id:
|
|
229
|
-
return action.key === actionKey;
|
|
230
|
-
}) ? actionKey : getCustomActionID(actionKey),
|
|
269
|
+
id: oAnnotationAction ? actionKey : getCustomActionID(actionKey),
|
|
231
270
|
visible: manifestAction.visible === undefined ? "true" : manifestAction.visible,
|
|
232
271
|
enabled: _getManifestEnabled(manifestAction, isAnnotationAction, converterContext),
|
|
233
272
|
handlerModule: manifestAction.press && manifestAction.press.substring(0, lastDotIndex).replace(/\./gi, "/"),
|
|
@@ -247,11 +286,18 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
247
286
|
requiresSelection: manifestAction.requiresSelection === undefined ? false : manifestAction.requiresSelection,
|
|
248
287
|
enableAutoScroll: enableAutoScroll(manifestAction),
|
|
249
288
|
menu: (_manifestAction$menu2 = manifestAction.menu) !== null && _manifestAction$menu2 !== void 0 ? _manifestAction$menu2 : [],
|
|
250
|
-
facetName: manifestAction.inline ? facetName : undefined
|
|
289
|
+
facetName: manifestAction.inline ? facetName : undefined,
|
|
290
|
+
defaultAction: manifestAction.defaultAction
|
|
251
291
|
}; // Do not override the 'type' given in an annotation action
|
|
252
292
|
|
|
253
293
|
if (!isAnnotationAction) {
|
|
254
294
|
actions[actionKey].type = manifestAction.menu ? ActionType.Menu : ActionType.Default;
|
|
295
|
+
} else {
|
|
296
|
+
actions[actionKey].type = oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.type;
|
|
297
|
+
actions[actionKey].annotationPath = oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.annotationPath;
|
|
298
|
+
actions[actionKey].press = oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.press;
|
|
299
|
+
actions[actionKey].enabled = actions[actionKey].enabled === undefined ? oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.enabled : actions[actionKey].enabled;
|
|
300
|
+
actions[actionKey].visible = (oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.visible) !== undefined ? oAnnotationAction === null || oAnnotationAction === void 0 ? void 0 : oAnnotationAction.visible : actions[actionKey].visible;
|
|
255
301
|
}
|
|
256
302
|
};
|
|
257
303
|
|
|
@@ -276,7 +322,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
276
322
|
result = resolvedBinding.value;
|
|
277
323
|
} else if (resolvedBinding._type !== "EmbeddedBinding" && resolvedBinding._type !== "EmbeddedExpressionBinding") {
|
|
278
324
|
// Then it's a module-method reference "sap.xxx.yyy.doSomething"
|
|
279
|
-
var methodPath = resolvedBinding.value;
|
|
325
|
+
var methodPath = resolvedBinding.value; // FIXME: The custom "isEnabled" check does not trigger (because none of the bound values changes)
|
|
326
|
+
|
|
280
327
|
result = formatResult([pathInModel("/", "$view"), methodPath, pathInModel("selectedContexts", "internal")], fpmFormatter.customIsEnabledCheck, converterContext.getEntityType());
|
|
281
328
|
} else {
|
|
282
329
|
// then it's a binding
|
|
@@ -365,4 +412,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
365
412
|
_exports.enableAutoScroll = enableAutoScroll;
|
|
366
413
|
return _exports;
|
|
367
414
|
}, false);
|
|
368
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFjdGlvbi50cyJdLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwicHJlcGFyZU1lbnVBY3Rpb24iLCJhY3Rpb25zIiwiYUFubm90YXRpb25BY3Rpb25zIiwiYUhpZGRlbkhlYWRlckFjdGlvbnMiLCJhbGxBY3Rpb25zIiwibWVudUl0ZW1LZXlzIiwiYWN0aW9uS2V5IiwibWFuaWZlc3RBY3Rpb24iLCJ0eXBlIiwiQWN0aW9uVHlwZSIsIk1lbnUiLCJtZW51SXRlbXMiLCJtZW51VmlzaWJsZSIsIl9tZW51SXRlbUtleXMiLCJtZW51IiwibWFwIiwibWVudUtleSIsImFjdGlvbiIsImZpbmQiLCJrZXkiLCJlbmFibGVkIiwicHJvcCIsInZpc2libGUiLCJEYXRhRmllbGRGb3JBY3Rpb24iLCJEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJoaWRkZW5BY3Rpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsIm9yIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJwdXNoIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJvTWVudUl0ZW1LZXlzIiwicmVkdWNlIiwiaXRlbSIsImZpbHRlciIsIl9nZXRNYW5pZmVzdEVuYWJsZWQiLCJpc0Fubm90YXRpb25BY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwidW5kZWZpbmVkIiwiZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0QWN0aW9ucyIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiZmFjZXROYW1lIiwibGFzdERvdEluZGV4IiwicHJlc3MiLCJsYXN0SW5kZXhPZiIsInNvbWUiLCJpZCIsImdldEN1c3RvbUFjdGlvbklEIiwiaGFuZGxlck1vZHVsZSIsInN1YnN0cmluZyIsInJlcGxhY2UiLCJoYW5kbGVyTWV0aG9kIiwidGV4dCIsIm5vV3JhcCIsIl9fbm9XcmFwIiwicmVwbGFjZVNwZWNpYWxDaGFycyIsImVuYWJsZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uIiwiZGVmYXVsdFZhbHVlc0Z1bmN0aW9uIiwicG9zaXRpb24iLCJhbmNob3IiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImlzTmF2aWdhYmxlIiwiaXNBY3Rpb25OYXZpZ2FibGUiLCJjb21tYW5kIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJlbmFibGVBdXRvU2Nyb2xsIiwiaW5saW5lIiwiRGVmYXVsdCIsInJlc29sdmVkQmluZGluZyIsInJlc3VsdCIsImlzQ29uc3RhbnQiLCJ2YWx1ZSIsIl90eXBlIiwibWV0aG9kUGF0aCIsImZvcm1hdFJlc3VsdCIsInBhdGhJbk1vZGVsIiwiZnBtRm9ybWF0dGVyIiwiY3VzdG9tSXNFbmFibGVkQ2hlY2siLCJnZXRFbnRpdHlUeXBlIiwiaWZFbHNlIiwiYW5kIiwiZ3JlYXRlck9yRXF1YWwiLCJnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbiIsImFjdGlvblRhcmdldCIsImlzQm91bmQiLCJwYXJhbWV0ZXJzIiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwib3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInBhdGgiLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiZXF1YWwiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhTWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9NYXBwaW5nIiwib1NPTWFwcGluZyIsIkxvY2FsUHJvcGVydHkiLCJTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiYklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQiLCJkZXRhaWxPckRpc3BsYXkiLCJkZXRhaWwiLCJkaXNwbGF5Iiwicm91dGUi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MEI0QixRQUFRLENBQUNHO0FBSmpCLE9BQW5CO0FBTUFKLE1BQUFBLHVCQUF1QixDQUFDN0UsSUFBeEIsQ0FBNkIrRSxVQUE3QjtBQUNBLEtBUkQ7QUFTQSxXQUFPRix1QkFBUDtBQUNBOzs7O0FBRU0sV0FBU3BDLGlCQUFULENBQ05yRCxNQURNLEVBRU4yQixrQkFGTSxFQUdOQywwQkFITSxFQUlJO0FBQUE7O0FBQ1YsUUFBSWtFLHVCQUFnQyxHQUFHLElBQXZDOztBQUNBLFFBQUlsRSwwQkFBSixFQUFnQztBQUMvQixVQUFNbUUsZUFBZSxHQUFHcEUsa0JBQWtCLEtBQUtBLGtCQUFrQixDQUFDcUUsTUFBbkIsSUFBNkJyRSxrQkFBa0IsQ0FBQ3NFLE9BQXJELENBQTFDO0FBQ0FILE1BQUFBLHVCQUF1QixHQUFHQyxlQUFlLFNBQWYsSUFBQUEsZUFBZSxXQUFmLElBQUFBLGVBQWUsQ0FBRUcsS0FBakIsR0FBeUIsSUFBekIsR0FBZ0MsS0FBMUQ7QUFDQSxLQUxTLENBTVY7OztBQUNBLFFBQ0VsRyxNQUFNLElBQ05BLE1BQU0sQ0FBQ21HLGNBRFAsS0FFQywwQkFBQW5HLE1BQU0sQ0FBQ21HLGNBQVAsZ0ZBQXVCQyxrQkFBdkIsTUFBOEMsS0FBOUMsSUFBdUQsMkJBQUFwRyxNQUFNLENBQUNtRyxjQUFQLGtGQUF1QjNDLGdCQUF2QixNQUE0QyxJQUZwRyxDQUFELElBR0EsQ0FBQ3NDLHVCQUpGLEVBS0U7QUFDRCxhQUFPLEtBQVA7QUFDQTs7QUFDRCxXQUFPLElBQVA7QUFDQTs7OztBQUVNLFdBQVN0QyxnQkFBVCxDQUEwQnhELE1BQTFCLEVBQTJEO0FBQUE7O0FBQ2pFLFdBQU8sQ0FBQUEsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixzQ0FBQUEsTUFBTSxDQUFFbUcsY0FBUixrRkFBd0IzQyxnQkFBeEIsTUFBNkMsSUFBcEQ7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21BY3Rpb25JRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RBY3Rpb24sIE1hbmlmZXN0VGFibGVDb2x1bW4sIE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IGZwbUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9GUE1Gb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0ZXF1YWwsXG5cdGZvcm1hdFJlc3VsdCxcblx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLFxuXHRncmVhdGVyT3JFcXVhbCxcblx0aWZFbHNlLFxuXHRpc0NvbnN0YW50LFxuXHRvcixcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyByZXBsYWNlU3BlY2lhbENoYXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uLy4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IGVudW0gQnV0dG9uVHlwZSB7XG5cdEFjY2VwdCA9IFwiQWNjZXB0XCIsXG5cdEF0dGVudGlvbiA9IFwiQXR0ZW50aW9uXCIsXG5cdEJhY2sgPSBcIkJhY2tcIixcblx0Q3JpdGljYWwgPSBcIkNyaXRpY2FsXCIsXG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0RW1waGFzaXplZCA9IFwiRW1waGFzaXplZFwiLFxuXHRHaG9zdCA9IFwiR2hvc3RcIixcblx0TmVnYXRpdmUgPSBcIk5lZ2F0aXZlXCIsXG5cdE5ldXRyYWwgPSBcIk5ldXRyYWxcIixcblx0UmVqZWN0ID0gXCJSZWplY3RcIixcblx0U3VjY2VzcyA9IFwiU3VjY2Vzc1wiLFxuXHRUcmFuc3BhcmVudCA9IFwiVHJhbnNwYXJlbnRcIixcblx0VW5zdHlsZWQgPSBcIlVuc3R5bGVkXCIsXG5cdFVwID0gXCJVcFwiXG59XG5cbmV4cG9ydCB0eXBlIEJhc2VBY3Rpb24gPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdGlkPzogc3RyaW5nO1xuXHR0ZXh0Pzogc3RyaW5nO1xuXHR0eXBlPzogQWN0aW9uVHlwZTtcblx0cHJlc3M/OiBzdHJpbmc7XG5cdGVuYWJsZWQ/OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjtcblx0dmlzaWJsZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRlbmFibGVPblNlbGVjdD86IHN0cmluZztcblx0YW5ub3RhdGlvblBhdGg/OiBzdHJpbmc7XG5cdGRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbj86IHN0cmluZztcblx0aXNOYXZpZ2FibGU/OiBib29sZWFuO1xuXHRlbmFibGVBdXRvU2Nyb2xsPzogYm9vbGVhbjtcblx0cmVxdWlyZXNEaWFsb2c/OiBzdHJpbmc7XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdGJ1dHRvblR5cGU/OiBCdXR0b25UeXBlLkdob3N0IHwgQnV0dG9uVHlwZS5UcmFuc3BhcmVudCB8IHN0cmluZztcblx0cGFyZW50RW50aXR5RGVsZXRlRW5hYmxlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHRtZW51PzogKHN0cmluZyB8IEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW107XG5cdGZhY2V0TmFtZT86IHN0cmluZztcblx0Y29tbWFuZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIEFubm90YXRpb25BY3Rpb24gPSBCYXNlQWN0aW9uICYge1xuXHR0eXBlOiBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uO1xuXHRhbm5vdGF0aW9uUGF0aDogc3RyaW5nO1xuXHRpZD86IHN0cmluZztcblx0Y3VzdG9tRGF0YT86IHN0cmluZztcbn07XG5cbi8qKlxuICogRGVmaW5pdGlvbiBmb3IgY3VzdG9tIGFjdGlvbnNcbiAqXG4gKiBAdHlwZWRlZiBDdXN0b21BY3Rpb25cbiAqL1xuZXhwb3J0IHR5cGUgQ3VzdG9tQWN0aW9uID0gQ3VzdG9tRWxlbWVudDxcblx0QmFzZUFjdGlvbiAmIHtcblx0XHR0eXBlPzogQWN0aW9uVHlwZS5EZWZhdWx0IHwgQWN0aW9uVHlwZS5NZW51O1xuXHRcdGhhbmRsZXJNZXRob2Q/OiBzdHJpbmc7XG5cdFx0aGFuZGxlck1vZHVsZT86IHN0cmluZztcblx0XHRtZW51PzogKHN0cmluZyB8IEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW107XG5cdFx0bm9XcmFwPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgd3JhcHBpbmcgZnJvbSB0aGUgRlBNSGVscGVyXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXHR9XG4+O1xuXG4vLyBSZXVzZSBvZiBDb25maWd1cmFibGVPYmplY3QgYW5kIEN1c3RvbUVsZW1lbnQgaXMgZG9uZSBmb3Igb3JkZXJpbmdcbmV4cG9ydCB0eXBlIENvbnZlcnRlckFjdGlvbiA9IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb247XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgbWVudSBhY3Rpb24gZnJvbSBtYW5pZmVzdCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uXG4gKiBAcGFyYW0gYUFubm90YXRpb25BY3Rpb25zIFRoZSBhbm5vdGF0aW9uIGFjdGlvbnMgZGVmaW5pdGlvblxuICogQHBhcmFtIGFIaWRkZW5IZWFkZXJBY3Rpb25zXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgdGhlIG1lbnUgb3B0aW9uIHRoYXQgd2VyZSBhZGRlZFxuICovXG5mdW5jdGlvbiBwcmVwYXJlTWVudUFjdGlvbihcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0YUFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGFIaWRkZW5IZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW11cbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4ge1xuXHRjb25zdCBhbGxBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+ID0ge307XG5cdGxldCBtZW51SXRlbUtleXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gW107XG5cblx0Zm9yIChjb25zdCBhY3Rpb25LZXkgaW4gYWN0aW9ucykge1xuXHRcdGNvbnN0IG1hbmlmZXN0QWN0aW9uOiBDdXN0b21BY3Rpb24gPSBhY3Rpb25zW2FjdGlvbktleV07XG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGUuTWVudSkge1xuXHRcdFx0Y29uc3QgbWVudUl0ZW1zOiAoQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbilbXSA9IFtdO1xuXHRcdFx0bGV0IG1lbnVWaXNpYmxlOiBhbnkgPSBmYWxzZTtcblx0XHRcdGxldCBfbWVudUl0ZW1LZXlzID1cblx0XHRcdFx0bWFuaWZlc3RBY3Rpb24ubWVudT8ubWFwKChtZW51S2V5OiBzdHJpbmcgfCBDdXN0b21BY3Rpb24pID0+IHtcblx0XHRcdFx0XHRsZXQgYWN0aW9uOiBCYXNlQWN0aW9uIHwgQ3VzdG9tQWN0aW9uIHwgdW5kZWZpbmVkID0gYUFubm90YXRpb25BY3Rpb25zLmZpbmQoXG5cdFx0XHRcdFx0XHQoYWN0aW9uOiBCYXNlQWN0aW9uKSA9PiBhY3Rpb24ua2V5ID09PSBtZW51S2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoIWFjdGlvbikge1xuXHRcdFx0XHRcdFx0YWN0aW9uID0gYWN0aW9uc1ttZW51S2V5IGFzIHN0cmluZ107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vY2hlY2sgaWYgXCJlbmFibGVkXCIgaXMgb3ZlcndyaXR0ZW4gdmlhIGEgbWFuaWZlc3QgZW50cnlcblx0XHRcdFx0XHRcdGNvbnN0IGVuYWJsZWQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgdW5kZWZpbmVkID0gYWN0aW9uc1thY3Rpb24ua2V5XT8uZW5hYmxlZDtcblx0XHRcdFx0XHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gZW5hYmxlZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChhY3Rpb25zW2FjdGlvbi5rZXldKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgcHJvcCBpbiBhY3Rpb25zW2FjdGlvbi5rZXldKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCEoYWN0aW9uIGFzIGFueSlbcHJvcF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdChhY3Rpb24gYXMgYW55KVtwcm9wXSA9IChhY3Rpb25zW2FjdGlvbi5rZXldIGFzIGFueSlbcHJvcF07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0KGFjdGlvbj8udmlzaWJsZSB8fFxuXHRcdFx0XHRcdFx0XHRhY3Rpb24/LnR5cGUgPT09IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9yQWN0aW9uIHx8XG5cdFx0XHRcdFx0XHRcdGFjdGlvbj8udHlwZSA9PT0gQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pICYmXG5cdFx0XHRcdFx0XHQhYUhpZGRlbkhlYWRlckFjdGlvbnMuZmluZCgoaGlkZGVuQWN0aW9uKSA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBtZW51S2V5KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0bWVudVZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0b3IocmVzb2x2ZUJpbmRpbmdTdHJpbmcoKGFjdGlvbiBhcyBhbnkpLnZpc2libGUsIFwiYm9vbGVhblwiKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudVZpc2libGUsIFwiYm9vbGVhblwiKSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRtZW51SXRlbXMucHVzaChhY3Rpb24pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBtZW51S2V5IGFzIHN0cmluZztcblx0XHRcdFx0fSkgPz8gW107XG5cblx0XHRcdC8vIFNob3cgbWVudSBidXR0b24gaWYgaXQgaGFzIG9uZSBvciBtb3JlIHRoZW4gMSBpdGVtcyB2aXNpYmxlXG5cdFx0XHRpZiAobWVudUl0ZW1zLmxlbmd0aCkge1xuXHRcdFx0XHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gbWVudVZpc2libGU7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLm1lbnUgPSBtZW51SXRlbXM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRfbWVudUl0ZW1LZXlzID0gW2FjdGlvbktleV07XG5cdFx0XHR9XG5cblx0XHRcdG1lbnVJdGVtS2V5cyA9IFsuLi5tZW51SXRlbUtleXMsIC4uLl9tZW51SXRlbUtleXNdO1xuXHRcdH1cblx0XHRpZiAoYUhpZGRlbkhlYWRlckFjdGlvbnMuZmluZCgoaGlkZGVuQWN0aW9uKSA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBhY3Rpb25LZXkpKSB7XG5cdFx0XHRtYW5pZmVzdEFjdGlvbi52aXNpYmxlID0gXCJmYWxzZVwiO1xuXHRcdH1cblx0XHRhbGxBY3Rpb25zW2FjdGlvbktleV0gPSBtYW5pZmVzdEFjdGlvbjtcblx0fVxuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0bWVudUl0ZW1LZXlzPy5mb3JFYWNoKChhY3Rpb25LZXk6IHN0cmluZykgPT4gZGVsZXRlIGFsbEFjdGlvbnNbYWN0aW9uS2V5XSk7XG5cdHJldHVybiBhbGxBY3Rpb25zO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlRHVwbGljYXRlQWN0aW9ucyA9IChhY3Rpb25zOiBCYXNlQWN0aW9uW10pOiBCYXNlQWN0aW9uW10gPT4ge1xuXHRsZXQgb01lbnVJdGVtS2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXHRhY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuXHRcdGlmIChhY3Rpb24/Lm1lbnU/Lmxlbmd0aCkge1xuXHRcdFx0b01lbnVJdGVtS2V5cyA9IGFjdGlvbi5tZW51LnJlZHVjZSgoaXRlbSwgeyBrZXkgfTogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChrZXkgJiYgIWl0ZW1ba2V5XSkge1xuXHRcdFx0XHRcdGl0ZW1ba2V5XSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9LCBvTWVudUl0ZW1LZXlzKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gIW9NZW51SXRlbUtleXNbYWN0aW9uLmtleV0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgYW4gYWN0aW9uIGRlZmF1bHQgdmFsdWUgYmFzZWQgb24gaXRzIGtpbmQuXG4gKlxuICogRGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgY3VzdG9tIGFjdGlvbnMgaWYgbm90IG92ZXJ3cml0dGVuIGluIG1hbmlmZXN0LlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbiBUaGUgYWN0aW9uIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcGFyYW0gaXNBbm5vdGF0aW9uQWN0aW9uIFdoZXRoZXIgdGhlIGFjdGlvbiwgZGVmaW5lZCBpbiBtYW5pZmVzdCwgY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgYW5ub3RhdGlvbiBhY3Rpb24uXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm9wZXJ0eSB2YWx1ZSBmb3IgdGhlIGNvbHVtblxuICovXG5jb25zdCBfZ2V0TWFuaWZlc3RFbmFibGVkID0gZnVuY3Rpb24gKFxuXHRtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24sXG5cdGlzQW5ub3RhdGlvbkFjdGlvbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuXHRpZiAoaXNBbm5vdGF0aW9uQWN0aW9uICYmIG1hbmlmZXN0QWN0aW9uLmVuYWJsZWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vIElmIGFubm90YXRpb24gYWN0aW9uIGhhcyBubyBwcm9wZXJ0eSBkZWZpbmVkIGluIG1hbmlmZXN0LFxuXHRcdC8vIGRvIG5vdCBvdmVyd3JpdGUgaXQgd2l0aCBtYW5pZmVzdCBhY3Rpb24ncyBkZWZhdWx0IHZhbHVlLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Ly8gUmV0dXJuIHdoYXQgaXMgZGVmaW5lZCBpbiBtYW5pZmVzdC5cblx0cmV0dXJuIGdldE1hbmlmZXN0QWN0aW9uRW5hYmxlbWVudChtYW5pZmVzdEFjdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFjdGlvbiBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0gbWFuaWZlc3RBY3Rpb25zIFRoZSBtYW5pZmVzdCBhY3Rpb25zXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhQW5ub3RhdGlvbkFjdGlvbnMgVGhlIGFubm90YXRpb24gYWN0aW9ucyBkZWZpbml0aW9uXG4gKiBAcGFyYW0gbmF2aWdhdGlvblNldHRpbmdzIFRoZSBuYXZpZ2F0aW9uIHNldHRpbmdzXG4gKiBAcGFyYW0gY29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3MgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGFIaWRkZW5IZWFkZXJBY3Rpb25zIFRoZSBoaWRkZW4gaGVhZGVyIGFjdGlvbnNcbiAqIEBwYXJhbSBmYWNldE5hbWUgVGhlIGZhY2V0IHdoZXJlIGFuIGFjdGlvbiBpcyBkaXNwbGF5ZWQgaWYgaXQgaXMgaW5saW5lXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdEFjdGlvbj4gfCB1bmRlZmluZWQsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFBbm5vdGF0aW9uQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0bmF2aWdhdGlvblNldHRpbmdzPzogTmF2aWdhdGlvblNldHRpbmdzQ29uZmlndXJhdGlvbixcblx0Y29uc2lkZXJOYXZpZ2F0aW9uU2V0dGluZ3M/OiBib29sZWFuLFxuXHRhSGlkZGVuSGVhZGVyQWN0aW9ucz86IEJhc2VBY3Rpb25bXSxcblx0ZmFjZXROYW1lPzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+IHtcblx0Y29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRjb25zdCBsYXN0RG90SW5kZXggPSBtYW5pZmVzdEFjdGlvbi5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXG5cdFx0Ly8gVG8gaWRlbnRpZnkgdGhlIGFubm90YXRpb24gYWN0aW9uIHByb3BlcnR5IG92ZXJ3cml0ZSB2aWEgbWFuaWZlc3QgdXNlLWNhc2UuXG5cdFx0Y29uc3QgaXNBbm5vdGF0aW9uQWN0aW9uID0gYUFubm90YXRpb25BY3Rpb25zPy5zb21lKChhY3Rpb24pID0+IGFjdGlvbi5rZXkgPT09IGFjdGlvbktleSkgfHwgZmFsc2U7XG5cdFx0aWYgKG1hbmlmZXN0QWN0aW9uLmZhY2V0TmFtZSkge1xuXHRcdFx0ZmFjZXROYW1lID0gbWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lO1xuXHRcdH1cblxuXHRcdGFjdGlvbnNbYWN0aW9uS2V5XSA9IHtcblx0XHRcdGlkOiBhQW5ub3RhdGlvbkFjdGlvbnM/LnNvbWUoKGFjdGlvbikgPT4gYWN0aW9uLmtleSA9PT0gYWN0aW9uS2V5KSA/IGFjdGlvbktleSA6IGdldEN1c3RvbUFjdGlvbklEKGFjdGlvbktleSksXG5cdFx0XHR2aXNpYmxlOiBtYW5pZmVzdEFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQgPyBcInRydWVcIiA6IG1hbmlmZXN0QWN0aW9uLnZpc2libGUsXG5cdFx0XHRlbmFibGVkOiBfZ2V0TWFuaWZlc3RFbmFibGVkKG1hbmlmZXN0QWN0aW9uLCBpc0Fubm90YXRpb25BY3Rpb24sIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdFx0aGFuZGxlck1vZHVsZTogbWFuaWZlc3RBY3Rpb24ucHJlc3MgJiYgbWFuaWZlc3RBY3Rpb24ucHJlc3Muc3Vic3RyaW5nKDAsIGxhc3REb3RJbmRleCkucmVwbGFjZSgvXFwuL2dpLCBcIi9cIiksXG5cdFx0XHRoYW5kbGVyTWV0aG9kOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcobGFzdERvdEluZGV4ICsgMSksXG5cdFx0XHRwcmVzczogbWFuaWZlc3RBY3Rpb24ucHJlc3MsXG5cdFx0XHR0ZXh0OiBtYW5pZmVzdEFjdGlvbi50ZXh0LFxuXHRcdFx0bm9XcmFwOiBtYW5pZmVzdEFjdGlvbi5fX25vV3JhcCxcblx0XHRcdGtleTogcmVwbGFjZVNwZWNpYWxDaGFycyhhY3Rpb25LZXkpLFxuXHRcdFx0ZW5hYmxlT25TZWxlY3Q6IG1hbmlmZXN0QWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uOiBtYW5pZmVzdEFjdGlvbi5kZWZhdWx0VmFsdWVzRnVuY3Rpb24sXG5cdFx0XHRwb3NpdGlvbjoge1xuXHRcdFx0XHRhbmNob3I6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uPy5hbmNob3IsXG5cdFx0XHRcdHBsYWNlbWVudDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IFBsYWNlbWVudC5BZnRlciA6IG1hbmlmZXN0QWN0aW9uLnBvc2l0aW9uLnBsYWNlbWVudFxuXHRcdFx0fSxcblx0XHRcdGlzTmF2aWdhYmxlOiBpc0FjdGlvbk5hdmlnYWJsZShtYW5pZmVzdEFjdGlvbiwgbmF2aWdhdGlvblNldHRpbmdzLCBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyksXG5cdFx0XHRjb21tYW5kOiBtYW5pZmVzdEFjdGlvbi5jb21tYW5kLFxuXHRcdFx0cmVxdWlyZXNTZWxlY3Rpb246IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1hbmlmZXN0QWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQXV0b1Njcm9sbDogZW5hYmxlQXV0b1Njcm9sbChtYW5pZmVzdEFjdGlvbiksXG5cdFx0XHRtZW51OiBtYW5pZmVzdEFjdGlvbi5tZW51ID8/IFtdLFxuXHRcdFx0ZmFjZXROYW1lOiBtYW5pZmVzdEFjdGlvbi5pbmxpbmUgPyBmYWNldE5hbWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHRcdC8vIERvIG5vdCBvdmVycmlkZSB0aGUgJ3R5cGUnIGdpdmVuIGluIGFuIGFubm90YXRpb24gYWN0aW9uXG5cdFx0aWYgKCFpc0Fubm90YXRpb25BY3Rpb24pIHtcblx0XHRcdGFjdGlvbnNbYWN0aW9uS2V5XS50eXBlID0gbWFuaWZlc3RBY3Rpb24ubWVudSA/IEFjdGlvblR5cGUuTWVudSA6IEFjdGlvblR5cGUuRGVmYXVsdDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHByZXBhcmVNZW51QWN0aW9uKGFjdGlvbnMsIGFBbm5vdGF0aW9uQWN0aW9ucyA/PyBbXSwgYUhpZGRlbkhlYWRlckFjdGlvbnMgPz8gW10pO1xufVxuXG5mdW5jdGlvbiBnZXRNYW5pZmVzdEFjdGlvbkVuYWJsZW1lbnQobWFuaWZlc3RBY3Rpb246IE1hbmlmZXN0QWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCByZXNvbHZlZEJpbmRpbmcgPSByZXNvbHZlQmluZGluZ1N0cmluZyhtYW5pZmVzdEFjdGlvbi5lbmFibGVkIGFzIHN0cmluZywgXCJib29sZWFuXCIpO1xuXHRsZXQgcmVzdWx0OiBhbnk7XG5cdGlmIChpc0NvbnN0YW50KHJlc29sdmVkQmluZGluZykgJiYgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHQvLyBObyBlbmFibGVkIHByb3BlcnR5IGNvbmZpZ3VyZWQgaW4gbWFuaWZlc3QgZm9yIHRoZSBjdXN0b20gYWN0aW9uIC0tPiBlbmFibGUgY3VzdG9tIGFjdGlvblxuXHRcdHJlc3VsdCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHR5cGVvZiByZXNvbHZlZEJpbmRpbmcudmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0Ly8gdHJ1ZSAvIGZhbHNlXG5cdFx0cmVzdWx0ID0gcmVzb2x2ZWRCaW5kaW5nLnZhbHVlO1xuXHR9IGVsc2UgaWYgKHJlc29sdmVkQmluZGluZy5fdHlwZSAhPT0gXCJFbWJlZGRlZEJpbmRpbmdcIiAmJiByZXNvbHZlZEJpbmRpbmcuX3R5cGUgIT09IFwiRW1iZWRkZWRFeHByZXNzaW9uQmluZGluZ1wiKSB7XG5cdFx0Ly8gVGhlbiBpdCdzIGEgbW9kdWxlLW1ldGhvZCByZWZlcmVuY2UgXCJzYXAueHh4Lnl5eS5kb1NvbWV0aGluZ1wiXG5cdFx0Y29uc3QgbWV0aG9kUGF0aCA9IHJlc29sdmVkQmluZGluZy52YWx1ZSBhcyBzdHJpbmc7XG5cdFx0cmVzdWx0ID0gZm9ybWF0UmVzdWx0KFxuXHRcdFx0W3BhdGhJbk1vZGVsKFwiL1wiLCBcIiR2aWV3XCIpLCBtZXRob2RQYXRoLCBwYXRoSW5Nb2RlbChcInNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKV0sXG5cdFx0XHRmcG1Gb3JtYXR0ZXIuY3VzdG9tSXNFbmFibGVkQ2hlY2sgYXMgYW55LFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIHRoZW4gaXQncyBhIGJpbmRpbmdcblx0XHRyZXN1bHQgPSByZXNvbHZlZEJpbmRpbmc7XG5cdH1cblxuXHQvLyBDb25zaWRlciByZXF1aXJlc1NlbGVjdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlIHNlbGVjdGVkQ29udGV4dHMgaW4gdGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0aWZFbHNlKFxuXHRcdFx0bWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHRydWUsXG5cdFx0XHRhbmQoZ3JlYXRlck9yRXF1YWwocGF0aEluTW9kZWwoXCJudW1iZXJPZlNlbGVjdGVkQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMSksIHJlc3VsdCksXG5cdFx0XHRyZXN1bHRcblx0XHQpXG5cdCk7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBhbiBhbm5vdGF0aW9uLWJhc2VkIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gYWN0aW9uVGFyZ2V0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIHRoZSBhY3Rpb24gYnV0dG9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5hYmxlZEZvckFubm90YXRpb25BY3Rpb24oXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGFjdGlvblRhcmdldDogQWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGlmIChhY3Rpb25UYXJnZXQ/LmlzQm91bmQgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdH1cblx0aWYgKGFjdGlvblRhcmdldD8ucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lID0gYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24gPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRbXSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHQocGF0aDogc3RyaW5nKSA9PiBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSlcblx0XHRcdCk7XG5cdFx0aWYgKGFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnMuQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihlcXVhbChvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uLCB0cnVlKSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBcInRydWVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhhTWFwcGluZ3M6IGFueVtdKTogYW55W10ge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nczogYW55W10gPSBbXTtcblx0YU1hcHBpbmdzLmZvckVhY2goKG9NYXBwaW5nKSA9PiB7XG5cdFx0Y29uc3Qgb1NPTWFwcGluZyA9IHtcblx0XHRcdFwiTG9jYWxQcm9wZXJ0eVwiOiB7XG5cdFx0XHRcdFwiJFByb3BlcnR5UGF0aFwiOiBvTWFwcGluZy5Mb2NhbFByb3BlcnR5LnZhbHVlXG5cdFx0XHR9LFxuXHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IG9NYXBwaW5nLlNlbWFudGljT2JqZWN0UHJvcGVydHlcblx0XHR9O1xuXHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmdzLnB1c2gob1NPTWFwcGluZyk7XG5cdH0pO1xuXHRyZXR1cm4gYVNlbWFudGljT2JqZWN0TWFwcGluZ3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FjdGlvbk5hdmlnYWJsZShcblx0YWN0aW9uOiBNYW5pZmVzdEFjdGlvbiB8IE1hbmlmZXN0VGFibGVDb2x1bW4sXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZDogYm9vbGVhbiA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cbiJdfQ==
|
|
415
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdXR0b25UeXBlIiwibWFwQWN0aW9uIiwiYWN0aW9ucyIsImFBbm5vdGF0aW9uQWN0aW9ucyIsImFIaWRkZW5IZWFkZXJBY3Rpb25zIiwiY29tbWFuZEFjdGlvbnMiLCJtZW51SXRlbXMiLCJtZW51S2V5IiwibWVudVZpc2libGUiLCJtZW51VmlzaWJsZUNiIiwiYWN0aW9uIiwiZmluZCIsImtleSIsImVuYWJsZWQiLCJwcm9wIiwidmlzaWJsZSIsInR5cGUiLCJBY3Rpb25UeXBlIiwiRGF0YUZpZWxkRm9yQWN0aW9uIiwiRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiaGlkZGVuQWN0aW9uIiwiY29tcGlsZUV4cHJlc3Npb24iLCJvciIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwicHVzaCIsImNvbW1hbmQiLCJwcmVwYXJlTWVudUFjdGlvbiIsImFsbEFjdGlvbnMiLCJtZW51SXRlbUtleXMiLCJhY3Rpb25LZXkiLCJkZWZhdWx0QWN0aW9uIiwidW5kZWZpbmVkIiwiaWJNZW51VmlzaWJsZSIsIm1hbmlmZXN0QWN0aW9uIiwiTWVudSIsIl9tZW51SXRlbUtleXMiLCJtZW51IiwibWFwIiwibGVuZ3RoIiwiZm9yRWFjaCIsInJlbW92ZUR1cGxpY2F0ZUFjdGlvbnMiLCJvTWVudUl0ZW1LZXlzIiwicmVkdWNlIiwiaXRlbSIsImZpbHRlciIsIl9nZXRNYW5pZmVzdEVuYWJsZWQiLCJpc0Fubm90YXRpb25BY3Rpb24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50IiwiZ2V0QWN0aW9uc0Zyb21NYW5pZmVzdCIsIm1hbmlmZXN0QWN0aW9ucyIsIm5hdmlnYXRpb25TZXR0aW5ncyIsImNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzIiwiZmFjZXROYW1lIiwibGFzdERvdEluZGV4IiwicHJlc3MiLCJsYXN0SW5kZXhPZiIsIm9Bbm5vdGF0aW9uQWN0aW9uIiwib2JqIiwiaWQiLCJnZXRDdXN0b21BY3Rpb25JRCIsImhhbmRsZXJNb2R1bGUiLCJzdWJzdHJpbmciLCJyZXBsYWNlIiwiaGFuZGxlck1ldGhvZCIsInRleHQiLCJub1dyYXAiLCJfX25vV3JhcCIsInJlcGxhY2VTcGVjaWFsQ2hhcnMiLCJlbmFibGVPblNlbGVjdCIsImRlZmF1bHRWYWx1ZXNFeHRlbnNpb25GdW5jdGlvbiIsImRlZmF1bHRWYWx1ZXNGdW5jdGlvbiIsInBvc2l0aW9uIiwiYW5jaG9yIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJpc05hdmlnYWJsZSIsImlzQWN0aW9uTmF2aWdhYmxlIiwicmVxdWlyZXNTZWxlY3Rpb24iLCJlbmFibGVBdXRvU2Nyb2xsIiwiaW5saW5lIiwiRGVmYXVsdCIsImFubm90YXRpb25QYXRoIiwicmVzb2x2ZWRCaW5kaW5nIiwicmVzdWx0IiwiaXNDb25zdGFudCIsInZhbHVlIiwiX3R5cGUiLCJtZXRob2RQYXRoIiwiZm9ybWF0UmVzdWx0IiwicGF0aEluTW9kZWwiLCJmcG1Gb3JtYXR0ZXIiLCJjdXN0b21Jc0VuYWJsZWRDaGVjayIsImdldEVudGl0eVR5cGUiLCJpZkVsc2UiLCJhbmQiLCJncmVhdGVyT3JFcXVhbCIsImdldEVuYWJsZWRGb3JBbm5vdGF0aW9uQWN0aW9uIiwiYWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsInBhcmFtZXRlcnMiLCJiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJvcGVyYXRpb25BdmFpbGFibGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwiYW5ub3RhdGlvbnMiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwicGF0aCIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJlcXVhbCIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsImFNYXBwaW5ncyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwib01hcHBpbmciLCJvU09NYXBwaW5nIiwiTG9jYWxQcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0UHJvcGVydHkiLCJiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZCIsImRldGFpbE9yRGlzcGxheSIsImRldGFpbCIsImRpc3BsYXkiLCJyb3V0ZSIsImFmdGVyRXhlY3V0aW9uIiwibmF2aWdhdGVUb0luc3RhbmNlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0LCBDdXN0b21FbGVtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IFBsYWNlbWVudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBnZXRDdXN0b21BY3Rpb25JRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB0eXBlIHtcblx0Q3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdE1hbmlmZXN0QWN0aW9uLFxuXHROYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgZnBtRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGdyZWF0ZXJPckVxdWFsLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IHJlcGxhY2VTcGVjaWFsQ2hhcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG5leHBvcnQgZW51bSBCdXR0b25UeXBlIHtcblx0QWNjZXB0ID0gXCJBY2NlcHRcIixcblx0QXR0ZW50aW9uID0gXCJBdHRlbnRpb25cIixcblx0QmFjayA9IFwiQmFja1wiLFxuXHRDcml0aWNhbCA9IFwiQ3JpdGljYWxcIixcblx0RGVmYXVsdCA9IFwiRGVmYXVsdFwiLFxuXHRFbXBoYXNpemVkID0gXCJFbXBoYXNpemVkXCIsXG5cdEdob3N0ID0gXCJHaG9zdFwiLFxuXHROZWdhdGl2ZSA9IFwiTmVnYXRpdmVcIixcblx0TmV1dHJhbCA9IFwiTmV1dHJhbFwiLFxuXHRSZWplY3QgPSBcIlJlamVjdFwiLFxuXHRTdWNjZXNzID0gXCJTdWNjZXNzXCIsXG5cdFRyYW5zcGFyZW50ID0gXCJUcmFuc3BhcmVudFwiLFxuXHRVbnN0eWxlZCA9IFwiVW5zdHlsZWRcIixcblx0VXAgPSBcIlVwXCJcbn1cblxuZXhwb3J0IHR5cGUgQmFzZUFjdGlvbiA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0aWQ/OiBzdHJpbmc7XG5cdHRleHQ/OiBzdHJpbmc7XG5cdHR5cGU/OiBBY3Rpb25UeXBlO1xuXHRwcmVzcz86IHN0cmluZztcblx0ZW5hYmxlZD86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXHR2aXNpYmxlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdGVuYWJsZU9uU2VsZWN0Pzogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0ZGVmYXVsdFZhbHVlc0V4dGVuc2lvbkZ1bmN0aW9uPzogc3RyaW5nO1xuXHRpc05hdmlnYWJsZT86IGJvb2xlYW47XG5cdGVuYWJsZUF1dG9TY3JvbGw/OiBib29sZWFuO1xuXHRyZXF1aXJlc0RpYWxvZz86IHN0cmluZztcblx0YmluZGluZz86IHN0cmluZztcblx0YnV0dG9uVHlwZT86IEJ1dHRvblR5cGUuR2hvc3QgfCBCdXR0b25UeXBlLlRyYW5zcGFyZW50IHwgc3RyaW5nO1xuXHRwYXJlbnRFbnRpdHlEZWxldGVFbmFibGVkPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdG1lbnU/OiAoc3RyaW5nIHwgQ3VzdG9tQWN0aW9uIHwgQmFzZUFjdGlvbilbXTtcblx0ZmFjZXROYW1lPzogc3RyaW5nO1xuXHRjb21tYW5kPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgQW5ub3RhdGlvbkFjdGlvbiA9IEJhc2VBY3Rpb24gJiB7XG5cdHR5cGU6IEFjdGlvblR5cGUuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIHwgQWN0aW9uVHlwZS5EYXRhRmllbGRGb3JBY3Rpb247XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGlkPzogc3RyaW5nO1xuXHRjdXN0b21EYXRhPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIGZvciBjdXN0b20gYWN0aW9uc1xuICpcbiAqIEB0eXBlZGVmIEN1c3RvbUFjdGlvblxuICovXG5leHBvcnQgdHlwZSBDdXN0b21BY3Rpb24gPSBDdXN0b21FbGVtZW50PFxuXHRCYXNlQWN0aW9uICYge1xuXHRcdHR5cGU/OiBBY3Rpb25UeXBlO1xuXHRcdGhhbmRsZXJNZXRob2Q/OiBzdHJpbmc7XG5cdFx0aGFuZGxlck1vZHVsZT86IHN0cmluZztcblx0XHRtZW51PzogKHN0cmluZyB8IEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW107XG5cdFx0bm9XcmFwPzogYm9vbGVhbjsgLy8gSW5kaWNhdGVzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB0aGUgd3JhcHBpbmcgZnJvbSB0aGUgRlBNSGVscGVyXG5cdFx0cmVxdWlyZXNTZWxlY3Rpb24/OiBib29sZWFuO1xuXHRcdGRlZmF1bHRBY3Rpb24/OiBzdHJpbmcgfCBDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uOyAvL0luZGljYXRlcyB3aGV0aGVyIGEgZGVmYXVsdCBhY3Rpb24gZXhpc3RzIGluIHRoaXMgY29udGV4dFxuXHR9XG4+O1xuXG4vLyBSZXVzZSBvZiBDb25maWd1cmFibGVPYmplY3QgYW5kIEN1c3RvbUVsZW1lbnQgaXMgZG9uZSBmb3Igb3JkZXJpbmdcbmV4cG9ydCB0eXBlIENvbnZlcnRlckFjdGlvbiA9IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb247XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkQWN0aW9uID0ge1xuXHRhY3Rpb25zOiBCYXNlQWN0aW9uW107XG5cdGNvbW1hbmRBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+O1xufTtcblxuZnVuY3Rpb24gbWFwQWN0aW9uKFxuXHRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21BY3Rpb24+LFxuXHRhQW5ub3RhdGlvbkFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0YUhpZGRlbkhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXSxcblx0Y29tbWFuZEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4sXG5cdG1lbnVJdGVtczogKEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW10gPSBbXSxcblx0bWVudUtleTogc3RyaW5nIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51VmlzaWJsZTogYW55LFxuXHRtZW51VmlzaWJsZUNiOiBGdW5jdGlvblxuKSB7XG5cdGxldCBhY3Rpb246IEJhc2VBY3Rpb24gfCBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQgPSBhQW5ub3RhdGlvbkFjdGlvbnMuZmluZCgoYWN0aW9uOiBCYXNlQWN0aW9uKSA9PiBhY3Rpb24ua2V5ID09PSBtZW51S2V5KTtcblx0aWYgKCFhY3Rpb24pIHtcblx0XHRhY3Rpb24gPSBhY3Rpb25zW21lbnVLZXkgYXMgc3RyaW5nXTtcblx0fSBlbHNlIHtcblx0XHQvL2NoZWNrIGlmIFwiZW5hYmxlZFwiIGlzIG92ZXJ3cml0dGVuIHZpYSBhIG1hbmlmZXN0IGVudHJ5XG5cdFx0Y29uc3QgZW5hYmxlZDogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCB1bmRlZmluZWQgPSBhY3Rpb25zW2FjdGlvbi5rZXldPy5lbmFibGVkO1xuXHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRhY3Rpb24uZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdFx0fVxuXHRcdGlmIChhY3Rpb25zW2FjdGlvbi5rZXldKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHByb3AgaW4gYWN0aW9uc1thY3Rpb24ua2V5XSkge1xuXHRcdFx0XHRpZiAoIShhY3Rpb24gYXMgYW55KVtwcm9wXSAmJiBwcm9wICE9PSBcIm1lbnVcIikge1xuXHRcdFx0XHRcdChhY3Rpb24gYXMgYW55KVtwcm9wXSA9IChhY3Rpb25zW2FjdGlvbi5rZXldIGFzIGFueSlbcHJvcF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoXG5cdFx0KGFjdGlvbj8udmlzaWJsZSB8fFxuXHRcdFx0YWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckFjdGlvbiB8fFxuXHRcdFx0YWN0aW9uPy50eXBlID09PSBBY3Rpb25UeXBlLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikgJiZcblx0XHQhYUhpZGRlbkhlYWRlckFjdGlvbnMuZmluZCgoaGlkZGVuQWN0aW9uKSA9PiBoaWRkZW5BY3Rpb24ua2V5ID09PSBtZW51S2V5KVxuXHQpIHtcblx0XHRtZW51VmlzaWJsZUNiKFxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24ob3IocmVzb2x2ZUJpbmRpbmdTdHJpbmcoKGFjdGlvbiBhcyBhbnkpLnZpc2libGUsIFwiYm9vbGVhblwiKSwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcobWVudVZpc2libGUsIFwiYm9vbGVhblwiKSkpXG5cdFx0KTtcblx0XHRtZW51SXRlbXMucHVzaChhY3Rpb24pO1xuXHR9XG5cdGlmIChhY3Rpb24/LmNvbW1hbmQpIHtcblx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb24ua2V5XSA9IGFjdGlvbiBhcyBDdXN0b21BY3Rpb247XG5cdH1cblxuXHRyZXR1cm4gbWVudUtleSBhcyBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgbWVudSBhY3Rpb24gZnJvbSBtYW5pZmVzdCBhY3Rpb25zLlxuICpcbiAqIEBwYXJhbSBhY3Rpb25zIFRoZSBtYW5pZmVzdCBkZWZpbml0aW9uXG4gKiBAcGFyYW0gYUFubm90YXRpb25BY3Rpb25zIFRoZSBhbm5vdGF0aW9uIGFjdGlvbnMgZGVmaW5pdGlvblxuICogQHBhcmFtIGFIaWRkZW5IZWFkZXJBY3Rpb25zXG4gKiBAcmV0dXJucyBUaGUgYWN0aW9ucyBmcm9tIHRoZSBtYW5pZmVzdCBhbmQgdGhlIG1lbnUgb3B0aW9uIHRoYXQgd2VyZSBhZGRlZFxuICovXG5mdW5jdGlvbiBwcmVwYXJlTWVudUFjdGlvbihcblx0YWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPixcblx0YUFubm90YXRpb25BY3Rpb25zOiBCYXNlQWN0aW9uW10sXG5cdGFIaWRkZW5IZWFkZXJBY3Rpb25zOiBCYXNlQWN0aW9uW11cbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWxsQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRsZXQgbWVudUl0ZW1LZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRjb25zdCBjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBhY3Rpb25zKSB7XG5cdFx0aWYgKGFjdGlvbnNbYWN0aW9uS2V5XT8uZGVmYXVsdEFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBtZW51SXRlbXM6IChDdXN0b21BY3Rpb24gfCBCYXNlQWN0aW9uKVtdID0gW107XG5cdFx0XHRsZXQgbWVudVZpc2libGU6IGFueSA9IHRydWU7XG5cblx0XHRcdG1hcEFjdGlvbihcblx0XHRcdFx0YWN0aW9ucyxcblx0XHRcdFx0YUFubm90YXRpb25BY3Rpb25zLFxuXHRcdFx0XHRhSGlkZGVuSGVhZGVyQWN0aW9ucyxcblx0XHRcdFx0Y29tbWFuZEFjdGlvbnMsXG5cdFx0XHRcdG1lbnVJdGVtcyxcblx0XHRcdFx0YWN0aW9uc1thY3Rpb25LZXldPy5kZWZhdWx0QWN0aW9uIGFzIHN0cmluZyxcblx0XHRcdFx0bWVudVZpc2libGUsXG5cdFx0XHRcdGZ1bmN0aW9uIChpYk1lbnVWaXNpYmxlOiBib29sZWFuKSB7XG5cdFx0XHRcdFx0bWVudVZpc2libGUgPSBpYk1lbnVWaXNpYmxlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAodHlwZW9mIG1lbnVJdGVtc1swXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRhY3Rpb25zW2FjdGlvbktleV0uZGVmYXVsdEFjdGlvbiA9IG1lbnVJdGVtc1swXTtcblx0XHRcdH1cblx0XHRcdC8vYWN0aW9ucz8uTWVudUFjdGlvbnNDcmVhdGVGcm9tVGVtcGxhdGU/Lm1lbnU/LnB1c2goYWN0aW9ucy5NZW51QWN0aW9uc0NyZWF0ZUZyb21UZW1wbGF0ZS5kZWZhdWx0QWN0aW9uKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogQ3VzdG9tQWN0aW9uID0gYWN0aW9uc1thY3Rpb25LZXldO1xuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlLk1lbnUpIHtcblx0XHRcdGNvbnN0IG1lbnVJdGVtczogKEN1c3RvbUFjdGlvbiB8IEJhc2VBY3Rpb24pW10gPSBbXTtcblx0XHRcdGxldCBtZW51VmlzaWJsZTogYW55ID0gZmFsc2U7XG5cdFx0XHRsZXQgX21lbnVJdGVtS2V5cyA9XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLm1lbnU/Lm1hcCgobWVudUtleTogc3RyaW5nIHwgQ3VzdG9tQWN0aW9uKSA9PlxuXHRcdFx0XHRcdG1hcEFjdGlvbihcblx0XHRcdFx0XHRcdGFjdGlvbnMsXG5cdFx0XHRcdFx0XHRhQW5ub3RhdGlvbkFjdGlvbnMsXG5cdFx0XHRcdFx0XHRhSGlkZGVuSGVhZGVyQWN0aW9ucyxcblx0XHRcdFx0XHRcdGNvbW1hbmRBY3Rpb25zLFxuXHRcdFx0XHRcdFx0bWVudUl0ZW1zLFxuXHRcdFx0XHRcdFx0bWVudUtleSxcblx0XHRcdFx0XHRcdG1lbnVWaXNpYmxlLFxuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gKGliTWVudVZpc2libGU6IGJvb2xlYW4pIHtcblx0XHRcdFx0XHRcdFx0bWVudVZpc2libGUgPSBpYk1lbnVWaXNpYmxlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KSA/PyBbXTtcblxuXHRcdFx0Ly8gU2hvdyBtZW51IGJ1dHRvbiBpZiBpdCBoYXMgb25lIG9yIG1vcmUgdGhlbiAxIGl0ZW1zIHZpc2libGVcblx0XHRcdGlmIChtZW51SXRlbXMubGVuZ3RoKSB7XG5cdFx0XHRcdG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPSBtZW51VmlzaWJsZTtcblx0XHRcdFx0bWFuaWZlc3RBY3Rpb24ubWVudSA9IG1lbnVJdGVtcztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9tZW51SXRlbUtleXMgPSBbYWN0aW9uS2V5XTtcblx0XHRcdH1cblxuXHRcdFx0bWVudUl0ZW1LZXlzID0gWy4uLm1lbnVJdGVtS2V5cywgLi4uX21lbnVJdGVtS2V5c107XG5cdFx0fVxuXHRcdGlmIChhSGlkZGVuSGVhZGVyQWN0aW9ucy5maW5kKChoaWRkZW5BY3Rpb24pID0+IGhpZGRlbkFjdGlvbi5rZXkgPT09IGFjdGlvbktleSkpIHtcblx0XHRcdG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPSBcImZhbHNlXCI7XG5cdFx0fVxuXHRcdGlmIChtYW5pZmVzdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRjb21tYW5kQWN0aW9uc1thY3Rpb25LZXldID0gbWFuaWZlc3RBY3Rpb247XG5cdFx0fVxuXHRcdGFsbEFjdGlvbnNbYWN0aW9uS2V5XSA9IG1hbmlmZXN0QWN0aW9uO1xuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRtZW51SXRlbUtleXM/LmZvckVhY2goKGFjdGlvbktleTogc3RyaW5nKSA9PiBkZWxldGUgYWxsQWN0aW9uc1thY3Rpb25LZXldKTtcblx0cmV0dXJuIHtcblx0XHRcImFjdGlvbnNcIjogYWxsQWN0aW9ucyxcblx0XHRcImNvbW1hbmRBY3Rpb25zXCI6IGNvbW1hbmRBY3Rpb25zXG5cdH07XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVBY3Rpb25zID0gKGFjdGlvbnM6IEJhc2VBY3Rpb25bXSk6IEJhc2VBY3Rpb25bXSA9PiB7XG5cdGxldCBvTWVudUl0ZW1LZXlzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cdGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG5cdFx0aWYgKGFjdGlvbj8ubWVudT8ubGVuZ3RoKSB7XG5cdFx0XHRvTWVudUl0ZW1LZXlzID0gYWN0aW9uLm1lbnUucmVkdWNlKChpdGVtLCB7IGtleSB9OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKGtleSAmJiAhaXRlbVtrZXldKSB7XG5cdFx0XHRcdFx0aXRlbVtrZXldID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gaXRlbTtcblx0XHRcdH0sIG9NZW51SXRlbUtleXMpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiAhb01lbnVJdGVtS2V5c1thY3Rpb24ua2V5XSk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbiBhY3Rpb24gZGVmYXVsdCB2YWx1ZSBiYXNlZCBvbiBpdHMga2luZC5cbiAqXG4gKiBEZWZhdWx0IHByb3BlcnR5IHZhbHVlIGZvciBjdXN0b20gYWN0aW9ucyBpZiBub3Qgb3ZlcndyaXR0ZW4gaW4gbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIG1hbmlmZXN0QWN0aW9uIFRoZSBhY3Rpb24gY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEBwYXJhbSBpc0Fubm90YXRpb25BY3Rpb24gV2hldGhlciB0aGUgYWN0aW9uLCBkZWZpbmVkIGluIG1hbmlmZXN0LCBjb3JyZXNwb25kcyB0byBhbiBleGlzdGluZyBhbm5vdGF0aW9uIGFjdGlvbi5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXRlcm1pbmVkIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgY29sdW1uXG4gKi9cbmNvbnN0IF9nZXRNYW5pZmVzdEVuYWJsZWQgPSBmdW5jdGlvbiAoXG5cdG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbixcblx0aXNBbm5vdGF0aW9uQWN0aW9uOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG5cdGlmIChpc0Fubm90YXRpb25BY3Rpb24gJiYgbWFuaWZlc3RBY3Rpb24uZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gSWYgYW5ub3RhdGlvbiBhY3Rpb24gaGFzIG5vIHByb3BlcnR5IGRlZmluZWQgaW4gbWFuaWZlc3QsXG5cdFx0Ly8gZG8gbm90IG92ZXJ3cml0ZSBpdCB3aXRoIG1hbmlmZXN0IGFjdGlvbidzIGRlZmF1bHQgdmFsdWUuXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvLyBSZXR1cm4gd2hhdCBpcyBkZWZpbmVkIGluIG1hbmlmZXN0LlxuXHRyZXR1cm4gZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50KG1hbmlmZXN0QWN0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgYWN0aW9uIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gdGhlIG1hbmlmZXN0IHNldHRpbmdzLlxuICpcbiAqIEBwYXJhbSBtYW5pZmVzdEFjdGlvbnMgVGhlIG1hbmlmZXN0IGFjdGlvbnNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGFBbm5vdGF0aW9uQWN0aW9ucyBUaGUgYW5ub3RhdGlvbiBhY3Rpb25zIGRlZmluaXRpb25cbiAqIEBwYXJhbSBuYXZpZ2F0aW9uU2V0dGluZ3MgVGhlIG5hdmlnYXRpb24gc2V0dGluZ3NcbiAqIEBwYXJhbSBjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncyBUaGUgbmF2aWdhdGlvbiBzZXR0aW5ncyB0byBiZSBjb25zaWRlcmVkXG4gKiBAcGFyYW0gYUhpZGRlbkhlYWRlckFjdGlvbnMgVGhlIGhpZGRlbiBoZWFkZXIgYWN0aW9uc1xuICogQHBhcmFtIGZhY2V0TmFtZSBUaGUgZmFjZXQgd2hlcmUgYW4gYWN0aW9uIGlzIGRpc3BsYXllZCBpZiBpdCBpcyBpbmxpbmVcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb25zIGZyb20gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KFxuXHRtYW5pZmVzdEFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0QWN0aW9uPiB8IHVuZGVmaW5lZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YUFubm90YXRpb25BY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRuYXZpZ2F0aW9uU2V0dGluZ3M/OiBOYXZpZ2F0aW9uU2V0dGluZ3NDb25maWd1cmF0aW9uLFxuXHRjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncz86IGJvb2xlYW4sXG5cdGFIaWRkZW5IZWFkZXJBY3Rpb25zPzogQmFzZUFjdGlvbltdLFxuXHRmYWNldE5hbWU/OiBzdHJpbmdcbik6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEN1c3RvbUFjdGlvbj4+IHtcblx0Y29uc3QgYWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHQvLyBjb25zdCBjb21tYW5kQWN0aW9uczogUmVjb3JkPHN0cmluZywgQ3VzdG9tQWN0aW9uPiA9IHt9O1xuXHRmb3IgKGNvbnN0IGFjdGlvbktleSBpbiBtYW5pZmVzdEFjdGlvbnMpIHtcblx0XHRjb25zdCBtYW5pZmVzdEFjdGlvbjogTWFuaWZlc3RBY3Rpb24gPSBtYW5pZmVzdEFjdGlvbnNbYWN0aW9uS2V5XTtcblx0XHRjb25zdCBsYXN0RG90SW5kZXggPSBtYW5pZmVzdEFjdGlvbi5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpIHx8IC0xO1xuXHRcdGNvbnN0IG9Bbm5vdGF0aW9uQWN0aW9uID0gYUFubm90YXRpb25BY3Rpb25zPy5maW5kKChvYmopID0+IHtcblx0XHRcdHJldHVybiBvYmoua2V5ID09PSBhY3Rpb25LZXk7XG5cdFx0fSk7XG5cblx0XHQvLyBUbyBpZGVudGlmeSB0aGUgYW5ub3RhdGlvbiBhY3Rpb24gcHJvcGVydHkgb3ZlcndyaXRlIHZpYSBtYW5pZmVzdCB1c2UtY2FzZS5cblx0XHRjb25zdCBpc0Fubm90YXRpb25BY3Rpb24gPSBvQW5ub3RhdGlvbkFjdGlvbiA/IHRydWUgOiBmYWxzZTtcblx0XHRpZiAobWFuaWZlc3RBY3Rpb24uZmFjZXROYW1lKSB7XG5cdFx0XHRmYWNldE5hbWUgPSBtYW5pZmVzdEFjdGlvbi5mYWNldE5hbWU7XG5cdFx0fVxuXG5cdFx0YWN0aW9uc1thY3Rpb25LZXldID0ge1xuXHRcdFx0aWQ6IG9Bbm5vdGF0aW9uQWN0aW9uID8gYWN0aW9uS2V5IDogZ2V0Q3VzdG9tQWN0aW9uSUQoYWN0aW9uS2V5KSxcblx0XHRcdHZpc2libGU6IG1hbmlmZXN0QWN0aW9uLnZpc2libGUgPT09IHVuZGVmaW5lZCA/IFwidHJ1ZVwiIDogbWFuaWZlc3RBY3Rpb24udmlzaWJsZSxcblx0XHRcdGVuYWJsZWQ6IF9nZXRNYW5pZmVzdEVuYWJsZWQobWFuaWZlc3RBY3Rpb24sIGlzQW5ub3RhdGlvbkFjdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRoYW5kbGVyTW9kdWxlOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyAmJiBtYW5pZmVzdEFjdGlvbi5wcmVzcy5zdWJzdHJpbmcoMCwgbGFzdERvdEluZGV4KS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKSxcblx0XHRcdGhhbmRsZXJNZXRob2Q6IG1hbmlmZXN0QWN0aW9uLnByZXNzICYmIG1hbmlmZXN0QWN0aW9uLnByZXNzLnN1YnN0cmluZyhsYXN0RG90SW5kZXggKyAxKSxcblx0XHRcdHByZXNzOiBtYW5pZmVzdEFjdGlvbi5wcmVzcyxcblx0XHRcdHRleHQ6IG1hbmlmZXN0QWN0aW9uLnRleHQsXG5cdFx0XHRub1dyYXA6IG1hbmlmZXN0QWN0aW9uLl9fbm9XcmFwLFxuXHRcdFx0a2V5OiByZXBsYWNlU3BlY2lhbENoYXJzKGFjdGlvbktleSksXG5cdFx0XHRlbmFibGVPblNlbGVjdDogbWFuaWZlc3RBY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRkZWZhdWx0VmFsdWVzRXh0ZW5zaW9uRnVuY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRWYWx1ZXNGdW5jdGlvbixcblx0XHRcdHBvc2l0aW9uOiB7XG5cdFx0XHRcdGFuY2hvcjogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24/LmFuY2hvcixcblx0XHRcdFx0cGxhY2VtZW50OiBtYW5pZmVzdEFjdGlvbi5wb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gUGxhY2VtZW50LkFmdGVyIDogbWFuaWZlc3RBY3Rpb24ucG9zaXRpb24ucGxhY2VtZW50XG5cdFx0XHR9LFxuXHRcdFx0aXNOYXZpZ2FibGU6IGlzQWN0aW9uTmF2aWdhYmxlKG1hbmlmZXN0QWN0aW9uLCBuYXZpZ2F0aW9uU2V0dGluZ3MsIGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzKSxcblx0XHRcdGNvbW1hbmQ6IG1hbmlmZXN0QWN0aW9uLmNvbW1hbmQsXG5cdFx0XHRyZXF1aXJlc1NlbGVjdGlvbjogbWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWFuaWZlc3RBY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24sXG5cdFx0XHRlbmFibGVBdXRvU2Nyb2xsOiBlbmFibGVBdXRvU2Nyb2xsKG1hbmlmZXN0QWN0aW9uKSxcblx0XHRcdG1lbnU6IG1hbmlmZXN0QWN0aW9uLm1lbnUgPz8gW10sXG5cdFx0XHRmYWNldE5hbWU6IG1hbmlmZXN0QWN0aW9uLmlubGluZSA/IGZhY2V0TmFtZSA6IHVuZGVmaW5lZCxcblx0XHRcdGRlZmF1bHRBY3Rpb246IG1hbmlmZXN0QWN0aW9uLmRlZmF1bHRBY3Rpb25cblx0XHR9O1xuXHRcdC8vIERvIG5vdCBvdmVycmlkZSB0aGUgJ3R5cGUnIGdpdmVuIGluIGFuIGFubm90YXRpb24gYWN0aW9uXG5cdFx0aWYgKCFpc0Fubm90YXRpb25BY3Rpb24pIHtcblx0XHRcdGFjdGlvbnNbYWN0aW9uS2V5XS50eXBlID0gbWFuaWZlc3RBY3Rpb24ubWVudSA/IEFjdGlvblR5cGUuTWVudSA6IEFjdGlvblR5cGUuRGVmYXVsdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0aW9uc1thY3Rpb25LZXldLnR5cGUgPSBvQW5ub3RhdGlvbkFjdGlvbj8udHlwZTtcblx0XHRcdGFjdGlvbnNbYWN0aW9uS2V5XS5hbm5vdGF0aW9uUGF0aCA9IG9Bbm5vdGF0aW9uQWN0aW9uPy5hbm5vdGF0aW9uUGF0aDtcblx0XHRcdGFjdGlvbnNbYWN0aW9uS2V5XS5wcmVzcyA9IG9Bbm5vdGF0aW9uQWN0aW9uPy5wcmVzcztcblx0XHRcdGFjdGlvbnNbYWN0aW9uS2V5XS5lbmFibGVkID0gYWN0aW9uc1thY3Rpb25LZXldLmVuYWJsZWQgPT09IHVuZGVmaW5lZCA/IG9Bbm5vdGF0aW9uQWN0aW9uPy5lbmFibGVkIDogYWN0aW9uc1thY3Rpb25LZXldLmVuYWJsZWQ7XG5cdFx0XHRhY3Rpb25zW2FjdGlvbktleV0udmlzaWJsZSA9IG9Bbm5vdGF0aW9uQWN0aW9uPy52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBvQW5ub3RhdGlvbkFjdGlvbj8udmlzaWJsZSA6IGFjdGlvbnNbYWN0aW9uS2V5XS52aXNpYmxlO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBwcmVwYXJlTWVudUFjdGlvbihhY3Rpb25zLCBhQW5ub3RhdGlvbkFjdGlvbnMgPz8gW10sIGFIaWRkZW5IZWFkZXJBY3Rpb25zID8/IFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0TWFuaWZlc3RBY3Rpb25FbmFibGVtZW50KG1hbmlmZXN0QWN0aW9uOiBNYW5pZmVzdEFjdGlvbiwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3QgcmVzb2x2ZWRCaW5kaW5nID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcobWFuaWZlc3RBY3Rpb24uZW5hYmxlZCBhcyBzdHJpbmcsIFwiYm9vbGVhblwiKTtcblx0bGV0IHJlc3VsdDogYW55O1xuXHRpZiAoaXNDb25zdGFudChyZXNvbHZlZEJpbmRpbmcpICYmIHJlc29sdmVkQmluZGluZy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly8gTm8gZW5hYmxlZCBwcm9wZXJ0eSBjb25maWd1cmVkIGluIG1hbmlmZXN0IGZvciB0aGUgY3VzdG9tIGFjdGlvbiAtLT4gZW5hYmxlIGN1c3RvbSBhY3Rpb25cblx0XHRyZXN1bHQgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKGlzQ29uc3RhbnQocmVzb2x2ZWRCaW5kaW5nKSAmJiB0eXBlb2YgcmVzb2x2ZWRCaW5kaW5nLnZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdC8vIHRydWUgLyBmYWxzZVxuXHRcdHJlc3VsdCA9IHJlc29sdmVkQmluZGluZy52YWx1ZTtcblx0fSBlbHNlIGlmIChyZXNvbHZlZEJpbmRpbmcuX3R5cGUgIT09IFwiRW1iZWRkZWRCaW5kaW5nXCIgJiYgcmVzb2x2ZWRCaW5kaW5nLl90eXBlICE9PSBcIkVtYmVkZGVkRXhwcmVzc2lvbkJpbmRpbmdcIikge1xuXHRcdC8vIFRoZW4gaXQncyBhIG1vZHVsZS1tZXRob2QgcmVmZXJlbmNlIFwic2FwLnh4eC55eXkuZG9Tb21ldGhpbmdcIlxuXHRcdGNvbnN0IG1ldGhvZFBhdGggPSByZXNvbHZlZEJpbmRpbmcudmFsdWUgYXMgc3RyaW5nO1xuXHRcdC8vIEZJWE1FOiBUaGUgY3VzdG9tIFwiaXNFbmFibGVkXCIgY2hlY2sgZG9lcyBub3QgdHJpZ2dlciAoYmVjYXVzZSBub25lIG9mIHRoZSBib3VuZCB2YWx1ZXMgY2hhbmdlcylcblx0XHRyZXN1bHQgPSBmb3JtYXRSZXN1bHQoXG5cdFx0XHRbcGF0aEluTW9kZWwoXCIvXCIsIFwiJHZpZXdcIiksIG1ldGhvZFBhdGgsIHBhdGhJbk1vZGVsKFwic2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpXSxcblx0XHRcdGZwbUZvcm1hdHRlci5jdXN0b21Jc0VuYWJsZWRDaGVjayBhcyBhbnksXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gdGhlbiBpdCdzIGEgYmluZGluZ1xuXHRcdHJlc3VsdCA9IHJlc29sdmVkQmluZGluZztcblx0fVxuXG5cdC8vIENvbnNpZGVyIHJlcXVpcmVzU2VsZWN0aW9uIHByb3BlcnR5IHRvIGluY2x1ZGUgc2VsZWN0ZWRDb250ZXh0cyBpbiB0aGUgYmluZGluZyBleHByZXNzaW9uXG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRpZkVsc2UoXG5cdFx0XHRtYW5pZmVzdEFjdGlvbi5yZXF1aXJlc1NlbGVjdGlvbiA9PT0gdHJ1ZSxcblx0XHRcdGFuZChncmVhdGVyT3JFcXVhbChwYXRoSW5Nb2RlbChcIm51bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKSwgcmVzdWx0KSxcblx0XHRcdHJlc3VsdFxuXHRcdClcblx0KTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIGFuIGFubm90YXRpb24tYmFzZWQgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25UYXJnZXQgVGhlIGluc3RhbmNlIG9mIHRoZSBhY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSAnZW5hYmxlZCcgcHJvcGVydHkgb2YgdGhlIGFjdGlvbiBidXR0b24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmFibGVkRm9yQW5ub3RhdGlvbkFjdGlvbihcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YWN0aW9uVGFyZ2V0OiBBY3Rpb24gfCB1bmRlZmluZWRcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0aWYgKGFjdGlvblRhcmdldD8uaXNCb3VuZCAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBcInRydWVcIjtcblx0fVxuXHRpZiAoYWN0aW9uVGFyZ2V0Py5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUgPSBhY3Rpb25UYXJnZXQ/LnBhcmFtZXRlcnNbMF0uZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0b3BlcmF0aW9uQXZhaWxhYmxlRXhwcmVzc2lvbiA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0YWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFtdLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IGJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lKVxuXHRcdFx0KTtcblx0XHRpZiAoYWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKG9wZXJhdGlvbkF2YWlsYWJsZUV4cHJlc3Npb24sIHRydWUpKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIFwidHJ1ZVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKGFNYXBwaW5nczogYW55W10pOiBhbnlbXSB7XG5cdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBhbnlbXSA9IFtdO1xuXHRhTWFwcGluZ3MuZm9yRWFjaCgob01hcHBpbmcpID0+IHtcblx0XHRjb25zdCBvU09NYXBwaW5nID0ge1xuXHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IG9NYXBwaW5nLkxvY2FsUHJvcGVydHkudmFsdWVcblx0XHRcdH0sXG5cdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogb01hcHBpbmcuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVxuXHRcdH07XG5cdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ3MucHVzaChvU09NYXBwaW5nKTtcblx0fSk7XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWN0aW9uTmF2aWdhYmxlKFxuXHRhY3Rpb246IE1hbmlmZXN0QWN0aW9uIHwgQ3VzdG9tRGVmaW5lZFRhYmxlQ29sdW1uRm9yT3ZlcnJpZGUsXG5cdG5hdmlnYXRpb25TZXR0aW5ncz86IE5hdmlnYXRpb25TZXR0aW5nc0NvbmZpZ3VyYXRpb24sXG5cdGNvbnNpZGVyTmF2aWdhdGlvblNldHRpbmdzPzogYm9vbGVhblxuKTogYm9vbGVhbiB7XG5cdGxldCBiSXNOYXZpZ2F0aW9uQ29uZmlndXJlZDogYm9vbGVhbiA9IHRydWU7XG5cdGlmIChjb25zaWRlck5hdmlnYXRpb25TZXR0aW5ncykge1xuXHRcdGNvbnN0IGRldGFpbE9yRGlzcGxheSA9IG5hdmlnYXRpb25TZXR0aW5ncyAmJiAobmF2aWdhdGlvblNldHRpbmdzLmRldGFpbCB8fCBuYXZpZ2F0aW9uU2V0dGluZ3MuZGlzcGxheSk7XG5cdFx0YklzTmF2aWdhdGlvbkNvbmZpZ3VyZWQgPSBkZXRhaWxPckRpc3BsYXk/LnJvdXRlID8gdHJ1ZSA6IGZhbHNlO1xuXHR9XG5cdC8vIHdoZW4gZW5hYmxlQXV0b1Njcm9sbCBpcyB0cnVlIHRoZSBuYXZpZ2F0ZVRvSW5zdGFuY2UgZmVhdHVyZSBpcyBkaXNhYmxlZFxuXHRpZiAoXG5cdFx0KGFjdGlvbiAmJlxuXHRcdFx0YWN0aW9uLmFmdGVyRXhlY3V0aW9uICYmXG5cdFx0XHQoYWN0aW9uLmFmdGVyRXhlY3V0aW9uPy5uYXZpZ2F0ZVRvSW5zdGFuY2UgPT09IGZhbHNlIHx8IGFjdGlvbi5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZSkpIHx8XG5cdFx0IWJJc05hdmlnYXRpb25Db25maWd1cmVkXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUF1dG9TY3JvbGwoYWN0aW9uOiBNYW5pZmVzdEFjdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gYWN0aW9uPy5hZnRlckV4ZWN1dGlvbj8uZW5hYmxlQXV0b1Njcm9sbCA9PT0gdHJ1ZTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTZCWUEsVTs7YUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7SUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7SUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7SUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7SUFBQUEsVTtJQUFBQSxVO0lBQUFBLFU7S0FBQUEsVSxLQUFBQSxVOzs7O0VBc0VaLFNBQVNDLFNBQVQsQ0FDQ0MsT0FERCxFQUVDQyxrQkFGRCxFQUdDQyxvQkFIRCxFQUlDQyxjQUpELEVBU0U7SUFBQTs7SUFBQSxJQUpEQyxTQUlDLHVFQUowQyxFQUkxQztJQUFBLElBSERDLE9BR0M7SUFBQSxJQUZEQyxXQUVDO0lBQUEsSUFEREMsYUFDQztJQUNELElBQUlDLE1BQTZDLEdBQUdQLGtCQUFrQixDQUFDUSxJQUFuQixDQUF3QixVQUFDRCxNQUFEO01BQUEsT0FBd0JBLE1BQU0sQ0FBQ0UsR0FBUCxLQUFlTCxPQUF2QztJQUFBLENBQXhCLENBQXBEOztJQUNBLElBQUksQ0FBQ0csTUFBTCxFQUFhO01BQ1pBLE1BQU0sR0FBR1IsT0FBTyxDQUFDSyxPQUFELENBQWhCO0lBQ0EsQ0FGRCxNQUVPO01BQUE7O01BQ047TUFDQSxJQUFNTSxPQUFxRCwwQkFBR1gsT0FBTyxDQUFDUSxNQUFNLENBQUNFLEdBQVIsQ0FBVix3REFBRyxvQkFBcUJDLE9BQW5GOztNQUNBLElBQUlBLE9BQUosRUFBYTtRQUNaSCxNQUFNLENBQUNHLE9BQVAsR0FBaUJBLE9BQWpCO01BQ0E7O01BQ0QsSUFB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
|