@sapui5/sap.fe.core 1.127.2 → 1.129.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.js +3 -9
- package/src/sap/fe/core/ActionRuntime.ts +3 -7
- package/src/sap/fe/core/AppComponent.js +9 -19
- package/src/sap/fe/core/AppComponent.ts +2 -12
- package/src/sap/fe/core/AppStateHandler.js +3 -11
- package/src/sap/fe/core/AppStateHandler.ts +0 -7
- package/src/sap/fe/core/BaseController.js +4 -8
- package/src/sap/fe/core/BaseController.ts +0 -5
- package/src/sap/fe/core/CommonUtils.js +1 -9
- package/src/sap/fe/core/CommonUtils.ts +4 -8
- package/src/sap/fe/core/ExtensionAPI.js +10 -25
- package/src/sap/fe/core/ExtensionAPI.ts +4 -19
- package/src/sap/fe/core/InsightsFormattersExtension.js +5 -3
- package/src/sap/fe/core/PageController.js +7 -10
- package/src/sap/fe/core/PageController.ts +0 -3
- package/src/sap/fe/core/ResourceModel.js +3 -5
- package/src/sap/fe/core/ResourceModel.ts +0 -2
- package/src/sap/fe/core/ReuseComponent.js +8 -14
- package/src/sap/fe/core/ReuseComponent.ts +0 -6
- package/src/sap/fe/core/TemplateComponent.js +37 -9
- package/src/sap/fe/core/TemplateComponent.ts +3 -2
- package/src/sap/fe/core/TemplateModel.js +5 -5
- package/src/sap/fe/core/TemplateModel.ts +0 -1
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +44 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +7 -12
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +0 -5
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +61 -65
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +60 -63
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +21 -5
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +0 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +6 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -20
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -11
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +0 -6
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +11 -10
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -7
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +0 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +3 -10
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +0 -7
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +5 -8
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +0 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +225 -155
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +248 -164
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -3
- package/src/sap/fe/core/controllerextensions/Feedback.ts +0 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +4 -7
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -3
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -25
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -21
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +22 -34
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +25 -31
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +8 -21
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +4 -15
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +68 -31
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +78 -32
- package/src/sap/fe/core/controllerextensions/PageReady.js +4 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +4 -8
- package/src/sap/fe/core/controllerextensions/Paginator.ts +0 -4
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -4
- package/src/sap/fe/core/controllerextensions/Recommendations.js +15 -24
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +13 -20
- package/src/sap/fe/core/controllerextensions/Routing.js +4 -10
- package/src/sap/fe/core/controllerextensions/Routing.ts +0 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +17 -11
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.js +49 -45
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +54 -41
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +10 -34
- package/src/sap/fe/core/controllerextensions/ViewState.ts +3 -49
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +6 -8
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +0 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +4 -3
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +16 -12
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +126 -74
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +158 -91
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -22
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +0 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -20
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +11 -17
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +191 -767
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +277 -1024
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +0 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +381 -250
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +467 -301
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +2 -6
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +0 -5
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +2 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +4 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -6
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +0 -4
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +4 -41
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -37
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -1
- package/src/sap/fe/core/controls/Any.js +1 -2
- package/src/sap/fe/core/controls/Any.ts +0 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -2
- package/src/sap/fe/core/controls/AnyElement.ts +0 -1
- package/src/sap/fe/core/controls/CommandExecution.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.js +23 -10
- package/src/sap/fe/core/controls/ComponentLoader.ts +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +10 -13
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +0 -6
- package/src/sap/fe/core/controls/EventDelegateHook.js +8 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +7 -7
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +140 -24
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +141 -10
- package/src/sap/fe/core/converters/ConverterContext.js +8 -30
- package/src/sap/fe/core/converters/ConverterContext.ts +7 -29
- package/src/sap/fe/core/converters/ManifestSettings.js +37 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -40
- package/src/sap/fe/core/converters/ManifestWrapper.ts +13 -46
- package/src/sap/fe/core/converters/MetaModelConverter.js +44 -48
- package/src/sap/fe/core/converters/MetaModelConverter.ts +50 -48
- package/src/sap/fe/core/converters/TemplateConverter.js +3 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +0 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +0 -26
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +13 -26
- package/src/sap/fe/core/converters/controls/Common/Action.ts +13 -31
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +0 -5
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +2 -4
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +1 -2
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +0 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -7
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +11 -6
- package/src/sap/fe/core/converters/controls/Common/Table.js +159 -141
- package/src/sap/fe/core/converters/controls/Common/Table.ts +166 -122
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +5 -30
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +3 -29
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +43 -55
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +43 -47
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +0 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +2 -7
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -11
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +0 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -10
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +0 -9
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -7
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +0 -6
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +0 -8
- package/src/sap/fe/core/converters/helpers/ID.js +1 -2
- package/src/sap/fe/core/converters/helpers/ID.ts +0 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +0 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -5
- package/src/sap/fe/core/converters/helpers/Key.ts +0 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -2
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +0 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +0 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +6 -27
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +9 -26
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -16
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +0 -15
- package/src/sap/fe/core/definition/FEDefinition.js +2550 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -12
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +9 -10
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +8 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +0 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +0 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +9 -14
- package/src/sap/fe/core/formatters/FiscalFormat.ts +0 -11
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -4
- package/src/sap/fe/core/formatters/KPIFormatter.ts +0 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +6 -3
- package/src/sap/fe/core/formatters/StandardFormatter.ts +6 -2
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -4
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -3
- package/src/sap/fe/core/fpm/Component.js +14 -17
- package/src/sap/fe/core/fpm/Component.ts +7 -10
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +3 -10
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +0 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -13
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +0 -11
- package/src/sap/fe/core/helpers/BindingHelper.js +1 -4
- package/src/sap/fe/core/helpers/BindingHelper.ts +0 -3
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +0 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +61 -32
- package/src/sap/fe/core/helpers/DeleteHelper.ts +79 -33
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +0 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +0 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +0 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -8
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +0 -7
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +7 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +0 -2
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +3 -8
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +0 -5
- package/src/sap/fe/core/helpers/MetaPath.js +1 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +0 -6
- package/src/sap/fe/core/helpers/ModelHelper.js +55 -35
- package/src/sap/fe/core/helpers/ModelHelper.ts +64 -38
- package/src/sap/fe/core/helpers/PasteHelper.js +77 -24
- package/src/sap/fe/core/helpers/PasteHelper.ts +105 -23
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -3
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +0 -2
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -4
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +0 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +3 -4
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +0 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -2
- package/src/sap/fe/core/helpers/SizeHelper.ts +0 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +7 -17
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -17
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -12
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +0 -11
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -10
- package/src/sap/fe/core/helpers/TitleHelper.ts +0 -9
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -2
- package/src/sap/fe/core/helpers/ToES6Promise.ts +0 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -15
- package/src/sap/fe/core/helpers/TypeGuards.ts +0 -14
- package/src/sap/fe/core/helpers/WebSocket.js +1 -1
- package/src/sap/fe/core/library.js +10 -44
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +8 -45
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -6
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +0 -5
- package/src/sap/fe/core/messagebundle.properties +12 -1
- package/src/sap/fe/core/messagebundle_ar.properties +8 -0
- package/src/sap/fe/core/messagebundle_bg.properties +8 -0
- package/src/sap/fe/core/messagebundle_ca.properties +8 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +8 -0
- package/src/sap/fe/core/messagebundle_cs.properties +9 -1
- package/src/sap/fe/core/messagebundle_cy.properties +8 -0
- package/src/sap/fe/core/messagebundle_da.properties +8 -0
- package/src/sap/fe/core/messagebundle_de.properties +8 -0
- package/src/sap/fe/core/messagebundle_el.properties +8 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +144 -65
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +273 -194
- package/src/sap/fe/core/messagebundle_es.properties +9 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +8 -0
- package/src/sap/fe/core/messagebundle_et.properties +8 -0
- package/src/sap/fe/core/messagebundle_fi.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr.properties +8 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +8 -0
- package/src/sap/fe/core/messagebundle_hi.properties +9 -1
- package/src/sap/fe/core/messagebundle_hr.properties +8 -0
- package/src/sap/fe/core/messagebundle_hu.properties +8 -0
- package/src/sap/fe/core/messagebundle_id.properties +12 -4
- package/src/sap/fe/core/messagebundle_it.properties +8 -0
- package/src/sap/fe/core/messagebundle_iw.properties +8 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -0
- package/src/sap/fe/core/messagebundle_kk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ko.properties +8 -0
- package/src/sap/fe/core/messagebundle_lt.properties +8 -0
- package/src/sap/fe/core/messagebundle_lv.properties +8 -0
- package/src/sap/fe/core/messagebundle_mk.properties +8 -0
- package/src/sap/fe/core/messagebundle_ms.properties +8 -0
- package/src/sap/fe/core/messagebundle_nl.properties +16 -8
- package/src/sap/fe/core/messagebundle_no.properties +8 -0
- package/src/sap/fe/core/messagebundle_pl.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt.properties +8 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +8 -0
- package/src/sap/fe/core/messagebundle_ro.properties +8 -0
- package/src/sap/fe/core/messagebundle_ru.properties +8 -0
- package/src/sap/fe/core/messagebundle_sh.properties +8 -0
- package/src/sap/fe/core/messagebundle_sk.properties +8 -0
- package/src/sap/fe/core/messagebundle_sl.properties +8 -0
- package/src/sap/fe/core/messagebundle_sr.properties +8 -0
- package/src/sap/fe/core/messagebundle_sv.properties +8 -0
- package/src/sap/fe/core/messagebundle_th.properties +12 -4
- package/src/sap/fe/core/messagebundle_tr.properties +8 -0
- package/src/sap/fe/core/messagebundle_uk.properties +10 -2
- package/src/sap/fe/core/messagebundle_vi.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +8 -0
- package/src/sap/fe/core/operationsHelper.js +22 -7
- package/src/sap/fe/core/operationsHelper.ts +24 -5
- package/src/sap/fe/core/rootView/Fcl.controller.js +7 -27
- package/src/sap/fe/core/rootView/Fcl.controller.ts +0 -18
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -12
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +0 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +10 -24
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +3 -16
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +4 -4
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +3 -4
- package/src/sap/fe/core/services/ContextSharingServiceFactory.ts +0 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +13 -20
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +11 -17
- package/src/sap/fe/core/services/NavigationServiceFactory.js +11 -21
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -17
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +7 -19
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +0 -12
- package/src/sap/fe/core/services/ShellServicesFactory.js +8 -44
- package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -41
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +19 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +14 -57
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +6 -14
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +2 -10
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +17 -7
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -3
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +11 -24
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +0 -19
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -31
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +0 -27
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -4
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +0 -3
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +7 -7
- 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 +4 -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/ActionHelper.js +1 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +0 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +0 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -6
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +0 -5
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +0 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +0 -17
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +6 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -4
- package/src/sap/fe/core/templating/EntitySetHelper.ts +0 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +3 -4
- package/src/sap/fe/core/templating/FieldControlHelper.js +4 -9
- package/src/sap/fe/core/templating/FieldControlHelper.ts +3 -9
- 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 -31
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -30
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +1 -7
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +0 -6
- package/src/sap/fe/core/templating/UIFormatters.js +18 -14
- package/src/sap/fe/core/templating/UIFormatters.ts +30 -18
- package/src/sap/fe/core/type/Date.js +3 -6
- package/src/sap/fe/core/type/Date.ts +0 -3
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/FiscalDate.js +3 -9
- package/src/sap/fe/core/type/FiscalDate.ts +0 -6
- package/src/sap/fe/core/type/InputMask.js +3 -7
- package/src/sap/fe/core/type/InputMask.ts +0 -4
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
/******/ "use strict";
|
|
9
9
|
/******/ var __webpack_modules__ = ({
|
|
10
10
|
|
|
11
|
-
/***/
|
|
11
|
+
/***/ 899:
|
|
12
12
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
16
16
|
exports.convert = void 0;
|
|
17
|
-
const VocabularyReferences_1 = __webpack_require__(
|
|
18
|
-
const utils_1 = __webpack_require__(
|
|
17
|
+
const VocabularyReferences_1 = __webpack_require__(683);
|
|
18
|
+
const utils_1 = __webpack_require__(236);
|
|
19
19
|
/**
|
|
20
20
|
* Symbol to extend an annotation with the reference to its target.
|
|
21
21
|
*/
|
|
@@ -1070,7 +1070,7 @@ exports.convert = convert;
|
|
|
1070
1070
|
|
|
1071
1071
|
/***/ }),
|
|
1072
1072
|
|
|
1073
|
-
/***/
|
|
1073
|
+
/***/ 217:
|
|
1074
1074
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1075
1075
|
|
|
1076
1076
|
|
|
@@ -1089,24 +1089,24 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
1089
1089
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
1090
1090
|
};
|
|
1091
1091
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1092
|
-
__exportStar(__webpack_require__(
|
|
1093
|
-
__exportStar(__webpack_require__(
|
|
1094
|
-
__exportStar(__webpack_require__(
|
|
1092
|
+
__exportStar(__webpack_require__(899), exports);
|
|
1093
|
+
__exportStar(__webpack_require__(236), exports);
|
|
1094
|
+
__exportStar(__webpack_require__(273), exports);
|
|
1095
1095
|
|
|
1096
1096
|
|
|
1097
1097
|
/***/ }),
|
|
1098
1098
|
|
|
1099
|
-
/***/
|
|
1099
|
+
/***/ 236:
|
|
1100
1100
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1101
1101
|
|
|
1102
1102
|
|
|
1103
1103
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1104
1104
|
exports.mergeAnnotations = exports.addGetByValue = exports.createIndexedFind = exports.lazy = exports.Decimal = exports.isComplexTypeDefinition = exports.unalias = exports.alias = exports.substringBeforeLast = exports.substringBeforeFirst = exports.splitAtLast = exports.splitAtFirst = exports.defaultReferences = exports.TermToTypes = exports.EnumIsFlag = void 0;
|
|
1105
|
-
var EnumIsFlag_1 = __webpack_require__(
|
|
1105
|
+
var EnumIsFlag_1 = __webpack_require__(55);
|
|
1106
1106
|
Object.defineProperty(exports, "EnumIsFlag", ({ enumerable: true, get: function () { return EnumIsFlag_1.EnumIsFlag; } }));
|
|
1107
|
-
var TermToTypes_1 = __webpack_require__(
|
|
1107
|
+
var TermToTypes_1 = __webpack_require__(675);
|
|
1108
1108
|
Object.defineProperty(exports, "TermToTypes", ({ enumerable: true, get: function () { return TermToTypes_1.TermToTypes; } }));
|
|
1109
|
-
var VocabularyReferences_1 = __webpack_require__(
|
|
1109
|
+
var VocabularyReferences_1 = __webpack_require__(683);
|
|
1110
1110
|
Object.defineProperty(exports, "defaultReferences", ({ enumerable: true, get: function () { return VocabularyReferences_1.VocabularyReferences; } }));
|
|
1111
1111
|
function splitAt(string, index) {
|
|
1112
1112
|
return index < 0 ? [string, ''] : [string.substring(0, index), string.substring(index + 1)];
|
|
@@ -1365,13 +1365,13 @@ exports.mergeAnnotations = mergeAnnotations;
|
|
|
1365
1365
|
|
|
1366
1366
|
/***/ }),
|
|
1367
1367
|
|
|
1368
|
-
/***/
|
|
1368
|
+
/***/ 273:
|
|
1369
1369
|
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
|
|
1370
1370
|
|
|
1371
1371
|
|
|
1372
1372
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
1373
1373
|
exports.revertTermToGenericType = void 0;
|
|
1374
|
-
const utils_1 = __webpack_require__(
|
|
1374
|
+
const utils_1 = __webpack_require__(236);
|
|
1375
1375
|
/**
|
|
1376
1376
|
* Revert an object to its raw type equivalent.
|
|
1377
1377
|
*
|
|
@@ -1448,7 +1448,8 @@ function revertObjectToRawType(references, value) {
|
|
|
1448
1448
|
else if (value.type === 'Apply') {
|
|
1449
1449
|
result = {
|
|
1450
1450
|
type: 'Apply',
|
|
1451
|
-
Apply: value
|
|
1451
|
+
$Apply: value.$Apply,
|
|
1452
|
+
$Function: value.$Function
|
|
1452
1453
|
};
|
|
1453
1454
|
}
|
|
1454
1455
|
else if (value.type === 'Null') {
|
|
@@ -1652,7 +1653,7 @@ exports.revertTermToGenericType = revertTermToGenericType;
|
|
|
1652
1653
|
|
|
1653
1654
|
/***/ }),
|
|
1654
1655
|
|
|
1655
|
-
/***/
|
|
1656
|
+
/***/ 55:
|
|
1656
1657
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1657
1658
|
|
|
1658
1659
|
|
|
@@ -1697,7 +1698,7 @@ exports.EnumIsFlag = {
|
|
|
1697
1698
|
|
|
1698
1699
|
/***/ }),
|
|
1699
1700
|
|
|
1700
|
-
/***/
|
|
1701
|
+
/***/ 675:
|
|
1701
1702
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1702
1703
|
|
|
1703
1704
|
|
|
@@ -1943,11 +1944,13 @@ var TermToTypes;
|
|
|
1943
1944
|
TermToTypes["com.sap.vocabularies.UI.v1.IsImageURL"] = "Org.OData.Core.V1.Tag";
|
|
1944
1945
|
TermToTypes["com.sap.vocabularies.UI.v1.IsImage"] = "Org.OData.Core.V1.Tag";
|
|
1945
1946
|
TermToTypes["com.sap.vocabularies.UI.v1.MultiLineText"] = "Org.OData.Core.V1.Tag";
|
|
1947
|
+
TermToTypes["com.sap.vocabularies.UI.v1.InputMask"] = "com.sap.vocabularies.UI.v1.InputMaskType";
|
|
1946
1948
|
TermToTypes["com.sap.vocabularies.UI.v1.TextArrangement"] = "com.sap.vocabularies.UI.v1.TextArrangementType";
|
|
1947
1949
|
TermToTypes["com.sap.vocabularies.UI.v1.Note"] = "com.sap.vocabularies.UI.v1.NoteType";
|
|
1948
1950
|
TermToTypes["com.sap.vocabularies.UI.v1.Importance"] = "com.sap.vocabularies.UI.v1.ImportanceType";
|
|
1949
1951
|
TermToTypes["com.sap.vocabularies.UI.v1.Hidden"] = "Org.OData.Core.V1.Tag";
|
|
1950
1952
|
TermToTypes["com.sap.vocabularies.UI.v1.IsCopyAction"] = "Org.OData.Core.V1.Tag";
|
|
1953
|
+
TermToTypes["com.sap.vocabularies.UI.v1.IsAIOperation"] = "Org.OData.Core.V1.Tag";
|
|
1951
1954
|
TermToTypes["com.sap.vocabularies.UI.v1.CreateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1952
1955
|
TermToTypes["com.sap.vocabularies.UI.v1.UpdateHidden"] = "Org.OData.Core.V1.Tag";
|
|
1953
1956
|
TermToTypes["com.sap.vocabularies.UI.v1.DeleteHidden"] = "Org.OData.Core.V1.Tag";
|
|
@@ -1961,16 +1964,18 @@ var TermToTypes;
|
|
|
1961
1964
|
TermToTypes["com.sap.vocabularies.UI.v1.ParameterDefaultValue"] = "Edm.PrimitiveType";
|
|
1962
1965
|
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationState"] = "com.sap.vocabularies.UI.v1.RecommendationStateType";
|
|
1963
1966
|
TermToTypes["com.sap.vocabularies.UI.v1.RecommendationList"] = "com.sap.vocabularies.UI.v1.RecommendationListType";
|
|
1967
|
+
TermToTypes["com.sap.vocabularies.UI.v1.Recommendations"] = "Edm.ComplexType";
|
|
1964
1968
|
TermToTypes["com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] = "Org.OData.Core.V1.Tag";
|
|
1965
1969
|
TermToTypes["com.sap.vocabularies.UI.v1.DoNotCheckScaleOfMeasuredQuantity"] = "Edm.Boolean";
|
|
1966
1970
|
TermToTypes["com.sap.vocabularies.HTML5.v1.CssDefaults"] = "com.sap.vocabularies.HTML5.v1.CssDefaultsType";
|
|
1967
1971
|
TermToTypes["com.sap.vocabularies.HTML5.v1.LinkTarget"] = "com.sap.vocabularies.HTML5.v1.LinkTargetType";
|
|
1972
|
+
TermToTypes["com.sap.vocabularies.HTML5.v1.RowSpanForDuplicateValues"] = "Org.OData.Core.V1.Tag";
|
|
1968
1973
|
})(TermToTypes = exports.TermToTypes || (exports.TermToTypes = {}));
|
|
1969
1974
|
|
|
1970
1975
|
|
|
1971
1976
|
/***/ }),
|
|
1972
1977
|
|
|
1973
|
-
/***/
|
|
1978
|
+
/***/ 683:
|
|
1974
1979
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1975
1980
|
|
|
1976
1981
|
|
|
@@ -2031,7 +2036,7 @@ exports.VocabularyReferences = [
|
|
|
2031
2036
|
/******/ // startup
|
|
2032
2037
|
/******/ // Load entry module and return exports
|
|
2033
2038
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
2034
|
-
/******/ var __webpack_exports__ = __webpack_require__(
|
|
2039
|
+
/******/ var __webpack_exports__ = __webpack_require__(217);
|
|
2035
2040
|
/******/ AnnotationConverter = __webpack_exports__;
|
|
2036
2041
|
/******/
|
|
2037
2042
|
/******/ })()
|
|
@@ -2039,4 +2044,4 @@ exports.VocabularyReferences = [
|
|
|
2039
2044
|
|
|
2040
2045
|
return AnnotationConverter;
|
|
2041
2046
|
},true);
|
|
2042
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvY29udmVydGVyLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrYW5ub3RhdGlvbi1jb252ZXJ0ZXJAMC44LjEyL25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguMTIvbm9kZV9tb2R1bGVzL0BzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIvc3JjL3dyaXRlYmFjay50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjEwLjExL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRW51bUlzRmxhZy5qcyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjEwLjExL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC4xMS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1ZvY2FidWxhcnlSZWZlcmVuY2VzLmpzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQSx3REFBb0c7QUFDcEcseUNBYWlCO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFVBQWlCLEVBQUUsYUFBa0I7SUFDM0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLEVBQUU7UUFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNsQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsYUFBYSxDQUNsQixTQUFvQixFQUNwQixZQUFpQixFQUNqQixJQUF3QixFQUN4QixlQUF3Qjs7SUFFeEIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQzlEO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FB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QkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QyxtQkFBbUIsS0FBSzs7Ozs7Ozs7QUN6UXBEO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsTUFBTSxvS0FBb0s7QUFDMUssTUFBTSx5SUFBeUk7QUFDL0ksTUFBTSxpS0FBaUs7QUFDdkssTUFBTSw4SkFBOEo7QUFDcEssTUFBTSwySkFBMko7QUFDakssTUFBTSxxSkFBcUo7QUFDM0osTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx1SUFBdUk7QUFDN0ksTUFBTSw2SUFBNkk7QUFDbkosTUFBTSw0SkFBNEo7QUFDbEssTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx5SkFBeUo7QUFDL0osTUFBTSwwSUFBMEk7QUFDaEosTUFBTSwySEFBMkg7QUFDakksTUFBTTtBQUNOOzs7Ozs7O1VDdEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiQW5ub3RhdGlvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQWN0aW9uLFxuICAgIEFjdGlvbkltcG9ydCxcbiAgICBBY3Rpb25QYXJhbWV0ZXIsXG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uUGF0aCxcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgQ29tcGxleFR5cGUsXG4gICAgQ29udmVydGVkTWV0YWRhdGEsXG4gICAgRW50aXR5Q29udGFpbmVyLFxuICAgIEVudGl0eVNldCxcbiAgICBFbnRpdHlUeXBlLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgUmF3QWN0aW9uLFxuICAgIFJhd0FjdGlvbkltcG9ydCxcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJhd0NvbXBsZXhUeXBlLFxuICAgIFJhd0VudGl0eUNvbnRhaW5lcixcbiAgICBSYXdFbnRpdHlTZXQsXG4gICAgUmF3RW50aXR5VHlwZSxcbiAgICBSYXdNZXRhZGF0YSxcbiAgICBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGUsXG4gICAgUmVzb2x1dGlvblRhcmdldCxcbiAgICBTaW5nbGV0b24sXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuaW1wb3J0IHtcbiAgICBhZGRHZXRCeVZhbHVlLFxuICAgIGFsaWFzLFxuICAgIERlY2ltYWwsXG4gICAgRW51bUlzRmxhZyxcbiAgICBsYXp5LFxuICAgIG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+KFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHN0YXJ0RWxlbWVudDogYW55LFxuICAgIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBhbm5vdGF0aW9uc1Rlcm0/OiBzdHJpbmdcbik6IFJlc29sdXRpb25UYXJnZXQ8VD4ge1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB1bmRlZmluZWQsIG9iamVjdFBhdGg6IFtdLCBtZXNzYWdlczogW10gfTtcbiAgICB9XG5cbiAgICAvLyBhYnNvbHV0ZSBwYXRocyBhbHdheXMgc3RhcnQgYXQgdGhlIGVudGl0eSBjb250YWluZXJcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICBzdGFydEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vIHdpbGwgcmVzb2x2ZSB0byB0aGUgZW50aXR5IGNvbnRhaW5lciAoc2VlIGJlbG93KVxuICAgIH1cblxuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKS5yZWR1Y2UoKHRhcmdldFBhdGgsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgaWYgKHNlZ21lbnQuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAgICAgLy8gU2VwYXJhdGUgb3V0IHRoZSBhbm5vdGF0aW9uXG4gICAgICAgICAgICBjb25zdCBbcGF0aFBhcnQsIGFubm90YXRpb25QYXJ0XSA9IHNwbGl0QXRGaXJzdChzZWdtZW50LCAnQCcpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKHBhdGhQYXJ0KTtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChgQCR7YW5ub3RhdGlvblBhcnR9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goc2VnbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFBhdGg7XG4gICAgfSwgW10gYXMgc3RyaW5nW10pO1xuXG4gICAgLy8gZGV0ZXJtaW5lIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIHJlc29sdXRpb25cbiAgICBpZiAoc3RhcnRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gbm8gc3RhcnRpbmcgcG9pbnQgZ2l2ZW46IHN0YXJ0IGF0IHRoZSBlbnRpdHkgY29udGFpbmVyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXS5zdGFydHNXaXRoKGAke2NvbnZlcnRlci5yYXdTY2hlbWEubmFtZXNwYWNlfS5gKSAmJlxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdICE9PSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCk/LmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBpbiB0aGUgcGF0aCB0aGF0IGlzIG5vdCB0aGUgZW50aXR5IGNvbnRhaW5lci5cbiAgICAgICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUocGF0aFNlZ21lbnRzWzBdKSA/P1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihgJHtwYXRoU2VnbWVudHNbMF19KClgKTsgLy8gdW5ib3VuZCBhY3Rpb25cbiAgICAgICAgICAgIHBhdGhTZWdtZW50cy5zaGlmdCgpOyAvLyBMZXQncyByZW1vdmUgdGhlIGZpcnN0IHBhdGggZWxlbWVudFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhcnRFbGVtZW50ID0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnRbQU5OT1RBVElPTl9UQVJHRVRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gYW5ub3RhdGlvbjogc3RhcnQgYXQgdGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9IHN0YXJ0RWxlbWVudFtBTk5PVEFUSU9OX1RBUkdFVF07XG4gICAgfSBlbHNlIGlmIChzdGFydEVsZW1lbnQuX3R5cGUgPT09ICdQcm9wZXJ0eScpIHtcbiAgICAgICAgLy8gcHJvcGVydHk6IHN0YXJ0IGF0IHRoZSBlbnRpdHkgdHlwZSBvciBjb21wbGV4IHR5cGUgdGhlIHByb3BlcnR5IGJlbG9uZ3MgdG9cbiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudEZRTiA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0YXJ0RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUsICcvJyk7XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShwYXJlbnRFbGVtZW50RlFOKSA/PyBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQ29tcGxleFR5cGUocGFyZW50RWxlbWVudEZRTik7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gcGF0aFNlZ21lbnRzLnJlZHVjZShcbiAgICAgICAgKGN1cnJlbnQ6IFJlc29sdXRpb25UYXJnZXQ8YW55Piwgc2VnbWVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Lm1lc3NhZ2VzLnB1c2goeyBtZXNzYWdlIH0pO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcblxuICAgICAgICAgICAgLy8gQW5ub3RhdGlvblxuICAgICAgICAgICAgaWYgKHNlZ21lbnQuc3RhcnRzV2l0aCgnQCcpICYmIHNlZ21lbnQgIT09ICdAJHVpNS5vdmVybG9hZCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbdm9jYWJ1bGFyeUFsaWFzLCB0ZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0oc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbiA9IGN1cnJlbnQudGFyZ2V0LmFubm90YXRpb25zW3ZvY2FidWxhcnlBbGlhcy5zdWJzdHJpbmcoMSldPy5bdGVybV07XG5cbiAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gYW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEFubm90YXRpb24gJyR7c2VnbWVudC5zdWJzdHJpbmcoMSl9JyBub3QgZm91bmQgb24gJHtjdXJyZW50LnRhcmdldC5fdHlwZX0gJyR7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldC5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSdgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gJFBhdGggLyAkQW5ub3RhdGlvblBhdGggc3ludGF4XG4gICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXQuJHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGxldCBzdWJQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckQW5ub3RhdGlvblBhdGgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YlBhdGggPSBjdXJyZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnQgPT09ICckUGF0aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IGN1cnJlbnQudGFyZ2V0LnBhdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1YlBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJUYXJnZXQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudC50YXJnZXRbQU5OT1RBVElPTl9UQVJHRVRdLCBzdWJQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgc3ViVGFyZ2V0Lm9iamVjdFBhdGguZm9yRWFjaCgodmlzaXRlZFN1Yk9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnQub2JqZWN0UGF0aC5pbmNsdWRlcyh2aXNpdGVkU3ViT2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCB2aXNpdGVkU3ViT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBzdWJUYXJnZXQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHRyYXZlcnNlIGJhc2VkIG9uIHRoZSBlbGVtZW50IHR5cGVcbiAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC50YXJnZXQ/Ll90eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnU2NoZW1hJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBlbGVtZW50OiBFbnRpdHlUeXBlLCBDb21wbGV4VHlwZSwgQWN0aW9uLCBFbnRpdHlDb250YWluZXIgP1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eUNvbnRhaW5lcic6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5Q29udGFpbmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgY29udmVydGVyLnVuYWxpYXMoc2VnbWVudCkgPT09IHRoaXNFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGVsZW1lbnQ6IEVudGl0eVNldCwgU2luZ2xldG9uIG9yIEFjdGlvbkltcG9ydD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50OiBFbnRpdHlTZXQgfCBTaW5nbGV0b24gfCBBY3Rpb25JbXBvcnQgfCB1bmRlZmluZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LmVudGl0eVNldHMuYnlfbmFtZShzZWdtZW50KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnNpbmdsZXRvbnMuYnlfbmFtZShzZWdtZW50KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LmFjdGlvbkltcG9ydHMuYnlfbmFtZShzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuZXh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0VudGl0eVNldCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnU2luZ2xldG9uJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEVudGl0eVNldCB8IFNpbmdsZXRvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW1wdHkgUGF0aCBhZnRlciBhbiBFbnRpdHlTZXQgb3IgU2luZ2xldG9uIG1lYW5zIEVudGl0eVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gdGhpc0VsZW1lbnQuZW50aXR5VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSB0aGlzRWxlbWVudC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVzb2x2aW5nIGF0IHRoZSBFbnRpdHlTZXQncyBvciBTaW5nbGV0b24ncyB0eXBlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCB0aGlzRWxlbWVudC5lbnRpdHlUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5VHlwZSc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5VHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IHNlZ21lbnQgPT09ICckVHlwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzRWxlbWVudC5lbnRpdHlQcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHkgPSB0aGlzRWxlbWVudC5uYXZpZ2F0aW9uUHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRpb25Qcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmF2aWdhdGlvblByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gc3Vic3RyaW5nQmVmb3JlRmlyc3QoY29udmVydGVyLnVuYWxpYXMoc2VnbWVudCksICcoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzRWxlbWVudC5hY3Rpb25zW2FjdGlvbk5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gYWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnQWN0aW9uSW1wb3J0Jzoge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZXNvbHZpbmcgYXQgdGhlIEFjdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudC50YXJnZXQuYWN0aW9uLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnQWN0aW9uJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aGlzRWxlbWVudCA9IGN1cnJlbnQudGFyZ2V0IGFzIEFjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICdAJHVpNS5vdmVybG9hZCcgfHwgc2VnbWVudCA9PT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJFBhcmFtZXRlcicgJiYgdGhpc0VsZW1lbnQuaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzW3NlZ21lbnQgYXMgYW55XSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQucGFyYW1ldGVycy5maW5kKChwYXJhbTogQWN0aW9uUGFyYW1ldGVyKSA9PiBwYXJhbS5uYW1lID09PSBzZWdtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmV4dEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdQcm9wZXJ0eSc6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgUHJvcGVydHk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSBvZiB0aGUgQ29tcGxleFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzRWxlbWVudC50YXJnZXRUeXBlIGFzIENvbXBsZXhUeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdHlwZS5wcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gbmF2aWdhdGlvblByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb25QYXJhbWV0ZXInOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VkVHlwZSA9IChjdXJyZW50LnRhcmdldCBhcyBBY3Rpb25QYXJhbWV0ZXIpLnR5cGVSZWZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgcmVmZXJlbmNlZFR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eSc6XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIGF0IHRoZSBOYXZpZ2F0aW9uUHJvcGVydHkncyB0YXJnZXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgKGN1cnJlbnQudGFyZ2V0IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcmVzdWx0LnRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gcmVzdWx0Lm9iamVjdFBhdGgucmVkdWNlKGFwcGVuZE9iamVjdFBhdGgsIGN1cnJlbnQub2JqZWN0UGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LnRhcmdldFtzZWdtZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBjdXJyZW50LnRhcmdldFtzZWdtZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCBjdXJyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXJyb3IoXG4gICAgICAgICAgICAgICAgYEVsZW1lbnQgJyR7c2VnbWVudH0nIG5vdCBmb3VuZCBhdCAke2N1cnJlbnQudGFyZ2V0Ll90eXBlfSAnJHtjdXJyZW50LnRhcmdldC5mdWxseVF1YWxpZmllZE5hbWV9J2BcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHsgdGFyZ2V0OiBzdGFydEVsZW1lbnQsIG9iamVjdFBhdGg6IFtdLCBtZXNzYWdlczogW10gfVxuICAgICk7XG5cbiAgICAvLyBEaWFnbm9zdGljc1xuICAgIHJlc3VsdC5tZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiBjb252ZXJ0ZXIubG9nRXJyb3IobWVzc2FnZS5tZXNzYWdlKSk7XG4gICAgaWYgKCFyZXN1bHQudGFyZ2V0KSB7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uc1Rlcm0pIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBhbm5vdGF0aW9uc1Rlcm0sIHN0YXJ0RWxlbWVudC5mdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zVGVybSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxSZWNvcmQgVHlwZSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uVHlwZSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uUGF0aCA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgICAgICdVbmFibGUgdG8gcmVzb2x2ZSB0aGUgcGF0aCBleHByZXNzaW9uOiAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aCArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnSGludDogQ2hlY2sgYW5kIGNvcnJlY3QgdGhlIHBhdGggdmFsdWVzIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGluIHRoZSBtZXRhZGF0YSAoYW5ub3RhdGlvbi54bWwgZmlsZSBvciBDRFMgYW5ub3RhdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbik6IFxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb24gVGVybSA9ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoU2VnbWVudHNbMF0gK1xuICAgICAgICAgICAgICAgICAgICAnPicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8UHJvcGVydHlWYWx1ZSAgUGF0aD0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1sxXSArXG4gICAgICAgICAgICAgICAgICAgICc+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogVHlwZWd1YXJkIHRvIGNoZWNrIGlmIHRoZSBwYXRoIGNvbnRhaW5zIGFuIGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHBhdGhTdHIgdGhlIHBhdGggdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBpbiB0aGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gaXNBbm5vdGF0aW9uUGF0aChwYXRoU3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGF0aFN0ci5pbmNsdWRlcygnQCcpO1xufVxuXG50eXBlIEFubm90YXRpb25WYWx1ZTxUPiA9IFQgJiB7IFtBTk5PVEFUSU9OX1RBUkdFVF06IGFueSB9O1xuXG5mdW5jdGlvbiBtYXBQcm9wZXJ0eVBhdGgoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcHJvcGVydHlQYXRoOiB7IHR5cGU6ICdQcm9wZXJ0eVBhdGgnOyBQcm9wZXJ0eVBhdGg6IHN0cmluZyB9LFxuICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZXN1bHQ6IE9taXQ8QW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdQcm9wZXJ0eVBhdGgnLFxuICAgICAgICB2YWx1ZTogcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQcm9wZXJ0eVBhdGg+LFxuICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICgpID0+IHJlc29sdmVUYXJnZXQ8UHJvcGVydHk+KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlQYXRoLlByb3BlcnR5UGF0aCwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQcm9wZXJ0eVBhdGg+O1xufVxuXG5mdW5jdGlvbiBtYXBBbm5vdGF0aW9uUGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uUGF0aDogeyB0eXBlOiAnQW5ub3RhdGlvblBhdGgnOyBBbm5vdGF0aW9uUGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8QW5ub3RhdGlvblBhdGg8YW55Pj4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdBbm5vdGF0aW9uUGF0aCcsXG4gICAgICAgIHZhbHVlOiBjb252ZXJ0ZXIudW5hbGlhcyhhbm5vdGF0aW9uUGF0aC5Bbm5vdGF0aW9uUGF0aCksXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICBbQU5OT1RBVElPTl9UQVJHRVRdOiBjdXJyZW50VGFyZ2V0XG4gICAgfTtcblxuICAgIGxhenkoXG4gICAgICAgIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8QW5ub3RhdGlvblBhdGg8YW55Pj4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHJlc3VsdC52YWx1ZSwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+Pjtcbn1cblxuZnVuY3Rpb24gbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBuYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB7IHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJzsgTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8TmF2aWdhdGlvblByb3BlcnR5UGF0aD4sICckdGFyZ2V0Jz4gPSB7XG4gICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgdmFsdWU6IG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguTmF2aWdhdGlvblByb3BlcnR5UGF0aCA/PyAnJyxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PlxuICAgICAgICAgICAgcmVzb2x2ZVRhcmdldDxOYXZpZ2F0aW9uUHJvcGVydHk+KFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGguTmF2aWdhdGlvblByb3BlcnR5UGF0aCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybVxuICAgICAgICAgICAgKS50YXJnZXRcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8TmF2aWdhdGlvblByb3BlcnR5UGF0aD47XG59XG5cbmZ1bmN0aW9uIG1hcFBhdGgoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcGF0aDogeyB0eXBlOiAnUGF0aCc7IFBhdGg6IHN0cmluZyB9LFxuICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZXN1bHQ6IE9taXQ8QW5ub3RhdGlvblZhbHVlPFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxhbnk+PiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgICBwYXRoOiBwYXRoLlBhdGgsXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICBnZXRWYWx1ZSgpOiBhbnkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gVE9ETzogUmVxdWlyZWQgYWNjb3JkaW5nIHRvIHRoZSB0eXBlLi4uXG4gICAgICAgIH0sXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248YW55Pj4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldDxQcm9wZXJ0eT4oY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwYXRoLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXRcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBBbm5vdGF0aW9uVmFsdWU8UGF0aEFubm90YXRpb25FeHByZXNzaW9uPGFueT4+O1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRQcm9wZXJ0eTogc3RyaW5nLFxuICAgIGN1cnJlbnRTb3VyY2U6IHN0cmluZyxcbiAgICBwcm9wZXJ0eVZhbHVlOiBFeHByZXNzaW9uLFxuICAgIHZhbHVlRlFOOiBzdHJpbmdcbikge1xuICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc3dpdGNoIChwcm9wZXJ0eVZhbHVlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLlN0cmluZztcbiAgICAgICAgY2FzZSAnSW50JzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkludDtcbiAgICAgICAgY2FzZSAnQm9vbCc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5Cb29sO1xuICAgICAgICBjYXNlICdEZWNpbWFsJzpcbiAgICAgICAgICAgIHJldHVybiBEZWNpbWFsKHByb3BlcnR5VmFsdWUuRGVjaW1hbCk7XG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuRGF0ZTtcbiAgICAgICAgY2FzZSAnRW51bU1lbWJlcic6XG4gICAgICAgICAgICBjb25zdCBzcGxpdEVudW0gPSBwcm9wZXJ0eVZhbHVlLkVudW1NZW1iZXIuc3BsaXQoJyAnKS5tYXAoKGVudW1WYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuYWxpYXNlZCA9IGNvbnZlcnRlci51bmFsaWFzKGVudW1WYWx1ZSkgPz8gJyc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzKFZvY2FidWxhcnlSZWZlcmVuY2VzLCB1bmFsaWFzZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc3BsaXRFbnVtWzBdICE9PSB1bmRlZmluZWQgJiYgRW51bUlzRmxhZ1tzdWJzdHJpbmdCZWZvcmVGaXJzdChzcGxpdEVudW1bMF0sICcvJyldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0RW51bTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzcGxpdEVudW1bMF07XG5cbiAgICAgICAgY2FzZSAnUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBtYXBQcm9wZXJ0eVBhdGgoY29udmVydGVyLCBwcm9wZXJ0eVZhbHVlLCB2YWx1ZUZRTiwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pO1xuXG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgoY29udmVydGVyLCBwcm9wZXJ0eVZhbHVlLCB2YWx1ZUZRTiwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pO1xuXG4gICAgICAgIGNhc2UgJ0Fubm90YXRpb25QYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBtYXBBbm5vdGF0aW9uUGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnUGF0aCc6IHtcbiAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25QYXRoKHByb3BlcnR5VmFsdWUuUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAvLyBpbmxpbmUgdGhlIHRhcmdldFxuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcHJvcGVydHlWYWx1ZS5QYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFwUGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuUmVjb3JkLFxuICAgICAgICAgICAgICAgIHZhbHVlRlFOXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgY3VycmVudFNvdXJjZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlLkNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgdmFsdWVGUU5cbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ0FwcGx5JzpcbiAgICAgICAgY2FzZSAnTnVsbCc6XG4gICAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIGNhc2UgJ0VxJzpcbiAgICAgICAgY2FzZSAnTmUnOlxuICAgICAgICBjYXNlICdHdCc6XG4gICAgICAgIGNhc2UgJ0dlJzpcbiAgICAgICAgY2FzZSAnTHQnOlxuICAgICAgICBjYXNlICdMZSc6XG4gICAgICAgIGNhc2UgJ0lmJzpcbiAgICAgICAgY2FzZSAnQW5kJzpcbiAgICAgICAgY2FzZSAnT3InOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWU7XG4gICAgfVxufVxuXG4vKipcbiAqIEluZmVyIHRoZSB0eXBlIG9mIGEgdGVybSBiYXNlZCBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgICAgICAgQ29udmVydGVyXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgVGhlIGFubm90YXRpb24gdGVybVxuICogQHBhcmFtIGFubm90YXRpb25UYXJnZXQgIFRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICogQHBhcmFtIGN1cnJlbnRQcm9wZXJ0eSAgIFRoZSBjdXJyZW50IHByb3BlcnR5IG9mIHRoZSByZWNvcmRcbiAqIEByZXR1cm5zIFRoZSBpbmZlcnJlZCB0eXBlLlxuICovXG5mdW5jdGlvbiBpbmZlclR5cGVGcm9tVGVybShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uc1Rlcm06IHN0cmluZyxcbiAgICBhbm5vdGF0aW9uVGFyZ2V0OiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5Pzogc3RyaW5nXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZSA9IChUZXJtVG9UeXBlcyBhcyBhbnkpW2Fubm90YXRpb25zVGVybV07XG4gICAgaWYgKGN1cnJlbnRQcm9wZXJ0eSkge1xuICAgICAgICBhbm5vdGF0aW9uc1Rlcm0gPSBgJHtzdWJzdHJpbmdCZWZvcmVMYXN0KGFubm90YXRpb25zVGVybSwgJy4nKX0uJHtjdXJyZW50UHJvcGVydHl9YDtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IChUZXJtVG9UeXBlcyBhcyBhbnkpW2Fubm90YXRpb25zVGVybV07XG4gICAgfVxuXG4gICAgY29udmVydGVyLmxvZ0Vycm9yKFxuICAgICAgICBgVGhlIHR5cGUgb2YgdGhlIHJlY29yZCB1c2VkIHdpdGhpbiB0aGUgdGVybSAke2Fubm90YXRpb25zVGVybX0gd2FzIG5vdCBkZWZpbmVkIGFuZCB3YXMgaW5mZXJyZWQgYXMgJHt0YXJnZXRUeXBlfS5cbkhpbnQ6IElmIHBvc3NpYmxlLCB0cnkgdG8gbWFpbnRhaW4gdGhlIFR5cGUgcHJvcGVydHkgZm9yIGVhY2ggUmVjb3JkLlxuPEFubm90YXRpb25zIFRhcmdldD1cIiR7YW5ub3RhdGlvblRhcmdldH1cIj5cblx0PEFubm90YXRpb24gVGVybT1cIiR7YW5ub3RhdGlvbnNUZXJtfVwiPlxuXHRcdDxSZWNvcmQ+Li4uPC9SZWNvcmQ+XG5cdDwvQW5ub3RhdGlvbj5cbjwvQW5ub3RhdGlvbnM+YFxuICAgICk7XG5cbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKGFubm90YXRpb25Db250ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBhbm5vdGF0aW9uQ29udGVudC5oYXNPd25Qcm9wZXJ0eSgnQWN0aW9uJykgJiZcbiAgICAgICAgKGFubm90YXRpb25Db250ZW50LiRUeXBlID09PSAnY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9yQWN0aW9uJyB8fFxuICAgICAgICAgICAgYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uJylcbiAgICApO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZFR5cGUoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcmVjb3JkRGVmaW5pdGlvbjogQW5ub3RhdGlvblJlY29yZFxuKSB7XG4gICAgbGV0IHRhcmdldFR5cGU7XG4gICAgaWYgKCFyZWNvcmREZWZpbml0aW9uLnR5cGUgJiYgY3VycmVudFRlcm0pIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGluZmVyVHlwZUZyb21UZXJtKGNvbnZlcnRlciwgY3VycmVudFRlcm0sIGN1cnJlbnRUYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lLCBjdXJyZW50UHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFR5cGUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyZWNvcmREZWZpbml0aW9uLnR5cGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0VHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNvcmQoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIGFubm90YXRpb25SZWNvcmQ6IEFubm90YXRpb25SZWNvcmQsXG4gICAgY3VycmVudEZRTjogc3RyaW5nXG4pIHtcbiAgICBjb25zdCByZWNvcmQ6IGFueSA9IHtcbiAgICAgICAgJFR5cGU6IHBhcnNlUmVjb3JkVHlwZShjb252ZXJ0ZXIsIGN1cnJlbnRUZXJtLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50UHJvcGVydHksIGFubm90YXRpb25SZWNvcmQpLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGN1cnJlbnRGUU4sXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXQsXG4gICAgICAgIF9fc291cmNlOiBjdXJyZW50U291cmNlXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHlWYWx1ZSBvZiBhbm5vdGF0aW9uUmVjb3JkLnByb3BlcnR5VmFsdWVzKSB7XG4gICAgICAgIGxhenkocmVjb3JkLCBwcm9wZXJ0eVZhbHVlLm5hbWUsICgpID0+XG4gICAgICAgICAgICBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgYCR7Y3VycmVudEZRTn0vJHtwcm9wZXJ0eVZhbHVlLm5hbWV9YFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIGFubm90YXRpb25zIG9uIHRoZSByZWNvcmRcbiAgICBsYXp5KHJlY29yZCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zT25Bbm5vdGF0aW9uKGNvbnZlcnRlciwgYW5ub3RhdGlvblJlY29yZCwgcmVjb3JkKSk7XG5cbiAgICBpZiAoaXNEYXRhRmllbGRXaXRoRm9yQWN0aW9uKHJlY29yZCkpIHtcbiAgICAgICAgbGF6eShyZWNvcmQsICdBY3Rpb25UYXJnZXQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25OYW1lID0gY29udmVydGVyLnVuYWxpYXMocmVjb3JkLkFjdGlvbj8udG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICAgIC8vICgxKSBCb3VuZCBhY3Rpb24gb2YgdGhlIGFubm90YXRpb24gdGFyZ2V0P1xuICAgICAgICAgICAgbGV0IGFjdGlvblRhcmdldCA9IGN1cnJlbnRUYXJnZXQuYWN0aW9uc1thY3Rpb25OYW1lXTtcblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAoMikgQWN0aW9uSW1wb3J0ICg9IHVuYm91bmQgYWN0aW9uKT9cbiAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uSW1wb3J0KGFjdGlvbk5hbWUpPy5hY3Rpb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWN0aW9uVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gKDMpIEJvdW5kIGFjdGlvbiBvZiBhIGRpZmZlcmVudCBFbnRpdHlUeXBlICh0aGUgYWN0aW9uTmFtZSBpcyBmdWxseSBxdWFsaWZpZWQgaW4gdGhpcyBjYXNlKVxuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24oYWN0aW9uTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQ/LmlzQm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGAke3JlY29yZC5mdWxseVF1YWxpZmllZE5hbWV9OiBVbmFibGUgdG8gcmVzb2x2ZSAnJHtyZWNvcmQuQWN0aW9ufScgKCcke2FjdGlvbk5hbWV9JylgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25UYXJnZXQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3JkO1xufVxuXG5leHBvcnQgdHlwZSBDb2xsZWN0aW9uVHlwZSA9XG4gICAgfCAnUHJvcGVydHlQYXRoJ1xuICAgIHwgJ1BhdGgnXG4gICAgfCAnSWYnXG4gICAgfCAnQXBwbHknXG4gICAgfCAnTnVsbCdcbiAgICB8ICdBbmQnXG4gICAgfCAnRXEnXG4gICAgfCAnTmUnXG4gICAgfCAnTm90J1xuICAgIHwgJ0d0J1xuICAgIHwgJ0dlJ1xuICAgIHwgJ0x0J1xuICAgIHwgJ0xlJ1xuICAgIHwgJ09yJ1xuICAgIHwgJ0Fubm90YXRpb25QYXRoJ1xuICAgIHwgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnXG4gICAgfCAnUmVjb3JkJ1xuICAgIHwgJ1N0cmluZydcbiAgICB8ICdFbXB0eUNvbGxlY3Rpb24nO1xuXG4vKipcbiAqIFJldHJpZXZlIG9yIGluZmVyIHRoZSBjb2xsZWN0aW9uIHR5cGUgYmFzZWQgb24gaXRzIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb25EZWZpbml0aW9uXG4gKiBAcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdKTogQ29sbGVjdGlvblR5cGUge1xuICAgIGxldCB0eXBlOiBDb2xsZWN0aW9uVHlwZSA9IChjb2xsZWN0aW9uRGVmaW5pdGlvbiBhcyBhbnkpLnR5cGU7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCAmJiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29sSXRlbSA9IGNvbGxlY3Rpb25EZWZpbml0aW9uWzBdO1xuICAgICAgICBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdQcm9wZXJ0eVBhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1BhdGgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgnQW5ub3RhdGlvblBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdBbm5vdGF0aW9uUGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgndHlwZScpIHx8IGZpcnN0Q29sSXRlbS5oYXNPd25Qcm9wZXJ0eSgncHJvcGVydHlWYWx1ZXMnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1JlY29yZCc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpcnN0Q29sSXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnU3RyaW5nJztcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHR5cGUgPSAnRW1wdHlDb2xsZWN0aW9uJztcbiAgICB9XG4gICAgcmV0dXJuIHR5cGU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29sbGVjdGlvbihcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgY29sbGVjdGlvbkRlZmluaXRpb246IGFueVtdLFxuICAgIHBhcmVudEZRTjogc3RyaW5nXG4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uRGVmaW5pdGlvblR5cGUgPSBnZXRPckluZmVyQ29sbGVjdGlvblR5cGUoY29sbGVjdGlvbkRlZmluaXRpb24pO1xuXG4gICAgc3dpdGNoIChjb2xsZWN0aW9uRGVmaW5pdGlvblR5cGUpIHtcbiAgICAgICAgY2FzZSAnUHJvcGVydHlQYXRoJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGgsIGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIG1hcFByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnUGF0aCc6XG4gICAgICAgICAgICAvLyBUT0RPOiBtYWtlIGxhenk/XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHBhdGhWYWx1ZS5QYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwQW5ub3RhdGlvblBhdGgoY29udmVydGVyLCBwYXRoLCBgJHtwYXJlbnRGUU59LyR7aW5kZXh9YCwgY3VycmVudFRhcmdldCwgY3VycmVudFRlcm0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNhc2UgJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnUmVjb3JkJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHJlY29yZERlZmluaXRpb24sIHJlY29yZElkeCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVJlY29yZChcbiAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVybSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmREZWZpbml0aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtwYXJlbnRGUU59LyR7cmVjb3JkSWR4fWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdFcSc6XG4gICAgICAgIGNhc2UgJ05lJzpcbiAgICAgICAgY2FzZSAnTHQnOlxuICAgICAgICBjYXNlICdHdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdOb3QnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChpZlZhbHVlKSA9PiBpZlZhbHVlKTtcblxuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgoc3RyaW5nVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0cmluZ1ZhbHVlID09PSAnc3RyaW5nJyB8fCBzdHJpbmdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUuU3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoY29sbGVjdGlvbkRlZmluaXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1Y0TmF2aWdhdGlvblByb3BlcnR5KFxuICAgIG5hdlByb3A6IFJhd1YyTmF2aWdhdGlvblByb3BlcnR5IHwgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHlcbik6IG5hdlByb3AgaXMgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHkge1xuICAgIHJldHVybiAhIShuYXZQcm9wIGFzIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHkpLnRhcmdldFR5cGVOYW1lO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb246IFJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uIHtcbiAgICBsZXQgYW5ub3RhdGlvbjogYW55O1xuICAgIGlmIChyYXdBbm5vdGF0aW9uLnJlY29yZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uLnJlY29yZCxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VWYWx1ZShcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udmFsdWUgPz8geyB0eXBlOiAnQm9vbCcsIEJvb2w6IHRydWUgfSxcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyYXdBbm5vdGF0aW9uLmNvbGxlY3Rpb24pIHtcbiAgICAgICAgYW5ub3RhdGlvbiA9IHBhcnNlQ29sbGVjdGlvbihcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24uY29sbGVjdGlvbixcbiAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjYXNlJyk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgYW5ub3RhdGlvbikge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy13cmFwcGVyc1xuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdHJpbmcoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IEJvb2xlYW4oYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgTnVtYmVyKGFubm90YXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhbm5vdGF0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lO1xuICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gdGFyZ2V0O1xuXG4gICAgY29uc3QgW3ZvY0FsaWFzLCB2b2NUZXJtXSA9IGNvbnZlcnRlci5zcGxpdFRlcm0ocmF3QW5ub3RhdGlvbi50ZXJtKTtcblxuICAgIGFubm90YXRpb24udGVybSA9IGNvbnZlcnRlci51bmFsaWFzKGAke3ZvY0FsaWFzfS4ke3ZvY1Rlcm19YCwgVm9jYWJ1bGFyeVJlZmVyZW5jZXMpO1xuICAgIGFubm90YXRpb24ucXVhbGlmaWVyID0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXI7XG4gICAgYW5ub3RhdGlvbi5fX3NvdXJjZSA9IChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2U7XG5cbiAgICB0cnkge1xuICAgICAgICBsYXp5KGFubm90YXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9uc09uQW5ub3RhdGlvbihjb252ZXJ0ZXIsIHJhd0Fubm90YXRpb24sIGFubm90YXRpb24pKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG5vdCBhbiBlcnJvcjogcGFyc2VSZWNvcmQoKSBhbHJlYWR5IGFkZHMgYW5ub3RhdGlvbnMsIGJ1dCB0aGUgb3RoZXIgcGFyc2VYWFggZnVuY3Rpb25zIGRvbid0LCBzbyB0aGlzIGNhbiBoYXBwZW5cbiAgICB9XG5cbiAgICByZXR1cm4gYW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uO1xufVxuXG5jbGFzcyBDb252ZXJ0ZXIge1xuICAgIHByaXZhdGUgYW5ub3RhdGlvbnNCeVRhcmdldDogUmVjb3JkPEZ1bGx5UXVhbGlmaWVkTmFtZSwgQW5ub3RhdGlvbltdPjtcblxuICAgIC8qKlxuICAgICAqIEdldCBwcmVwcm9jZXNzZWQgYW5ub3RhdGlvbnMgb24gdGhlIHNwZWNpZmllZCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0ICAgIFRoZSBhbm5vdGF0aW9uIHRhcmdldFxuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFubm90YXRpb25zXG4gICAgICovXG4gICAgZ2V0QW5ub3RhdGlvbnModGFyZ2V0OiBGdWxseVF1YWxpZmllZE5hbWUpOiBBbm5vdGF0aW9uW10ge1xuICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9uc0J5VGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25Tb3VyY2VzID0gT2JqZWN0LmtleXModGhpcy5yYXdTY2hlbWEuYW5ub3RhdGlvbnMpLm1hcCgoc291cmNlKSA9PiAoe1xuICAgICAgICAgICAgICAgIG5hbWU6IHNvdXJjZSxcbiAgICAgICAgICAgICAgICBhbm5vdGF0aW9uTGlzdDogdGhpcy5yYXdTY2hlbWEuYW5ub3RhdGlvbnNbc291cmNlXVxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICB0aGlzLmFubm90YXRpb25zQnlUYXJnZXQgPSBtZXJnZUFubm90YXRpb25zKHRoaXMucmF3TWV0YWRhdGEucmVmZXJlbmNlcywgLi4uYW5ub3RhdGlvblNvdXJjZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNCeVRhcmdldFt0YXJnZXRdID8/IFtdO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eUNvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgIHRoaXMucmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lci5mdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgICAgICB0aGlzLnJhd01ldGFkYXRhLnNjaGVtYS5lbnRpdHlDb250YWluZXIsXG4gICAgICAgICAgICBjb252ZXJ0RW50aXR5Q29udGFpbmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5U2V0KGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5lbnRpdHlTZXRzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZFNpbmdsZXRvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuc2luZ2xldG9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5lbnRpdHlUeXBlcy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuY29tcGxleFR5cGVzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC50eXBlRGVmaW5pdGlvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkQWN0aW9uSW1wb3J0KGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIGxldCBhY3Rpb25JbXBvcnQgPSB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25JbXBvcnRzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICBpZiAoIWFjdGlvbkltcG9ydCkge1xuICAgICAgICAgICAgYWN0aW9uSW1wb3J0ID0gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9uSW1wb3J0cy5ieV9uYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGlvbkltcG9ydDtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRBY3Rpb24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbnMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXcsXG4gICAgICAgIG1hcDogKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXc6IFJhdykgPT4gQ29udmVydGVkXG4gICAgKTogKCkgPT4gQ29udmVydGVkO1xuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4sIEluZGV4UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIENvbnZlcnRlZCwgc3RyaW5nPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXdbXSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKSA9PiBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+O1xuICAgIGNvbnZlcnQ8Q29udmVydGVkLCBSYXcgZXh0ZW5kcyBSYXdUeXBlPENvbnZlcnRlZD4sIEluZGV4UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIENvbnZlcnRlZCwgc3RyaW5nPj4oXG4gICAgICAgIHJhd1ZhbHVlOiBSYXcgfCBSYXdbXSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKCkgPT4gQ29udmVydGVkKSB8ICgoKSA9PiBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWQgPSByYXdWYWx1ZS5yZWR1Y2UoKGNvbnZlcnRlZEVsZW1lbnRzLCByYXdFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZEVsZW1lbnQgPSB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmF3RWxlbWVudCBhcyBhbnkpLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnZlcnRlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZEVsZW1lbnRzLnB1c2goY29udmVydGVkRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIH0sIFtdIGFzIENvbnZlcnRlZFtdKTtcbiAgICAgICAgICAgICAgICBhZGRHZXRCeVZhbHVlKGNvbnZlcnRlZCwgJ25hbWUnIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgYWRkR2V0QnlWYWx1ZShjb252ZXJ0ZWQsICdmdWxseVF1YWxpZmllZE5hbWUnIGFzIGFueSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZCBhcyBBcnJheVdpdGhJbmRleDxDb252ZXJ0ZWQsIEluZGV4UHJvcGVydHk+O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB0aGlzLmdldENvbnZlcnRlZEVsZW1lbnQocmF3VmFsdWUuZnVsbHlRdWFsaWZpZWROYW1lLCByYXdWYWx1ZSwgbWFwKSE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YTtcbiAgICBwcml2YXRlIGNvbnZlcnRlZEVsZW1lbnRzOiBNYXA8RnVsbHlRdWFsaWZpZWROYW1lLCBhbnk+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YTtcblxuICAgIHJhd1NjaGVtYTogUmF3U2NoZW1hO1xuXG4gICAgY29uc3RydWN0b3IocmF3TWV0YWRhdGE6IFJhd01ldGFkYXRhLCBjb252ZXJ0ZWRPdXRwdXQ6IENvbnZlcnRlZE1ldGFkYXRhKSB7XG4gICAgICAgIHRoaXMucmF3TWV0YWRhdGEgPSByYXdNZXRhZGF0YTtcbiAgICAgICAgdGhpcy5yYXdTY2hlbWEgPSByYXdNZXRhZGF0YS5zY2hlbWE7XG4gICAgICAgIHRoaXMuY29udmVydGVkT3V0cHV0ID0gY29udmVydGVkT3V0cHV0O1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVsZW1lbnQ8Q29udmVydGVkVHlwZSwgUmF3VHlwZSBleHRlbmRzIFJlbW92ZUFubm90YXRpb25BbmRUeXBlPENvbnZlcnRlZFR5cGU+PihcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIHJhd0VsZW1lbnQ6IFJhd1R5cGUgfCB1bmRlZmluZWQgfCAoKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSA9PiBSYXdUeXBlIHwgdW5kZWZpbmVkKSxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3VHlwZSkgPT4gQ29udmVydGVkVHlwZVxuICAgICk6IENvbnZlcnRlZFR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgY29udmVydGVkOiBDb252ZXJ0ZWRUeXBlIHwgdW5kZWZpbmVkID0gdGhpcy5jb252ZXJ0ZWRFbGVtZW50cy5nZXQoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgaWYgKGNvbnZlcnRlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCByYXdNZXRhZGF0YSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJhd0VsZW1lbnQgPT09ICdmdW5jdGlvbicgPyByYXdFbGVtZW50LmFwcGx5KHVuZGVmaW5lZCwgW2Z1bGx5UXVhbGlmaWVkTmFtZV0pIDogcmF3RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChyYXdNZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udmVydGVkID0gbWFwLmFwcGx5KHVuZGVmaW5lZCwgW3RoaXMsIHJhd01ldGFkYXRhXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRFbGVtZW50cy5zZXQoZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWQ7XG4gICAgfVxuXG4gICAgbG9nRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkT3V0cHV0LmRpYWdub3N0aWNzLnB1c2goeyBtZXNzYWdlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHRoZSBhbGlhcyBmcm9tIHRoZSB0ZXJtIHZhbHVlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRlcm0gdGhlIHZhbHVlIG9mIHRoZSB0ZXJtXG4gICAgICogQHJldHVybnMgdGhlIHRlcm0gYWxpYXMgYW5kIHRoZSBhY3R1YWwgdGVybSB2YWx1ZVxuICAgICAqL1xuICAgIHNwbGl0VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWxpYXNlZCA9IGFsaWFzKFZvY2FidWxhcnlSZWZlcmVuY2VzLCB0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHNwbGl0QXRMYXN0KGFsaWFzZWQsICcuJyk7XG4gICAgfVxuXG4gICAgdW5hbGlhcyh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCByZWZlcmVuY2VzID0gdGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzKSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzKHJlZmVyZW5jZXMsIHZhbHVlLCB0aGlzLnJhd1NjaGVtYS5uYW1lc3BhY2UpID8/ICcnO1xuICAgIH1cbn1cblxudHlwZSBSYXdUeXBlPFQ+ID0gUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGU8VD4gJiB7IGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lIH07XG5cbmZ1bmN0aW9uIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGxldCBlbnRpdHlUeXBlID0gY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVR5cGUoZnVsbHlRdWFsaWZpZWROYW1lKTtcblxuICAgICAgICBpZiAoIWVudGl0eVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihgRW50aXR5VHlwZSAnJHtmdWxseVF1YWxpZmllZE5hbWV9JyBub3QgZm91bmRgKTtcbiAgICAgICAgICAgIGVudGl0eVR5cGUgPSB7fSBhcyBFbnRpdHlUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRpdHlUeXBlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICByYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nczogUmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1xuKSB7XG4gICAgcmV0dXJuICgpID0+XG4gICAgICAgIE9iamVjdC5rZXlzKHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKS5yZWR1Y2UoKG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLCBiaW5kaW5nUGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmF3QmluZGluZ1RhcmdldCA9IHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzW2JpbmRpbmdQYXRoXTtcblxuICAgICAgICAgICAgbGF6eShcbiAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyxcbiAgICAgICAgICAgICAgICBiaW5kaW5nUGF0aCxcbiAgICAgICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgTmF2aWdhdGlvblByb3BlcnR5QmluZGluZyB3aWxsIGxlYWQgdG8gZWl0aGVyIGFuIEVudGl0eVNldCBvciBhIFNpbmdsZXRvbiwgaXQgY2Fubm90IGJlIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAoY29udmVydGVyLmdldENvbnZlcnRlZEVudGl0eVNldChyYXdCaW5kaW5nVGFyZ2V0KSA/P1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZFNpbmdsZXRvbihyYXdCaW5kaW5nVGFyZ2V0KSkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzO1xuICAgICAgICB9LCB7fSBhcyBFbnRpdHlTZXRbJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnXSB8IFNpbmdsZXRvblsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBbm5vdGF0aW9uVGFyZ2V0OiBhbnkpIHtcbiAgICBjb25zdCBuZXN0ZWRBbm5vdGF0aW9ucyA9IHJhd0Fubm90YXRpb25UYXJnZXQuYW5ub3RhdGlvbnM7XG5cbiAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoXG4gICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICByYXdBbm5vdGF0aW9uVGFyZ2V0LFxuICAgICAgICAgICAgbmVzdGVkQW5ub3RhdGlvbnMgPz8gY29udmVydGVyLmdldEFubm90YXRpb25zKHJhd0Fubm90YXRpb25UYXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lKVxuICAgICAgICApO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5ub3RhdGlvbnNPbkFubm90YXRpb24oXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCB8IFJhd0Fubm90YXRpb24sXG4gICAgYW5ub3RhdGlvblRlcm06IGFueVxuKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEZRTiA9IGFubm90YXRpb25UZXJtLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICAvLyBiZSBncmFjZWZ1bCB3aGVuIHJlc29sdmluZyBhbm5vdGF0aW9ucyBvbiBhbm5vdGF0aW9uczogU29tZXRpbWVzIHRoZXkgYXJlIHJlZmVyZW5jZWQgZGlyZWN0bHksIHNvbWV0aW1lcyB0aGV5XG4gICAgICAgIC8vIGFyZSBwYXJ0IG9mIHRoZSBnbG9iYWwgYW5ub3RhdGlvbnMgbGlzdFxuICAgICAgICBsZXQgYW5ub3RhdGlvbnM7XG4gICAgICAgIGlmIChhbm5vdGF0aW9uUmVjb3JkLmFubm90YXRpb25zICYmIGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uUmVjb3JkLmFubm90YXRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnMoY3VycmVudEZRTik7XG4gICAgICAgIH1cblxuICAgICAgICBhbm5vdGF0aW9ucz8uZm9yRWFjaCgoYW5ub3RhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uLnRhcmdldCA9IGN1cnJlbnRGUU47XG4gICAgICAgICAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gYW5ub3RhdGlvblRlcm0uX19zb3VyY2U7XG4gICAgICAgICAgICBhbm5vdGF0aW9uW0FOTk9UQVRJT05fVEFSR0VUXSA9IGFubm90YXRpb25UZXJtW0FOTk9UQVRJT05fVEFSR0VUXTtcbiAgICAgICAgICAgIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gYCR7Y3VycmVudEZRTn1AJHthbm5vdGF0aW9uLnRlcm19YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgYW5ub3RhdGlvblRlcm0sIGFubm90YXRpb25zID8/IFtdKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXI6IENvbnZlcnRlciwgdGFyZ2V0OiBhbnksIHJhd0Fubm90YXRpb25zOiBSYXdBbm5vdGF0aW9uW10pIHtcbiAgICByZXR1cm4gcmF3QW5ub3RhdGlvbnMucmVkdWNlKCh2b2NhYnVsYXJ5QWxpYXNlcywgYW5ub3RhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBbdm9jQWxpYXMsIHZvY1Rlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShhbm5vdGF0aW9uLnRlcm0pO1xuICAgICAgICBjb25zdCB2b2NUZXJtV2l0aFF1YWxpZmllciA9IGAke3ZvY1Rlcm19JHthbm5vdGF0aW9uLnF1YWxpZmllciA/ICcjJyArIGFubm90YXRpb24ucXVhbGlmaWVyIDogJyd9YDtcblxuICAgICAgICBpZiAodm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10uaGFzT3duUHJvcGVydHkodm9jVGVybVdpdGhRdWFsaWZpZXIpKSB7XG4gICAgICAgICAgICBsYXp5KHZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXSwgdm9jVGVybVdpdGhRdWFsaWZpZXIsICgpID0+XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgICAgIChhbm5vdGF0aW9uIGFzIEFubm90YXRpb24pLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgKGNvbnZlcnRlciwgcmF3QW5ub3RhdGlvbikgPT4gY29udmVydEFubm90YXRpb24oY29udmVydGVyLCB0YXJnZXQsIHJhd0Fubm90YXRpb24pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdm9jYWJ1bGFyeUFsaWFzZXM7XG4gICAgfSwge30gYXMgYW55KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlDb250YWluZXIuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3RW50aXR5Q29udGFpbmVyICAgIFVuY29udmVydGVkIEVudGl0eUNvbnRhaW5lclxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBFbnRpdHlDb250YWluZXJcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eUNvbnRhaW5lcihjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5Q29udGFpbmVyOiBSYXdFbnRpdHlDb250YWluZXIpOiBFbnRpdHlDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciA9IHJhd0VudGl0eUNvbnRhaW5lciBhcyBFbnRpdHlDb250YWluZXI7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5Q29udGFpbmVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lciwgJ2VudGl0eVNldHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eVNldHMsIGNvbnZlcnRFbnRpdHlTZXQpKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnc2luZ2xldG9ucycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuc2luZ2xldG9ucywgY29udmVydFNpbmdsZXRvbikpO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5Q29udGFpbmVyLFxuICAgICAgICAnYWN0aW9uSW1wb3J0cycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uSW1wb3J0cywgY29udmVydEFjdGlvbkltcG9ydClcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eUNvbnRhaW5lcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFNpbmdsZXRvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3U2luZ2xldG9uICBVbmNvbnZlcnRlZCBTaW5nbGV0b25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgU2luZ2xldG9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTaW5nbGV0b24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbjogUmF3U2luZ2xldG9uKTogU2luZ2xldG9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRTaW5nbGV0b24gPSByYXdTaW5nbGV0b24gYXMgdW5rbm93biBhcyBTaW5nbGV0b247XG5cbiAgICBsYXp5KGNvbnZlcnRlZFNpbmdsZXRvbiwgJ2VudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd1NpbmdsZXRvbi5lbnRpdHlUeXBlTmFtZSkpO1xuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCBjb252ZXJ0ZWRTaW5nbGV0b24pKTtcblxuICAgIGNvbnN0IF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHJhd1NpbmdsZXRvbi5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nO1xuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZFNpbmdsZXRvbixcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnLFxuICAgICAgICByZXNvbHZlTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MoY29udmVydGVyLCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MpXG4gICAgKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRTaW5nbGV0b247XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gRW50aXR5U2V0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlTZXQgIFVuY29udmVydGVkIEVudGl0eVNldFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBFbnRpdHlTZXRcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eVNldChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5U2V0OiBSYXdFbnRpdHlTZXQpOiBFbnRpdHlTZXQge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eVNldCA9IHJhd0VudGl0eVNldCBhcyB1bmtub3duIGFzIEVudGl0eVNldDtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5U2V0LCAnZW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3RW50aXR5U2V0LmVudGl0eVR5cGVOYW1lKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlTZXQsICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIGNvbnZlcnRlZEVudGl0eVNldCkpO1xuXG4gICAgY29uc3QgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gcmF3RW50aXR5U2V0Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5U2V0LFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZycsXG4gICAgICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhjb252ZXJ0ZXIsIF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncylcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEVudGl0eVNldDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlUeXBlICBVbmNvbnZlcnRlZCBFbnRpdHlUeXBlXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydEVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGU6IFJhd0VudGl0eVR5cGUpOiBFbnRpdHlUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRFbnRpdHlUeXBlID0gcmF3RW50aXR5VHlwZSBhcyBFbnRpdHlUeXBlO1xuXG4gICAgcmF3RW50aXR5VHlwZS5rZXlzLmZvckVhY2goKGtleVByb3A6IGFueSkgPT4ge1xuICAgICAgICBrZXlQcm9wLmlzS2V5ID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3RW50aXR5VHlwZSkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAna2V5cycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUua2V5cywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnZW50aXR5UHJvcGVydGllcycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0VudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkRW50aXR5VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcyBhcyBhbnlbXSwgY29udmVydE5hdmlnYXRpb25Qcm9wZXJ0eSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnYWN0aW9ucycsICgpID0+XG4gICAgICAgIGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAocmF3QWN0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uaXNCb3VuZCAmJlxuICAgICAgICAgICAgICAgICAgICAocmF3QWN0aW9uLnNvdXJjZVR5cGUgPT09IHJhd0VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByYXdBY3Rpb24uc291cmNlVHlwZSA9PT0gYENvbGxlY3Rpb24oJHtyYXdFbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZX0pYClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjdGlvbnMsIHJhd0FjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBgJHtjb252ZXJ0ZXIucmF3U2NoZW1hLm5hbWVzcGFjZX0uJHtyYXdBY3Rpb24ubmFtZX1gO1xuICAgICAgICAgICAgICAgIGFjdGlvbnNbbmFtZV0gPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUpITtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucztcbiAgICAgICAgICAgIH0sIHt9IGFzIEVudGl0eVR5cGVbJ2FjdGlvbnMnXSlcbiAgICApO1xuXG4gICAgY29udmVydGVkRW50aXR5VHlwZS5yZXNvbHZlUGF0aCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZywgaW5jbHVkZVZpc2l0ZWRPYmplY3RzPzogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByYXdFbnRpdHlUeXBlLCByZWxhdGl2ZVBhdGgpO1xuICAgICAgICBpZiAoaW5jbHVkZVZpc2l0ZWRPYmplY3RzKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHJlc29sdmVkLnRhcmdldCwgdmlzaXRlZE9iamVjdHM6IHJlc29sdmVkLm9iamVjdFBhdGgsIG1lc3NhZ2VzOiByZXNvbHZlZC5tZXNzYWdlcyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkLnRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdQcm9wZXJ0eSAgVW5jb252ZXJ0ZWQgUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgUHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY29udmVydFByb3BlcnR5KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdQcm9wZXJ0eTogUmF3UHJvcGVydHkpOiBQcm9wZXJ0eSB7XG4gICAgY29uc3QgY29udmVydGVkUHJvcGVydHkgPSByYXdQcm9wZXJ0eSBhcyBQcm9wZXJ0eTtcblxuICAgIGxhenkoY29udmVydGVkUHJvcGVydHksICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1Byb3BlcnR5KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZFByb3BlcnR5LCAndGFyZ2V0VHlwZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHJhd1Byb3BlcnR5LnR5cGU7XG4gICAgICAgIGNvbnN0IHR5cGVOYW1lID0gdHlwZS5zdGFydHNXaXRoKCdDb2xsZWN0aW9uJykgPyB0eXBlLnN1YnN0cmluZygxMSwgdHlwZS5sZW5ndGggLSAxKSA6IHR5cGU7XG5cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZSh0eXBlTmFtZSkgPz8gY29udmVydGVyLmdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKHR5cGVOYW1lKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIE5hdmlnYXRpb25Qcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3TmF2aWdhdGlvblByb3BlcnR5ICBVbmNvbnZlcnRlZCBOYXZpZ2F0aW9uUHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgTmF2aWdhdGlvblByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3TmF2aWdhdGlvblByb3BlcnR5OiBSYXdWMk5hdmlnYXRpb25Qcm9wZXJ0eSB8IFJhd1Y0TmF2aWdhdGlvblByb3BlcnR5XG4pOiBOYXZpZ2F0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSA9IHJhd05hdmlnYXRpb25Qcm9wZXJ0eSBhcyBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cbiAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkucmVmZXJlbnRpYWxDb25zdHJhaW50ID0gY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LnJlZmVyZW50aWFsQ29uc3RyYWludCA/PyBbXTtcblxuICAgIGlmICghaXNWNE5hdmlnYXRpb25Qcm9wZXJ0eShyYXdOYXZpZ2F0aW9uUHJvcGVydHkpKSB7XG4gICAgICAgIGNvbnN0IGFzc29jaWF0aW9uRW5kID0gY29udmVydGVyLnJhd1NjaGVtYS5hc3NvY2lhdGlvbnNcbiAgICAgICAgICAgIC5maW5kKChhc3NvY2lhdGlvbikgPT4gYXNzb2NpYXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID09PSByYXdOYXZpZ2F0aW9uUHJvcGVydHkucmVsYXRpb25zaGlwKVxuICAgICAgICAgICAgPy5hc3NvY2lhdGlvbkVuZC5maW5kKChlbmQpID0+IGVuZC5yb2xlID09PSByYXdOYXZpZ2F0aW9uUHJvcGVydHkudG9Sb2xlKTtcblxuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkuaXNDb2xsZWN0aW9uID0gYXNzb2NpYXRpb25FbmQ/Lm11bHRpcGxpY2l0eSA9PT0gJyonO1xuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkudGFyZ2V0VHlwZU5hbWUgPSBhc3NvY2lhdGlvbkVuZD8udHlwZSA/PyAnJztcbiAgICB9XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgICAgICd0YXJnZXRUeXBlJyxcbiAgICAgICAgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCAocmF3TmF2aWdhdGlvblByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZU5hbWUpXG4gICAgKTtcblxuICAgIGxhenkoY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdOYXZpZ2F0aW9uUHJvcGVydHkpKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQWN0aW9uSW1wb3J0LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdBY3Rpb25JbXBvcnQgIFVuY29udmVydGVkIEFjdGlvbkltcG9ydFxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBBY3Rpb25JbXBvcnRcbiAqL1xuZnVuY3Rpb24gY29udmVydEFjdGlvbkltcG9ydChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3QWN0aW9uSW1wb3J0OiBSYXdBY3Rpb25JbXBvcnQpOiBBY3Rpb25JbXBvcnQge1xuICAgIGNvbnN0IGNvbnZlcnRlZEFjdGlvbkltcG9ydCA9IHJhd0FjdGlvbkltcG9ydCBhcyBBY3Rpb25JbXBvcnQ7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbkltcG9ydCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3QWN0aW9uSW1wb3J0KSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbkltcG9ydCwgJ2FjdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmF3QWN0aW9ucyA9IGNvbnZlcnRlci5yYXdTY2hlbWEuYWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAocmF3QWN0aW9uKSA9PiAhcmF3QWN0aW9uLmlzQm91bmQgJiYgcmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZS5zdGFydHNXaXRoKHJhd0FjdGlvbkltcG9ydC5hY3Rpb25OYW1lKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHRoaXMgYWx3YXlzIHJlc29sdmVzIHRvIGEgdW5pcXVlIHVuYm91bmQgYWN0aW9uLCBidXQgcmVzb2x1dGlvbiBvZiB1bmJvdW5kIGZ1bmN0aW9ucyBjYW4gYmUgYW1iaWd1b3VzOlxuICAgICAgICAvLyB1bmJvdW5kIGZ1bmN0aW9uIEZRTnMgaGF2ZSBvdmVybG9hZHMgZGVwZW5kaW5nIG9uIGFsbCBvZiB0aGVpciBwYXJhbWV0ZXJzXG4gICAgICAgIGlmIChyYXdBY3Rpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihgQW1iaWd1b3VzIHJlZmVyZW5jZSBpbiBhY3Rpb24gaW1wb3J0OiAke3Jhd0FjdGlvbkltcG9ydC5mdWxseVF1YWxpZmllZE5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGFjdGlvbiBvciBmdW5jdGlvblxuICAgICAgICByZXR1cm4gY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihyYXdBY3Rpb25zWzBdLmZ1bGx5UXVhbGlmaWVkTmFtZSkhO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvbkltcG9ydDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvbiAgVW5jb252ZXJ0ZWQgQWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBY3Rpb246IFJhd0FjdGlvbik6IEFjdGlvbiB7XG4gICAgY29uc3QgY29udmVydGVkQWN0aW9uID0gcmF3QWN0aW9uIGFzIEFjdGlvbjtcblxuICAgIGlmIChjb252ZXJ0ZWRBY3Rpb24uc291cmNlVHlwZSkge1xuICAgICAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ3NvdXJjZUVudGl0eVR5cGUnLCByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIHJhd0FjdGlvbi5zb3VyY2VUeXBlKSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5yZXR1cm5UeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncmV0dXJuRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnJldHVyblR5cGUpKTtcbiAgICB9XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ3BhcmFtZXRlcnMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdBY3Rpb24ucGFyYW1ldGVycywgY29udmVydEFjdGlvblBhcmFtZXRlcikpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdhbm5vdGF0aW9ucycsICgpID0+IHtcbiAgICAgICAgLypcbiAgICAgICAgICAgIEFubm90YXRpb24gcmVzb2x1dGlvbiBydWxlIGZvciBhY3Rpb25zOlxuXG4gICAgICAgICAgICAoMSkgYW5ub3RhdGlvbiB0YXJnZXQ6IHRoZSBzcGVjaWZpYyB1bmJvdW5kIG9yIGJvdW5kIG92ZXJsb2FkLCBlLmcuXG4gICAgICAgICAgICAgICAgICAgIC0gZm9yIGFjdGlvbnM6ICAgXCJ4Lnkuei51bmJvdW5kQWN0aW9uKClcIiAvIFwieC55LnouYm91bmRBY3Rpb24oeC55LnouRW50aXR5KVwiXG4gICAgICAgICAgICAgICAgICAgIC0gZm9yIGZ1bmN0aW9uczogXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb24oRWRtLlN0cmluZylcIiAvIFwieC55LnoudW5ib3VuZEZ1bmN0aW9uKHgueS56LkVudGl0eSxFZG0uU3RyaW5nKVwiXG4gICAgICAgICAgICAoMikgYW5ub3RhdGlvbiB0YXJnZXQ6IHVuc3BlY2lmaWVkIG92ZXJsb2FkLCBlLmcuXG4gICAgICAgICAgICAgICAgLSBmb3IgYWN0aW9uczogICBcIngueS56LnVuYm91bmRBY3Rpb25cIiAvIFwieC55LnouYm91bmRBY3Rpb25cIlxuICAgICAgICAgICAgICAgIC0gZm9yIGZ1bmN0aW9uczogXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb25cIiAvIFwieC55LnoudW5ib3VuZEZ1bmN0aW9uXCJcblxuICAgICAgICAgICAgV2hlbiByZXNvbHZpbmcgKDEpIHRha2VzIHByZWNlZGVuY2Ugb3ZlciAoMikuIFRoYXQgaXMsIGFubm90YXRpb25zIG9uIHRoZSBzcGVjaWZpYyBvdmVybG9hZCBvdmVyd3JpdGVcbiAgICAgICAgICAgIGFubm90YXRpb25zIG9uIHRoZSB1bnNwZWNpZmljIG92ZXJsb2FkLCBvbiB0ZXJtL3F1YWxpZmllciBsZXZlbC5cbiAgICAgICAgKi9cblxuICAgICAgICBjb25zdCB1bnNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChyYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLCAnKCcpO1xuICAgICAgICBjb25zdCBzcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID0gcmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhzcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY0Fubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbiBvZiB1bnNwZWNpZmljQW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZWZmZWN0aXZlQW5ub3RhdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLnRlcm0gPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnRlcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24ucXVhbGlmaWVyID09PSB1bnNwZWNpZmljQW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVBbm5vdGF0aW9ucy5wdXNoKHVuc3BlY2lmaWNBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIHJhd0FjdGlvbiwgZWZmZWN0aXZlQW5ub3RhdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25QYXJhbWV0ZXIuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvblBhcmFtZXRlciAgVW5jb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvblBhcmFtZXRlclxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd0FjdGlvblBhcmFtZXRlcjogUmF3QWN0aW9uWydwYXJhbWV0ZXJzJ11bbnVtYmVyXVxuKTogQWN0aW9uUGFyYW1ldGVyIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIgPSByYXdBY3Rpb25QYXJhbWV0ZXIgYXMgQWN0aW9uUGFyYW1ldGVyO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQWN0aW9uUGFyYW1ldGVyLFxuICAgICAgICAndHlwZVJlZmVyZW5jZScsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSkgPz9cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbihyYXdBY3Rpb25QYXJhbWV0ZXIudHlwZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsICdhbm5vdGF0aW9ucycsICgpID0+IHtcbiAgICAgICAgLy8gYW5ub3RhdGlvbnMgb24gYWN0aW9uIHBhcmFtZXRlcnMgYXJlIHJlc29sdmVkIGZvbGxvd2luZyB0aGUgcnVsZXMgZm9yIGFjdGlvbnNcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID1cbiAgICAgICAgICAgIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKDAsIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuaW5kZXhPZignKCcpKSArXG4gICAgICAgICAgICByYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLnN1YnN0cmluZyhyYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lLmluZGV4T2YoJyknKSArIDEpO1xuICAgICAgICBjb25zdCBzcGVjaWZpY092ZXJsb2FkVGFyZ2V0ID0gcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZTtcblxuICAgICAgICBjb25zdCBlZmZlY3RpdmVBbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhzcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcbiAgICAgICAgY29uc3QgdW5zcGVjaWZpY0Fubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbiBvZiB1bnNwZWNpZmljQW5ub3RhdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhZWZmZWN0aXZlQW5ub3RhdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLnRlcm0gPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnRlcm0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24ucXVhbGlmaWVyID09PSB1bnNwZWNpZmljQW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlZmZlY3RpdmVBbm5vdGF0aW9ucy5wdXNoKHVuc3BlY2lmaWNBbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChjb252ZXJ0ZXIsIHJhd0FjdGlvblBhcmFtZXRlciwgZWZmZWN0aXZlQW5ub3RhdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIENvbXBsZXhUeXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdDb21wbGV4VHlwZSAgVW5jb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQ29tcGxleFR5cGVcbiAqL1xuZnVuY3Rpb24gY29udmVydENvbXBsZXhUeXBlKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdDb21wbGV4VHlwZTogUmF3Q29tcGxleFR5cGUpOiBDb21wbGV4VHlwZSB7XG4gICAgY29uc3QgY29udmVydGVkQ29tcGxleFR5cGUgPSByYXdDb21wbGV4VHlwZSBhcyBDb21wbGV4VHlwZTtcblxuICAgIGxhenkoY29udmVydGVkQ29tcGxleFR5cGUsICdwcm9wZXJ0aWVzJywgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUucHJvcGVydGllcywgY29udmVydFByb3BlcnR5KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkQ29tcGxleFR5cGUsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydGllcycsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KHJhd0NvbXBsZXhUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIGFueVtdLCBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3Q29tcGxleFR5cGUpKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRDb21wbGV4VHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdUeXBlRGVmaW5pdGlvbiAgVW5jb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgVHlwZURlZmluaXRpb25cbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVEZWZpbml0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdUeXBlRGVmaW5pdGlvbjogUmF3VHlwZURlZmluaXRpb24pOiBUeXBlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgY29udmVydGVkVHlwZURlZmluaXRpb24gPSByYXdUeXBlRGVmaW5pdGlvbiBhcyBUeXBlRGVmaW5pdGlvbjtcblxuICAgIGxhenkoY29udmVydGVkVHlwZURlZmluaXRpb24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uKSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkVHlwZURlZmluaXRpb247XG59XG5cbi8qKlxuICogQ29udmVydCBhIFJhd01ldGFkYXRhIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIHRvIGJlIHVzZWQgdG8gZWFzaWx5IG5hdmlnYXRlIGEgbWV0YWRhdGEgb2JqZWN0IGFuZCBpdHMgYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmF3TWV0YWRhdGFcbiAqIEByZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydChyYXdNZXRhZGF0YTogUmF3TWV0YWRhdGEpOiBDb252ZXJ0ZWRNZXRhZGF0YSB7XG4gICAgLy8gQ29udmVydGVyIE91dHB1dFxuICAgIGNvbnN0IGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGEgPSB7XG4gICAgICAgIHZlcnNpb246IHJhd01ldGFkYXRhLnZlcnNpb24sXG4gICAgICAgIG5hbWVzcGFjZTogcmF3TWV0YWRhdGEuc2NoZW1hLm5hbWVzcGFjZSxcbiAgICAgICAgYW5ub3RhdGlvbnM6IHJhd01ldGFkYXRhLnNjaGVtYS5hbm5vdGF0aW9ucyxcbiAgICAgICAgcmVmZXJlbmNlczogVm9jYWJ1bGFyeVJlZmVyZW5jZXMsXG4gICAgICAgIGRpYWdub3N0aWNzOiBbXVxuICAgIH0gYXMgYW55O1xuXG4gICAgLy8gZmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IHJlZmVyZW5jZXMgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBzcGVjaWZ5IGFueVxuICAgIGlmIChyYXdNZXRhZGF0YS5yZWZlcmVuY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByYXdNZXRhZGF0YS5yZWZlcmVuY2VzID0gVm9jYWJ1bGFyeVJlZmVyZW5jZXM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydGVyXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IENvbnZlcnRlcihyYXdNZXRhZGF0YSwgY29udmVydGVkT3V0cHV0KTtcblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE91dHB1dCxcbiAgICAgICAgJ2VudGl0eUNvbnRhaW5lcicsXG4gICAgICAgIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5Q29udGFpbmVyLCBjb252ZXJ0RW50aXR5Q29udGFpbmVyKVxuICAgICk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlTZXRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlTZXRzLCBjb252ZXJ0RW50aXR5U2V0KSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdzaW5nbGV0b25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5zaW5nbGV0b25zLCBjb252ZXJ0U2luZ2xldG9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdlbnRpdHlUeXBlcycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5VHlwZXMsIGNvbnZlcnRFbnRpdHlUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zLCBjb252ZXJ0QWN0aW9uKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdjb21wbGV4VHlwZXMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmNvbXBsZXhUeXBlcywgY29udmVydENvbXBsZXhUeXBlKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRPdXRwdXQsICdhY3Rpb25JbXBvcnRzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25JbXBvcnRzLCBjb252ZXJ0QWN0aW9uSW1wb3J0KSk7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkT3V0cHV0LFxuICAgICAgICAndHlwZURlZmluaXRpb25zJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS50eXBlRGVmaW5pdGlvbnMsIGNvbnZlcnRUeXBlRGVmaW5pdGlvbilcbiAgICApO1xuXG4gICAgY29udmVydGVkT3V0cHV0LnJlc29sdmVQYXRoID0gZnVuY3Rpb24gcmVzb2x2ZVBhdGg8VD4ocGF0aDogc3RyaW5nKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFJlc29sdXRpb24gPSByZXNvbHZlVGFyZ2V0PFQ+KGNvbnZlcnRlciwgdW5kZWZpbmVkLCBwYXRoKTtcbiAgICAgICAgaWYgKHRhcmdldFJlc29sdXRpb24udGFyZ2V0KSB7XG4gICAgICAgICAgICBhcHBlbmRPYmplY3RQYXRoKHRhcmdldFJlc29sdXRpb24ub2JqZWN0UGF0aCwgdGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXRSZXNvbHV0aW9uO1xuICAgIH07XG5cbiAgICByZXR1cm4gY29udmVydGVkT3V0cHV0O1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9jb252ZXJ0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3dyaXRlYmFjayc7XG4iLCJpbXBvcnQgdHlwZSB7XG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uTGlzdCxcbiAgICBBcnJheVdpdGhJbmRleCxcbiAgICBDb21wbGV4VHlwZSxcbiAgICBJbmRleCxcbiAgICBSZWZlcmVuY2UsXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuXG5leHBvcnQgeyBFbnVtSXNGbGFnIH0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcnO1xuZXhwb3J0IHsgVGVybVRvVHlwZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMnO1xuZXhwb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgYXMgZGVmYXVsdFJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuXG5leHBvcnQgdHlwZSBSZWZlcmVuY2VzV2l0aE1hcCA9IFJlZmVyZW5jZVtdICYge1xuICAgIHJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG4gICAgcmV2ZXJzZVJlZmVyZW5jZU1hcD86IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT47XG59O1xuXG5mdW5jdGlvbiBzcGxpdEF0KHN0cmluZzogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIGluZGV4IDwgMCA/IFtzdHJpbmcsICcnXSA6IFtzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSwgc3RyaW5nLnN1YnN0cmluZyhpbmRleCArIDEpXTtcbn1cblxuZnVuY3Rpb24gc3Vic3RyaW5nQXQoc3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gc3RyaW5nIDogc3RyaW5nLnN1YnN0cmluZygwLCBpbmRleCk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZyB0byBzcGxpdFxuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgQW4gYXJyYXkgY29uc2lzdGluZyBvZiB0d28gZWxlbWVudHM6IHRoZSBwYXJ0IGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IsIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBdEZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogU3BsaXRzIGEgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHR3byBlbGVtZW50czogdGhlIHBhcnQgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHBhcnQgYWZ0ZXIgaXQuIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLCB0aGUgc2Vjb25kIGVsZW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwbGl0QXRMYXN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IFtzdHJpbmcsIHN0cmluZ10ge1xuICAgIHJldHVybiBzcGxpdEF0KHN0cmluZywgc3RyaW5nLmxhc3RJbmRleE9mKHNlcGFyYXRvcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nXG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUZpcnN0KHN0cmluZzogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN1YnN0cmluZ0F0KHN0cmluZywgc3RyaW5nLmluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc2VwYXJhdG9yLlxuICpcbiAqIEBwYXJhbSBzdHJpbmcgICAgVGhlIHN0cmluZ1xuICogQHBhcmFtIHNlcGFyYXRvciBTZXBhcmF0b3IsIGUuZy4gYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHJldHVybnMgVGhlIHN1YnN0cmluZyBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yLCBvciB0aGUgaW5wdXQgc3RyaW5nIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZ0JlZm9yZUxhc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3Vic3RyaW5nQXQoc3RyaW5nLCBzdHJpbmcubGFzdEluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIHVuYWxpYXNlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gYW5ub3RhdGlvbiB0byB0aGUgYWxpYXNlZCB2ZXJzaW9uLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIGN1cnJlbnRSZWZlcmVuY2VzIGZvciB0aGUgcHJvamVjdFxuICogQHBhcmFtIHVuYWxpYXNlZFZhbHVlIHRoZSB1bmFsaWFzZWQgdmFsdWVcbiAqIEByZXR1cm5zIHRoZSBhbGlhc2VkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNhbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsaWFzKHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLCB1bmFsaWFzZWRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcCkge1xuICAgICAgICByZWZlcmVuY2VzLnJldmVyc2VSZWZlcmVuY2VNYXAgPSByZWZlcmVuY2VzLnJlZHVjZSgobWFwOiBSZWNvcmQ8c3RyaW5nLCBSZWZlcmVuY2U+LCByZWYpID0+IHtcbiAgICAgICAgICAgIG1hcFtyZWYubmFtZXNwYWNlXSA9IHJlZjtcbiAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgaWYgKCF1bmFsaWFzZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdW5hbGlhc2VkVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IFtuYW1lc3BhY2UsIHZhbHVlXSA9IHNwbGl0QXRMYXN0KHVuYWxpYXNlZFZhbHVlLCAnLicpO1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcFtuYW1lc3BhY2VdO1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGAke3JlZmVyZW5jZS5hbGlhc30uJHt2YWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAodW5hbGlhc2VkVmFsdWUuaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiBQYXRoIGxpa2UgdG9fU2FsZXNPcmRlci9AVUkuTGluZUl0ZW1cbiAgICAgICAgY29uc3QgW3ByZUFsaWFzLCBwb3N0QWxpYXNdID0gc3BsaXRBdEZpcnN0KHVuYWxpYXNlZFZhbHVlLCAnQCcpO1xuICAgICAgICByZXR1cm4gYCR7cHJlQWxpYXN9QCR7YWxpYXMocmVmZXJlbmNlcywgcG9zdEFsaWFzKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFsaWFzZWQgc3RyaW5nIHRvIGl0cyB1bmFsaWFzZWQgdmVyc2lvbiBnaXZlbiBhIHNldCBvZiByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIFRoZSByZWZlcmVuY2VzIHRvIHVzZSBmb3IgdW5hbGlhc2luZy5cbiAqIEBwYXJhbSBhbGlhc2VkVmFsdWUgVGhlIGFsaWFzZWQgdmFsdWVcbiAqIEBwYXJhbSBuYW1lc3BhY2UgVGhlIGZhbGxiYWNrIG5hbWVzcGFjZVxuICogQHJldHVybnMgVGhlIGVxdWFsIHVuYWxpYXNlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmFsaWFzKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNXaXRoTWFwLFxuICAgIGFsaWFzZWRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG5hbWVzcGFjZT86IHN0cmluZ1xuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBfdW5hbGlhcyA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXApIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwID0gT2JqZWN0LmZyb21FbnRyaWVzKHJlZmVyZW5jZXMubWFwKChyZWYpID0+IFtyZWYuYWxpYXMsIHJlZl0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFsaWFzZXMgYXJlIG9mIHR5cGUgJ1NpbXBsZUlkZW50aWZpZXInIGFuZCBtdXN0IG5vdCBjb250YWluIGRvdHNcbiAgICAgICAgY29uc3QgW21heWJlQWxpYXMsIHJlc3RdID0gc3BsaXRBdEZpcnN0KHZhbHVlLCAnLicpO1xuXG4gICAgICAgIGlmICghcmVzdCB8fCByZXN0LmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgICAgIC8vIGVpdGhlciB0aGVyZSBpcyBubyBkb3QgaW4gdGhlIHZhbHVlIG9yIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgLS0+IG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzQW5ub3RhdGlvbiA9IG1heWJlQWxpYXMuc3RhcnRzV2l0aCgnQCcpO1xuICAgICAgICBjb25zdCB2YWx1ZVRvVW5hbGlhcyA9IGlzQW5ub3RhdGlvbiA/IG1heWJlQWxpYXMuc3Vic3RyaW5nKDEpIDogbWF5YmVBbGlhcztcbiAgICAgICAgY29uc3Qga25vd25SZWZlcmVuY2UgPSByZWZlcmVuY2VzLnJlZmVyZW5jZU1hcFt2YWx1ZVRvVW5hbGlhc107XG4gICAgICAgIGlmIChrbm93blJlZmVyZW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQW5ub3RhdGlvbiA/IGBAJHtrbm93blJlZmVyZW5jZS5uYW1lc3BhY2V9LiR7cmVzdH1gIDogYCR7a25vd25SZWZlcmVuY2UubmFtZXNwYWNlfS4ke3Jlc3R9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBhbGlhcyBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdXNpbmcgdGhlIHJlZmVyZW5jZXMuIEFzc3VtZSBpdCBpcyB0aGUgXCJnbG9iYWxcIiBhbGlhcyAoPSBuYW1lc3BhY2UpXG4gICAgICAgIHJldHVybiBuYW1lc3BhY2UgJiYgIWlzQW5ub3RhdGlvbiA/IGAke25hbWVzcGFjZX0uJHtyZXN0fWAgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFsaWFzZWRWYWx1ZVxuICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgLnJlZHVjZSgoc2VnbWVudHMsIHNlZ21lbnQpID0+IHtcbiAgICAgICAgICAgIC8vIHRoZSBzZWdtZW50IGNvdWxkIGJlIGFuIGFjdGlvbiwgbGlrZSBcImRvU29tZXRoaW5nKGZvby5iYXIpXCJcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdCwgcmVzdF0gPSBzcGxpdEF0Rmlyc3Qoc2VnbWVudCwgJygnKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YlNlZ21lbnQgPSBbX3VuYWxpYXMoZmlyc3QpXTtcblxuICAgICAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSByZXN0LnNsaWNlKDAsIC0xKTsgLy8gcmVtb3ZlIHRyYWlsaW5nIFwiKVwiXG4gICAgICAgICAgICAgICAgc3ViU2VnbWVudC5wdXNoKGAoJHtfdW5hbGlhcyhwYXJhbWV0ZXIpfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goc3ViU2VnbWVudC5qb2luKCcnKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICAgICAgfSwgW10gYXMgc3RyaW5nW10pXG4gICAgICAgID8uam9pbignLycpO1xufVxuXG4vKipcbiAqIERpZmZlcmVudGlhdGUgYmV0d2VlbiBhIENvbXBsZXhUeXBlIGFuZCBhIFR5cGVEZWZpbml0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21wbGV4VHlwZURlZmluaXRpb25cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIGEgY29tcGxleCB0eXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBsZXhUeXBlRGVmaW5pdGlvbihcbiAgICBjb21wbGV4VHlwZURlZmluaXRpb24/OiBDb21wbGV4VHlwZSB8IFR5cGVEZWZpbml0aW9uXG4pOiBjb21wbGV4VHlwZURlZmluaXRpb24gaXMgQ29tcGxleFR5cGUge1xuICAgIHJldHVybiAoXG4gICAgICAgICEhY29tcGxleFR5cGVEZWZpbml0aW9uICYmIGNvbXBsZXhUeXBlRGVmaW5pdGlvbi5fdHlwZSA9PT0gJ0NvbXBsZXhUeXBlJyAmJiAhIWNvbXBsZXhUeXBlRGVmaW5pdGlvbi5wcm9wZXJ0aWVzXG4gICAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERlY2ltYWwodmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlzRGVjaW1hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICB2YWx1ZU9mKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgbGF6eSBwcm9wZXJ0eS5cbiAqXG4gKiBUaGUgcHJvcGVydHkgaXMgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbiBvbiB0aGUgZmlyc3QgcmVhZCBhY2Nlc3MsIG9yIGJ5IGRpcmVjdGx5IGFzc2lnbmluZyBhIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvYmplY3QgICAgVGhlIGhvc3Qgb2JqZWN0XG4gKiBAcGFyYW0gcHJvcGVydHkgIFRoZSBsYXp5IHByb3BlcnR5IHRvIGFkZFxuICogQHBhcmFtIGluaXQgICAgICBUaGUgZnVuY3Rpb24gdGhhdCBpbml0aWFsaXplcyB0aGUgcHJvcGVydHkncyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbGF6eTxUeXBlLCBLZXkgZXh0ZW5kcyBrZXlvZiBUeXBlPihvYmplY3Q6IFR5cGUsIHByb3BlcnR5OiBLZXksIGluaXQ6ICgpID0+IFR5cGVbS2V5XSkge1xuICAgIGNvbnN0IGluaXRpYWwgPSBTeW1ib2woJ2luaXRpYWwnKTtcbiAgICBsZXQgX3ZhbHVlOiBUeXBlW0tleV0gfCB0eXBlb2YgaW5pdGlhbCA9IGluaXRpYWw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGlmIChfdmFsdWUgPT09IGluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSBpbml0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZTogVHlwZVtLZXldKSB7XG4gICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFsbG93cyB0byBmaW5kIGFuIGFycmF5IGVsZW1lbnQgYnkgcHJvcGVydHkgdmFsdWUuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICBUaGUgYXJyYXlcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgRWxlbWVudHMgaW4gdGhlIGFycmF5IGFyZSBzZWFyY2hlZCBieSB0aGlzIHByb3BlcnR5XG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZmluZCBhbiBlbGVtZW50IG9mIHRoZSBhcnJheSBieSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluZGV4ZWRGaW5kPFQ+KGFycmF5OiBBcnJheTxUPiwgcHJvcGVydHk6IGtleW9mIFQpIHtcbiAgICBjb25zdCBpbmRleDogTWFwPFRba2V5b2YgVF0sIFQgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGZpbmQodmFsdWU6IFRba2V5b2YgVF0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGluZGV4LmdldCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQ/Lltwcm9wZXJ0eV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheS5maW5kKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQ/Lmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnRbcHJvcGVydHldO1xuICAgICAgICAgICAgaW5kZXguc2V0KHByb3BlcnR5VmFsdWUsIGVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG4vKipcbiAqIEFkZHMgYSAnZ2V0IGJ5IHZhbHVlJyBmdW5jdGlvbiB0byBhbiBhcnJheS5cbiAqXG4gKiBJZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGFkZEluZGV4KG15QXJyYXksICduYW1lJyksIGEgbmV3IGZ1bmN0aW9uICdieV9uYW1lKHZhbHVlKScgd2lsbCBiZSBhZGRlZCB0aGF0IGFsbG93cyB0b1xuICogZmluZCBhIG1lbWJlciBvZiB0aGUgYXJyYXkgYnkgdGhlIHZhbHVlIG9mIGl0cyAnbmFtZScgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGFycmF5ICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0gcHJvcGVydHkgICBUaGUgcHJvcGVydHkgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlICdieV97cHJvcGVydHl9KCknIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBUaGUgYXJyYXkgd2l0aCB0aGUgYWRkZWQgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEdldEJ5VmFsdWU8VCwgUCBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgVCwgc3RyaW5nPj4oYXJyYXk6IEFycmF5PFQ+LCBwcm9wZXJ0eTogUCkge1xuICAgIGNvbnN0IGluZGV4TmFtZToga2V5b2YgSW5kZXg8VCwgUD4gPSBgYnlfJHtwcm9wZXJ0eX1gO1xuXG4gICAgaWYgKCFhcnJheS5oYXNPd25Qcm9wZXJ0eShpbmRleE5hbWUpKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgaW5kZXhOYW1lLCB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IGNyZWF0ZUluZGV4ZWRGaW5kKGFycmF5LCBwcm9wZXJ0eSkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSAnJHtpbmRleE5hbWV9JyBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkgYXMgQXJyYXlXaXRoSW5kZXg8VCwgUD47XG59XG5cbi8qKlxuICogTWVyZ2UgYW5ub3RhdGlvbnMgZnJvbSBkaWZmZXJlbnQgc291cmNlcyB0b2dldGhlciBieSBvdmVyd3JpdGluZyBhdCB0aGUgdGVybSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyAgICAgICAgUmVmZXJlbmNlcywgdXNlZCB0byByZXNvbHZlIGFsaWFzZWQgYW5ub3RhdGlvbiB0YXJnZXRzIGFuZCBhbGlhc2VkIGFubm90YXRpb24gdGVybXMuXG4gKiBAcGFyYW0gYW5ub3RhdGlvblNvdXJjZXMgQW5ub3RhdGlvbiBzb3VyY2VzXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0aW5nIG1lcmdlZCBhbm5vdGF0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbm5vdGF0aW9ucyhcbiAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSxcbiAgICAuLi5hbm5vdGF0aW9uU291cmNlczogeyBuYW1lOiBzdHJpbmc7IGFubm90YXRpb25MaXN0OiBBbm5vdGF0aW9uTGlzdFtdIH1bXVxuKTogUmVjb3JkPHN0cmluZywgQW5ub3RhdGlvbltdPiB7XG4gICAgcmV0dXJuIGFubm90YXRpb25Tb3VyY2VzLnJlZHVjZVJpZ2h0KChyZXN1bHQsIHsgbmFtZSwgYW5ub3RhdGlvbkxpc3QgfSkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHsgdGFyZ2V0LCBhbm5vdGF0aW9ucyB9IG9mIGFubm90YXRpb25MaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uVGFyZ2V0ID0gdW5hbGlhcyhyZWZlcmVuY2VzLCB0YXJnZXQpID8/IHRhcmdldDtcbiAgICAgICAgICAgIGlmICghcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25zT25UYXJnZXQgPSBhbm5vdGF0aW9uc1xuICAgICAgICAgICAgICAgIC5tYXAoKHJhd0Fubm90YXRpb24pOiBBbm5vdGF0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCByYXdBbm5vdGF0aW9uLnRlcm0pID8/IHJhd0Fubm90YXRpb24udGVybTtcblxuICAgICAgICAgICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLmZ1bGx5UXVhbGlmaWVkTmFtZSA9IHJhd0Fubm90YXRpb24ucXVhbGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGAke2Fubm90YXRpb25UYXJnZXR9QCR7cmF3QW5ub3RhdGlvbi50ZXJtfSMke3Jhd0Fubm90YXRpb24ucXVhbGlmaWVyfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYCR7YW5ub3RhdGlvblRhcmdldH1AJHtyYXdBbm5vdGF0aW9uLnRlcm19YDtcblxuICAgICAgICAgICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlID0gbmFtZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmF3QW5ub3RhdGlvbiBhcyBBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAhcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nQW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBbm5vdGF0aW9uLnRlcm0gPT09IGFubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0Fubm90YXRpb24ucXVhbGlmaWVyID09PSBhbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJlc3VsdFthbm5vdGF0aW9uVGFyZ2V0XS5wdXNoKC4uLmFubm90YXRpb25zT25UYXJnZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uW10+KTtcbn1cbiIsImltcG9ydCB0eXBlIHtcbiAgICBBbm5vdGF0aW9uUGF0aEV4cHJlc3Npb24sXG4gICAgQW5ub3RhdGlvblJlY29yZCxcbiAgICBBbm5vdGF0aW9uVGVybSxcbiAgICBFeHByZXNzaW9uLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhFeHByZXNzaW9uLFxuICAgIFBhdGhFeHByZXNzaW9uLFxuICAgIFByb3BlcnR5UGF0aEV4cHJlc3Npb24sXG4gICAgUmF3QW5ub3RhdGlvbixcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgdW5hbGlhcyB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFJldmVydCBhbiBvYmplY3QgdG8gaXRzIHJhdyB0eXBlIGVxdWl2YWxlbnQuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyB2YWx1ZVxuICovXG5mdW5jdGlvbiByZXZlcnRPYmplY3RUb1Jhd1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgcmVzdWx0OiBFeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQ29sbGVjdGlvbicsXG4gICAgICAgICAgICBDb2xsZWN0aW9uOiB2YWx1ZS5tYXAoKGFubm8pID0+IHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKHJlZmVyZW5jZXMsIGFubm8pKSBhcyBhbnlbXVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNEZWNpbWFsPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGVjaW1hbCcsXG4gICAgICAgICAgICBEZWNpbWFsOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nPy4oKSkge1xuICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS52YWx1ZU9mKCkuc3BsaXQoJy4nKTtcbiAgICAgICAgaWYgKHZhbHVlTWF0Y2hlcy5sZW5ndGggPiAxICYmIHJlZmVyZW5jZXMuZmluZCgocmVmKSA9PiByZWYuYWxpYXMgPT09IHZhbHVlTWF0Y2hlc1swXSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnRW51bU1lbWJlcicsXG4gICAgICAgICAgICAgICAgRW51bU1lbWJlcjogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICAgIFN0cmluZzogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0ludD8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgICAgICBJbnQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNGbG9hdD8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Zsb2F0JyxcbiAgICAgICAgICAgIEZsb2F0OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzRGF0ZT8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0RhdGUnLFxuICAgICAgICAgICAgRGF0ZTogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Jvb2xlYW4/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdCb29sJyxcbiAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ1BhdGgnKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcbiAgICAgICAgICAgIFBhdGg6IHZhbHVlLnBhdGhcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgIEFubm90YXRpb25QYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ0FwcGx5Jykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQXBwbHknLFxuICAgICAgICAgICAgQXBwbHk6IHZhbHVlLkFwcGx5XG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTnVsbCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnJFR5cGUnKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUmVjb3JkJyxcbiAgICAgICAgICAgIFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIGFzIEFubm90YXRpb25SZWNvcmRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXZlcnQgYSB2YWx1ZSB0byBpdHMgcmF3IHZhbHVlIGRlcGVuZGluZyBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCB2YWx1ZTogYW55KTogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZUNvbnN0cnVjdG9yID0gdmFsdWU/LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgc3dpdGNoICh2YWx1ZUNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0VudW1NZW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBpZiAodmFsdWUudG9TdHJpbmcoKSA9PT0gdmFsdWUudG9GaXhlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgICAgICAgICAgSW50OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCByZXN0cmljdGVkS2V5cyA9IFsnJFR5cGUnLCAndGVybScsICdfX3NvdXJjZScsICdxdWFsaWZpZXInLCAnQWN0aW9uVGFyZ2V0JywgJ2Z1bGx5UXVhbGlmaWVkTmFtZScsICdhbm5vdGF0aW9ucyddO1xuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBlbWJlZGRlZCBhbm5vdGF0aW9ucyB0byB0aGVpciByYXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gY3VycmVudEFubm90YXRpb25zIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9ucyB0aGUgcGxhY2Ugd2hlcmUgd2UgbmVlZCB0byBhZGQgdGhlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlW10sXG4gICAgY3VycmVudEFubm90YXRpb25zOiBhbnksXG4gICAgdGFyZ2V0QW5ub3RhdGlvbnM6IFJhd0Fubm90YXRpb25bXVxuKSB7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ19hbm5vdGF0aW9ucycpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRBbm5vdGF0aW9uc1trZXldKS5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQW5ub3RhdGlvbiA9IHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGN1cnJlbnRBbm5vdGF0aW9uc1trZXldW3Rlcm1dKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmFsaWFzZWRUZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYWxpYXNlZFRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZFNwbGl0ID0gdW5hbGlhc2VkVGVybS5zcGxpdCgnIycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVkU3BsaXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiBBbm5vdGF0aW9uIHdpdGggYSBxdWFsaWZpZXIsIG5vdCBzdXJlIHdoZW4gdGhhdCBjYW4gaGFwcGVuIGluIHJlYWwgc2NlbmFyaW9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRBbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xufVxuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGl0ZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmF3IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGNvbGxlY3Rpb25JdGVtIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRoZSByYXcgdHlwZSBlcXVpdmFsZW50XG4gKi9cbmZ1bmN0aW9uIHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIGNvbGxlY3Rpb25JdGVtOiBhbnlcbik6XG4gICAgfCBBbm5vdGF0aW9uUmVjb3JkXG4gICAgfCBzdHJpbmdcbiAgICB8IFByb3BlcnR5UGF0aEV4cHJlc3Npb25cbiAgICB8IFBhdGhFeHByZXNzaW9uXG4gICAgfCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuICAgIHwgQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uXG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uSXRlbTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2xsZWN0aW9uSXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb25JdGVtLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uIFJlY29yZFxuICAgICAgICAgICAgY29uc3Qgb3V0SXRlbTogQW5ub3RhdGlvblJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSXRlbS4kVHlwZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlczogW10gYXMgYW55W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBDb3VsZCB2YWxpZGF0ZSBrZXlzIGFuZCB0eXBlIGJhc2VkIG9uICRUeXBlXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uSXRlbSkuZm9yRWFjaCgoY29sbGVjdGlvbktleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkS2V5cy5pbmRleE9mKGNvbGxlY3Rpb25LZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldO1xuICAgICAgICAgICAgICAgICAgICBvdXRJdGVtLnByb3BlcnR5VmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sbGVjdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25LZXkgPT09ICdhbm5vdGF0aW9ucycgJiYgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XSwgb3V0SXRlbS5hbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb3V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBQcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICBBbm5vdGF0aW9uUGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldmVydCBhbiBhbm5vdGF0aW9uIHRlcm0gdG8gaXQncyBnZW5lcmljIG9yIHJhdyBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb24gdGhlIGFubm90YXRpb24gdGVybSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IEFubm90YXRpb25UZXJtPGFueT4pOiBSYXdBbm5vdGF0aW9uIHtcbiAgICBjb25zdCBiYXNlQW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbiA9IHtcbiAgICAgICAgdGVybTogYW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICBxdWFsaWZpZXI6IGFubm90YXRpb24ucXVhbGlmaWVyXG4gICAgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uKSkge1xuICAgICAgICAvLyBDb2xsZWN0aW9uXG4gICAgICAgIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCdhbm5vdGF0aW9ucycpICYmIE9iamVjdC5rZXlzKChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gb24gYSBjb2xsZWN0aW9uIGl0c2VsZiwgbm90IHN1cmUgd2hlbiB0aGF0IGhhcHBlbnMgaWYgYXQgYWxsXG4gICAgICAgICAgICBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgKGFubm90YXRpb24gYXMgYW55KS5hbm5vdGF0aW9ucywgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlQW5ub3RhdGlvbixcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGFubm90YXRpb24ubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgYXMgYW55IH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuICAgIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0gdm9pZCAwO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0ge1xuICAgIFwiQXV0aG9yaXphdGlvbi5LZXlMb2NhdGlvblwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUmV2aXNpb25LaW5kXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5EYXRhTW9kaWZpY2F0aW9uT3BlcmF0aW9uS2luZFwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUGVybWlzc2lvblwiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLklzb2xhdGlvbkxldmVsXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuTmF2aWdhdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJDYXBhYmlsaXRpZXMuU2VhcmNoRXhwcmVzc2lvbnNcIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5IdHRwTWV0aG9kXCI6IHRydWUsXG4gICAgXCJBZ2dyZWdhdGlvbi5Sb2xsdXBUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLlRleHRGb3JtYXRUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpbHRlckV4cHJlc3Npb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRWZmZWN0VHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5LaW5kVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW11bmljYXRpb24uQ29udGFjdEluZm9ybWF0aW9uVHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5QaG9uZVR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uR2VuZGVyVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlZpc3VhbGl6YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ3JpdGljYWxpdHlUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVHJlbmRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRBeGlzU2NhbGVCZWhhdmlvclR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydEF4aXNBdXRvU2NhbGVEYXRhU2NvcGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuU2VsZWN0aW9uUmFuZ2VTaWduVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlNlbGVjdGlvblJhbmdlT3B0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5JbXBvcnRhbmNlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNyaXRpY2FsaXR5UmVwcmVzZW50YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlXCI6IGZhbHNlLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHZvaWQgMDtcbnZhciBUZXJtVG9UeXBlcztcbihmdW5jdGlvbiAoVGVybVRvVHlwZXMpIHtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCJdID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BcHBsaWVzVmlhQ29udGFpbmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlcmVmZXJlbmNlYWJsZUlEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db252ZW50aW9uYWxJRHNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlZmF1bHROYW1lc3BhY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkRGVmYXVsdFZhbHVlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTWVkaWFUeXBlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnRlbnREaXNwb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW1pc3RpY0NvbmN1cnJlbmN5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BZGRpdGlvbmFsUHJvcGVydGllc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRSZWZlcmVuY2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1heUltcGxlbWVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9yZGVyZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUG9zaXRpb25hbEluc2VydFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJlcXVpcmVzRXhwbGljaXRCaW5kaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4cGxpY2l0T3BlcmF0aW9uQmluZGluZ3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZEJvdW5kT3BlcmF0aW9uTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFueVN0cnVjdHVyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWZhdWx0Q2FwYWJpbGl0aWVzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZmF1bHRDYXBhYmlsaXRpZXNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZERlZmF1bHRzXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRCYXNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuR3JvdXBhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5MZXZlbGVkSGllcmFyY2h5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZlwiXSA9IFwiRWRtLkRlY2ltYWxcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkRlcml2ZWRUeXBlQ29uc3RyYWludFwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuU2luZ2xlT3JDb2xsZWN0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQXBwbGljYWJsZVRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4SXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluSXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlNjYWxlXCJdID0gXCJFZG0uQnl0ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLkR1cmF0aW9uR3JhbnVsYXJpdHlcIl0gPSBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkRpbWVuc2lvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWNjdW11bGF0aXZlTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUm9sbGVkVXBQcm9wZXJ0eUNvdW50XCJdID0gXCJFZG0uSW50MTZcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5QbGFubmluZ0FjdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQW5hbHl0aWNhbENvbnRleHRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVZlcnNpb25cIl0gPSBcIkVkbS5JbnQzMlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VTY2hlbWFWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9yXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNMYW5ndWFnZUlkZW50aWZpZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVGltZXpvbmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNVcHBlckNhc2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ3VycmVuY3lcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVW5pdFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljU2NhbGVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljUHJlY2lzaW9uXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlY29uZGFyeUtleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1pbk9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4T2NjdXJzXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Bc3NvY2lhdGlvbkVudGl0eVwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZXJpdmVkTmF2aWdhdGlvblwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXNrZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJldmVhbE9uRGVtYW5kXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0luc3RhbmNlQW5ub3RhdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BcHBsaWNhdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXBcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlc1wiXSA9IFwiRWRtLkNvbXBsZXhUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhpbXVtTnVtZXJpY01lc3NhZ2VTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVsYXRlZFJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5JbnRlcnZhbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNBUE9iamVjdE5vZGVUeXBlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNvbXBvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFNob3dWYWx1ZXNJbW1lZGlhdGVseVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhckhhbGZ5ZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckRhdGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclBlcmlvZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFdlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZGaXNjYWxZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJWYXJpYW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NdXR1YWxseUV4Y2x1c2l2ZVRlcm1cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRBY3RpdmF0aW9uVmlhXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRWRpdGFibGVGaWVsZEZvclwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5RdWFsaWZpZWROYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZUhpZ2hcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNyZWF0ZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRBdFwiXSA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEJ5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbHlNdWx0aVVuaXRCZWhhdmlvckZvclNvcnRpbmdBbmRGaWx0ZXJpbmdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlByaW1pdGl2ZVByb3BlcnR5UGF0aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5DdXJyZW5jeUNvZGVzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuVW5pdHNPZk1lYXN1cmVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5TdGFuZGFyZENvZGVcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkV4dGVybmFsQ29kZVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuSXNDb25maWd1cmF0aW9uRGVwcmVjYXRpb25Db2RlXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNFbWFpbEFkZHJlc3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Jc1Bob25lTnVtYmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnREYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza0RhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuTWVzc2FnZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlRGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5NYXRjaENvdW50XCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlQZXJzb25hbFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU3RhdHVzSW5mb1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db250YWN0c1wiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERlZmluaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlMYWJlbHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrVmlld0ZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGhpbmdQZXJzcGVjdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFydE9mUHJldmlld1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NYXBcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk5vdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk5vdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbXBvcnRhbmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzQ29weUFjdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DcmVhdGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVXBkYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRlbGV0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQWRhcHRhdGlvbkhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlDYWxjdWxhdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkVtcGhhc2l6ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuT3JkZXJCeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFyYW1ldGVyRGVmYXVsdFZhbHVlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25TdGF0ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVjb21tZW5kYXRpb25MaXN0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Eb05vdENoZWNrU2NhbGVPZk1lYXN1cmVkUXVhbnRpdHlcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Dc3NEZWZhdWx0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5MaW5rVGFyZ2V0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5MaW5rVGFyZ2V0VHlwZVwiO1xufSkoVGVybVRvVHlwZXMgPSBleHBvcnRzLlRlcm1Ub1R5cGVzIHx8IChleHBvcnRzLlRlcm1Ub1R5cGVzID0ge30pKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5Wb2NhYnVsYXJ5UmVmZXJlbmNlcyA9IHZvaWQgMDtcbi8qKlxuICogVGhlIGxpc3Qgb2Ygdm9jYWJ1bGFyaWVzIHdpdGggZGVmYXVsdCBhbGlhc2VzLlxuICovXG5leHBvcnRzLlZvY2FidWxhcnlSZWZlcmVuY2VzID0gW1xuICAgIHsgYWxpYXM6IFwiQXV0aG9yaXphdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDb3JlXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQ29yZS5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLkNvcmUuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNhcGFiaWxpdGllc1wiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQWdncmVnYXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJWYWxpZGF0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMVwiLCB1cmk6IFwiaHR0cHM6Ly9vYXNpcy10Y3MuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIk1lYXN1cmVzXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5NZWFzdXJlcy5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQW5hbHl0aWNzXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0FuYWx5dGljcy54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29tbW9uXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvbW1vbi54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29kZUxpc3RcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db2RlTGlzdC54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29tbXVuaWNhdGlvblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvbi54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiSGllcmFyY2h5XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0hpZXJhcmNoeS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiUGVyc29uYWxEYXRhXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1BlcnNvbmFsRGF0YS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiU2Vzc2lvblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvU2Vzc2lvbi54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiVUlcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9VSS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiSFRNTDVcIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9IVE1MNS54bWxcIiB9XG5dO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OTkpO1xuIiwiIl19
|
|
2047
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOS4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9jb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjkuMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjkuMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjkuMS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvd3JpdGViYWNrLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrdm9jYWJ1bGFyaWVzLXR5cGVzQDAuMTEuMS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMS4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMS4xL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLHdEQUFvRztBQUNwRyx5Q0FhaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxhQUFrQjtJQUMzRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtRQUNyRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQW9CLEVBQ3BCLFlBQWlCLEVBQ2pCLElBQXdCLEVBQ3hCLGVBQXdCOztJQUV4QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDOUQ7SUFFRCxzREFBc0Q7SUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pC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QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0NBQXdDLG1CQUFtQixLQUFLOzs7Ozs7OztBQzdRcEQ7QUFDYiw4Q0FBNkMsRUFBRSxhQUFhLEVBQUM7QUFDN0QsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1QixNQUFNLG9LQUFvSztBQUMxSyxNQUFNLHlJQUF5STtBQUMvSSxNQUFNLGlLQUFpSztBQUN2SyxNQUFNLDhKQUE4SjtBQUNwSyxNQUFNLDJKQUEySjtBQUNqSyxNQUFNLHFKQUFxSjtBQUMzSixNQUFNLGdKQUFnSjtBQUN0SixNQUFNLHVJQUF1STtBQUM3SSxNQUFNLDZJQUE2STtBQUNuSixNQUFNLDRKQUE0SjtBQUNsSyxNQUFNLGdKQUFnSjtBQUN0SixNQUFNLHlKQUF5SjtBQUMvSixNQUFNLDBJQUEwSTtBQUNoSixNQUFNLDJIQUEySDtBQUNqSSxNQUFNO0FBQ047Ozs7Ozs7VUN0QkE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJBbm5vdGF0aW9uQ29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgICBBY3Rpb24sXG4gICAgQWN0aW9uSW1wb3J0LFxuICAgIEFjdGlvblBhcmFtZXRlcixcbiAgICBBbm5vdGF0aW9uLFxuICAgIEFubm90YXRpb25QYXRoLFxuICAgIEFubm90YXRpb25SZWNvcmQsXG4gICAgQXJyYXlXaXRoSW5kZXgsXG4gICAgQmFzZU5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBDb21wbGV4VHlwZSxcbiAgICBDb252ZXJ0ZWRNZXRhZGF0YSxcbiAgICBFbnRpdHlDb250YWluZXIsXG4gICAgRW50aXR5U2V0LFxuICAgIEVudGl0eVR5cGUsXG4gICAgRXhwcmVzc2lvbixcbiAgICBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgTmF2aWdhdGlvblByb3BlcnR5LFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgsXG4gICAgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLFxuICAgIFByb3BlcnR5LFxuICAgIFByb3BlcnR5UGF0aCxcbiAgICBSYXdBY3Rpb24sXG4gICAgUmF3QWN0aW9uSW1wb3J0LFxuICAgIFJhd0Fubm90YXRpb24sXG4gICAgUmF3Q29tcGxleFR5cGUsXG4gICAgUmF3RW50aXR5Q29udGFpbmVyLFxuICAgIFJhd0VudGl0eVNldCxcbiAgICBSYXdFbnRpdHlUeXBlLFxuICAgIFJhd01ldGFkYXRhLFxuICAgIFJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcsXG4gICAgUmF3UHJvcGVydHksXG4gICAgUmF3U2NoZW1hLFxuICAgIFJhd1NpbmdsZXRvbixcbiAgICBSYXdUeXBlRGVmaW5pdGlvbixcbiAgICBSYXdWMk5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZSxcbiAgICBSZXNvbHV0aW9uVGFyZ2V0LFxuICAgIFNpbmdsZXRvbixcbiAgICBUeXBlRGVmaW5pdGlvblxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5pbXBvcnQgeyBWb2NhYnVsYXJ5UmVmZXJlbmNlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Wb2NhYnVsYXJ5UmVmZXJlbmNlcyc7XG5pbXBvcnQge1xuICAgIGFkZEdldEJ5VmFsdWUsXG4gICAgYWxpYXMsXG4gICAgRGVjaW1hbCxcbiAgICBFbnVtSXNGbGFnLFxuICAgIGxhenksXG4gICAgbWVyZ2VBbm5vdGF0aW9ucyxcbiAgICBzcGxpdEF0Rmlyc3QsXG4gICAgc3BsaXRBdExhc3QsXG4gICAgc3Vic3RyaW5nQmVmb3JlRmlyc3QsXG4gICAgc3Vic3RyaW5nQmVmb3JlTGFzdCxcbiAgICBUZXJtVG9UeXBlcyxcbiAgICB1bmFsaWFzXG59IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIFN5bWJvbCB0byBleHRlbmQgYW4gYW5ub3RhdGlvbiB3aXRoIHRoZSByZWZlcmVuY2UgdG8gaXRzIHRhcmdldC5cbiAqL1xuY29uc3QgQU5OT1RBVElPTl9UQVJHRVQgPSBTeW1ib2woJ0Fubm90YXRpb24gVGFyZ2V0Jyk7XG5cbi8qKlxuICogQXBwZW5kIGFuIG9iamVjdCB0byB0aGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHMgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0LlxuICpcbiAqIEBwYXJhbSBvYmplY3RQYXRoICAgIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICogQHBhcmFtIHZpc2l0ZWRPYmplY3QgVGhlIG9iamVjdFxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZE9iamVjdFBhdGgob2JqZWN0UGF0aDogYW55W10sIHZpc2l0ZWRPYmplY3Q6IGFueSk6IGFueVtdIHtcbiAgICBpZiAob2JqZWN0UGF0aFtvYmplY3RQYXRoLmxlbmd0aCAtIDFdICE9PSB2aXNpdGVkT2JqZWN0KSB7XG4gICAgICAgIG9iamVjdFBhdGgucHVzaCh2aXNpdGVkT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFBhdGg7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgYSAocG9zc2libHkgcmVsYXRpdmUpIHBhdGguXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgICAgICAgIENvbnZlcnRlclxuICogQHBhcmFtIHN0YXJ0RWxlbWVudCAgICAgIFRoZSBzdGFydGluZyBwb2ludCBpbiBjYXNlIG9mIHJlbGF0aXZlIHBhdGggcmVzb2x1dGlvblxuICogQHBhcmFtIHBhdGggICAgICAgICAgICAgIFRoZSBwYXRoIHRvIHJlc29sdmVcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBPbmx5IGZvciBlcnJvciByZXBvcnRpbmc6IFRoZSBhbm5vdGF0aW9uIHRlcm1cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNvbHZlZCB0YXJnZXQgYW5kIHRoZSBlbGVtZW50cyB0aGF0IHdlcmUgdmlzaXRlZCB3aGlsZSBnZXR0aW5nIHRvIHRoZSB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVUYXJnZXQ8VD4oXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgc3RhcnRFbGVtZW50OiBhbnksXG4gICAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGFubm90YXRpb25zVGVybT86IHN0cmluZ1xuKTogUmVzb2x1dGlvblRhcmdldDxUPiB7XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHVuZGVmaW5lZCwgb2JqZWN0UGF0aDogW10sIG1lc3NhZ2VzOiBbXSB9O1xuICAgIH1cblxuICAgIC8vIGFic29sdXRlIHBhdGhzIGFsd2F5cyBzdGFydCBhdCB0aGUgZW50aXR5IGNvbnRhaW5lclxuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7XG4gICAgICAgIHN0YXJ0RWxlbWVudCA9IHVuZGVmaW5lZDsgLy8gd2lsbCByZXNvbHZlIHRvIHRoZSBlbnRpdHkgY29udGFpbmVyIChzZWUgYmVsb3cpXG4gICAgfVxuXG4gICAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLycpLnJlZHVjZSgodGFyZ2V0UGF0aCwgc2VnbWVudCkgPT4ge1xuICAgICAgICBpZiAoc2VnbWVudC5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgICAgICAvLyBTZXBhcmF0ZSBvdXQgdGhlIGFubm90YXRpb25cbiAgICAgICAgICAgIGNvbnN0IFtwYXRoUGFydCwgYW5ub3RhdGlvblBhcnRdID0gc3BsaXRBdEZpcnN0KHNlZ21lbnQsICdAJyk7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2gocGF0aFBhcnQpO1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGBAJHthbm5vdGF0aW9uUGFydH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChzZWdtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0UGF0aDtcbiAgICB9LCBbXSBhcyBzdHJpbmdbXSk7XG5cbiAgICAvLyBkZXRlcm1pbmUgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgcmVzb2x1dGlvblxuICAgIGlmIChzdGFydEVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBubyBzdGFydGluZyBwb2ludCBnaXZlbjogc3RhcnQgYXQgdGhlIGVudGl0eSBjb250YWluZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoYCR7Y29udmVydGVyLnJhd1NjaGVtYS5uYW1lc3BhY2V9LmApICYmXG4gICAgICAgICAgICBwYXRoU2VnbWVudHNbMF0gIT09IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlDb250YWluZXIoKT8uZnVsbHlRdWFsaWZpZWROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGZ1bGx5IHF1YWxpZmllZCBuYW1lIGluIHRoZSBwYXRoIHRoYXQgaXMgbm90IHRoZSBlbnRpdHkgY29udGFpbmVyLlxuICAgICAgICAgICAgc3RhcnRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShwYXRoU2VnbWVudHNbMF0pID8/XG4gICAgICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHBhdGhTZWdtZW50c1swXSkgPz9cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHBhdGhTZWdtZW50c1swXSkgPz9cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKGAke3BhdGhTZWdtZW50c1swXX0oKWApOyAvLyB1bmJvdW5kIGFjdGlvblxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLnNoaWZ0KCk7IC8vIExldCdzIHJlbW92ZSB0aGUgZmlyc3QgcGF0aCBlbGVtZW50XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydEVsZW1lbnQgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0YXJ0RWxlbWVudFtBTk5PVEFUSU9OX1RBUkdFVF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBhbm5vdGF0aW9uOiBzdGFydCBhdCB0aGUgYW5ub3RhdGlvbiB0YXJnZXRcbiAgICAgICAgc3RhcnRFbGVtZW50ID0gc3RhcnRFbGVtZW50W0FOTk9UQVRJT05fVEFSR0VUXTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0RWxlbWVudC5fdHlwZSA9PT0gJ1Byb3BlcnR5Jykge1xuICAgICAgICAvLyBwcm9wZXJ0eTogc3RhcnQgYXQgdGhlIGVudGl0eSB0eXBlIG9yIGNvbXBsZXggdHlwZSB0aGUgcHJvcGVydHkgYmVsb25ncyB0b1xuICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50RlFOID0gc3Vic3RyaW5nQmVmb3JlRmlyc3Qoc3RhcnRFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSwgJy8nKTtcbiAgICAgICAgc3RhcnRFbGVtZW50ID1cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHBhcmVudEVsZW1lbnRGUU4pID8/IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRDb21wbGV4VHlwZShwYXJlbnRFbGVtZW50RlFOKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBwYXRoU2VnbWVudHMucmVkdWNlKFxuICAgICAgICAoY3VycmVudDogUmVzb2x1dGlvblRhcmdldDxhbnk+LCBzZWdtZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gKG1lc3NhZ2U6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQubWVzc2FnZXMucHVzaCh7IG1lc3NhZ2UgfSk7XG4gICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudC50YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSBhcHBlbmRPYmplY3RQYXRoKGN1cnJlbnQub2JqZWN0UGF0aCwgY3VycmVudC50YXJnZXQpO1xuXG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uXG4gICAgICAgICAgICBpZiAoc2VnbWVudC5zdGFydHNXaXRoKCdAJykgJiYgc2VnbWVudCAhPT0gJ0AkdWk1Lm92ZXJsb2FkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IFt2b2NhYnVsYXJ5QWxpYXMsIHRlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBhbm5vdGF0aW9uID0gY3VycmVudC50YXJnZXQuYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeUFsaWFzLnN1YnN0cmluZygxKV0/Llt0ZXJtXTtcblxuICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBhbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgQW5ub3RhdGlvbiAnJHtzZWdtZW50LnN1YnN0cmluZygxKX0nIG5vdCBmb3VuZCBvbiAke2N1cnJlbnQudGFyZ2V0Ll90eXBlfSAnJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZVxuICAgICAgICAgICAgICAgICAgICB9J2BcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyAkUGF0aCAvICRBbm5vdGF0aW9uUGF0aCBzeW50YXhcbiAgICAgICAgICAgIGlmIChjdXJyZW50LnRhcmdldC4kdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1YlBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyRBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IGN1cnJlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudCA9PT0gJyRQYXRoJykge1xuICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gY3VycmVudC50YXJnZXQucGF0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc3ViUGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRhcmdldCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50LnRhcmdldFtBTk5PVEFUSU9OX1RBUkdFVF0sIHN1YlBhdGgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJUYXJnZXQub2JqZWN0UGF0aC5mb3JFYWNoKCh2aXNpdGVkU3ViT2JqZWN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudC5vYmplY3RQYXRoLmluY2x1ZGVzKHZpc2l0ZWRTdWJPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIHZpc2l0ZWRTdWJPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHN1YlRhcmdldC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IGFwcGVuZE9iamVjdFBhdGgoY3VycmVudC5vYmplY3RQYXRoLCBjdXJyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHJhdmVyc2UgYmFzZWQgb24gdGhlIGVsZW1lbnQgdHlwZVxuICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50LnRhcmdldD8uX3R5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdTY2hlbWEnOlxuICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGVsZW1lbnQ6IEVudGl0eVR5cGUsIENvbXBsZXhUeXBlLCBBY3Rpb24sIEVudGl0eUNvbnRhaW5lciA/XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5Q29udGFpbmVyJzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlDb250YWluZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBjb252ZXJ0ZXIudW5hbGlhcyhzZWdtZW50KSA9PT0gdGhpc0VsZW1lbnQuZnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgZWxlbWVudDogRW50aXR5U2V0LCBTaW5nbGV0b24gb3IgQWN0aW9uSW1wb3J0P1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEVsZW1lbnQ6IEVudGl0eVNldCB8IFNpbmdsZXRvbiB8IEFjdGlvbkltcG9ydCB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuZW50aXR5U2V0cy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuc2luZ2xldG9ucy5ieV9uYW1lKHNlZ21lbnQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0VsZW1lbnQuYWN0aW9uSW1wb3J0cy5ieV9uYW1lKHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5leHRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnRW50aXR5U2V0JzpcbiAgICAgICAgICAgICAgICBjYXNlICdTaW5nbGV0b24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgRW50aXR5U2V0IHwgU2luZ2xldG9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJyB8fCBzZWdtZW50ID09PSAnJFR5cGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFbXB0eSBQYXRoIGFmdGVyIGFuIEVudGl0eVNldCBvciBTaW5nbGV0b24gbWVhbnMgRW50aXR5VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSB0aGlzRWxlbWVudC5lbnRpdHlUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJyQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZXNvbHZpbmcgYXQgdGhlIEVudGl0eVNldCdzIG9yIFNpbmdsZXRvbidzIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHRoaXNFbGVtZW50LmVudGl0eVR5cGUsIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdFbnRpdHlUeXBlJzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBFbnRpdHlUeXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgc2VnbWVudCA9PT0gJyRUeXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXNFbGVtZW50LmVudGl0eVByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudGFyZ2V0ID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25Qcm9wZXJ0eSA9IHRoaXNFbGVtZW50Lm5hdmlnYXRpb25Qcm9wZXJ0aWVzLmJ5X25hbWUoc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF2aWdhdGlvblByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBzdWJzdHJpbmdCZWZvcmVGaXJzdChjb252ZXJ0ZXIudW5hbGlhcyhzZWdtZW50KSwgJygnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXNFbGVtZW50LmFjdGlvbnNbYWN0aW9uTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBhY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb25JbXBvcnQnOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlc29sdmluZyBhdCB0aGUgQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50LnRhcmdldC5hY3Rpb24sIHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQub2JqZWN0UGF0aCA9IHJlc3VsdC5vYmplY3RQYXRoLnJlZHVjZShhcHBlbmRPYmplY3RQYXRoLCBjdXJyZW50Lm9iamVjdFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdBY3Rpb24nOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNFbGVtZW50ID0gY3VycmVudC50YXJnZXQgYXMgQWN0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJ0AkdWk1Lm92ZXJsb2FkJyB8fCBzZWdtZW50ID09PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnQgPT09ICckUGFyYW1ldGVyJyAmJiB0aGlzRWxlbWVudC5pc0JvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHRoaXNFbGVtZW50LnBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNFbGVtZW50LnBhcmFtZXRlcnNbc2VnbWVudCBhcyBhbnldID8/XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzRWxlbWVudC5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtOiBBY3Rpb25QYXJhbWV0ZXIpID0+IHBhcmFtLm5hbWUgPT09IHNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuZXh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGhpc0VsZW1lbnQgPSBjdXJyZW50LnRhcmdldCBhcyBQcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHkgb3IgTmF2aWdhdGlvblByb3BlcnR5IG9mIHRoZSBDb21wbGV4VHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXNFbGVtZW50LnRhcmdldFR5cGUgYXMgQ29tcGxleFR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0eXBlLnByb3BlcnRpZXMuYnlfbmFtZShzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmF2aWdhdGlvblByb3BlcnR5ID0gdHlwZS5uYXZpZ2F0aW9uUHJvcGVydGllcy5ieV9uYW1lKHNlZ21lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXZpZ2F0aW9uUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSBuYXZpZ2F0aW9uUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ0FjdGlvblBhcmFtZXRlcic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZWRUeXBlID0gKGN1cnJlbnQudGFyZ2V0IGFzIEFjdGlvblBhcmFtZXRlcikudHlwZVJlZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCByZWZlcmVuY2VkVHlwZSwgc2VnbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IHJlc3VsdC50YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5JzpcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgYXQgdGhlIE5hdmlnYXRpb25Qcm9wZXJ0eSdzIHRhcmdldCB0eXBlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVUYXJnZXQoY29udmVydGVyLCAoY3VycmVudC50YXJnZXQgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlLCBzZWdtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudC50YXJnZXQgPSByZXN1bHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lm9iamVjdFBhdGggPSByZXN1bHQub2JqZWN0UGF0aC5yZWR1Y2UoYXBwZW5kT2JqZWN0UGF0aCwgY3VycmVudC5vYmplY3RQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRhcmdldCA9IGN1cnJlbnQudGFyZ2V0W3NlZ21lbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5vYmplY3RQYXRoID0gYXBwZW5kT2JqZWN0UGF0aChjdXJyZW50Lm9iamVjdFBhdGgsIGN1cnJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBlcnJvcihcbiAgICAgICAgICAgICAgICBgRWxlbWVudCAnJHtzZWdtZW50fScgbm90IGZvdW5kIGF0ICR7Y3VycmVudC50YXJnZXQuX3R5cGV9ICcke2N1cnJlbnQudGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZX0nYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgeyB0YXJnZXQ6IHN0YXJ0RWxlbWVudCwgb2JqZWN0UGF0aDogW10sIG1lc3NhZ2VzOiBbXSB9XG4gICAgKTtcblxuICAgIC8vIERpYWdub3N0aWNzXG4gICAgcmVzdWx0Lm1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IGNvbnZlcnRlci5sb2dFcnJvcihtZXNzYWdlLm1lc3NhZ2UpKTtcbiAgICBpZiAoIXJlc3VsdC50YXJnZXQpIHtcbiAgICAgICAgaWYgKGFubm90YXRpb25zVGVybSkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblR5cGUgPSBpbmZlclR5cGVGcm9tVGVybShjb252ZXJ0ZXIsIGFubm90YXRpb25zVGVybSwgc3RhcnRFbGVtZW50LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJ0hpbnQ6IENoZWNrIGFuZCBjb3JyZWN0IHRoZSBwYXRoIHZhbHVlcyB1bmRlciB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUgbWV0YWRhdGEgKGFubm90YXRpb24ueG1sIGZpbGUgb3IgQ0RTIGFubm90YXRpb25zIGZvciB0aGUgYXBwbGljYXRpb24pOiBcXG5cXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxBbm5vdGF0aW9uIFRlcm0gPSAnICtcbiAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNUZXJtICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPFJlY29yZCBUeXBlID0gJyArXG4gICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25UeXBlICtcbiAgICAgICAgICAgICAgICAgICAgJz4nICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnPEFubm90YXRpb25QYXRoID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGggK1xuICAgICAgICAgICAgICAgICAgICAnPidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1VuYWJsZSB0byByZXNvbHZlIHRoZSBwYXRoIGV4cHJlc3Npb246ICcgK1xuICAgICAgICAgICAgICAgICAgICBwYXRoICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdIaW50OiBDaGVjayBhbmQgY29ycmVjdCB0aGUgcGF0aCB2YWx1ZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIG1ldGFkYXRhIChhbm5vdGF0aW9uLnhtbCBmaWxlIG9yIENEUyBhbm5vdGF0aW9ucyBmb3IgdGhlIGFwcGxpY2F0aW9uKTogXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICc8QW5ub3RhdGlvbiBUZXJtID0gJyArXG4gICAgICAgICAgICAgICAgICAgIHBhdGhTZWdtZW50c1swXSArXG4gICAgICAgICAgICAgICAgICAgICc+JyArXG4gICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJzxQcm9wZXJ0eVZhbHVlICBQYXRoPSAnICtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzWzFdICtcbiAgICAgICAgICAgICAgICAgICAgJz4nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBUeXBlZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHBhdGggY29udGFpbnMgYW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aFN0ciB0aGUgcGF0aCB0byBldmFsdWF0ZVxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIGluIHRoZSBwYXRoLlxuICovXG5mdW5jdGlvbiBpc0Fubm90YXRpb25QYXRoKHBhdGhTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYXRoU3RyLmluY2x1ZGVzKCdAJyk7XG59XG5cbnR5cGUgQW5ub3RhdGlvblZhbHVlPFQ+ID0gVCAmIHsgW0FOTk9UQVRJT05fVEFSR0VUXTogYW55IH07XG5cbmZ1bmN0aW9uIG1hcFByb3BlcnR5UGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBwcm9wZXJ0eVBhdGg6IHsgdHlwZTogJ1Byb3BlcnR5UGF0aCc7IFByb3BlcnR5UGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8UHJvcGVydHlQYXRoPiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ1Byb3BlcnR5UGF0aCcsXG4gICAgICAgIHZhbHVlOiBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD4sXG4gICAgICAgICckdGFyZ2V0JyxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZVRhcmdldDxQcm9wZXJ0eT4oY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVBhdGguUHJvcGVydHlQYXRoLCBjdXJyZW50VGVybSkudGFyZ2V0XG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFByb3BlcnR5UGF0aD47XG59XG5cbmZ1bmN0aW9uIG1hcEFubm90YXRpb25QYXRoKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25QYXRoOiB7IHR5cGU6ICdBbm5vdGF0aW9uUGF0aCc7IEFubm90YXRpb25QYXRoOiBzdHJpbmcgfSxcbiAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPbWl0PEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+PiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgdmFsdWU6IGNvbnZlcnRlci51bmFsaWFzKGFubm90YXRpb25QYXRoLkFubm90YXRpb25QYXRoKSxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIFtBTk5PVEFUSU9OX1RBUkdFVF06IGN1cnJlbnRUYXJnZXRcbiAgICB9O1xuXG4gICAgbGF6eShcbiAgICAgICAgcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxBbm5vdGF0aW9uUGF0aDxhbnk+PixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcmVzdWx0LnZhbHVlLCBjdXJyZW50VGVybSkudGFyZ2V0XG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPEFubm90YXRpb25QYXRoPGFueT4+O1xufVxuXG5mdW5jdGlvbiBtYXBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIG5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHsgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnOyBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfSxcbiAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICBjdXJyZW50VGFyZ2V0OiBhbnksXG4gICAgY3VycmVudFRlcm06IHN0cmluZ1xuKSB7XG4gICAgY29uc3QgcmVzdWx0OiBPbWl0PEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPiwgJyR0YXJnZXQnPiA9IHtcbiAgICAgICAgdHlwZTogJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnLFxuICAgICAgICB2YWx1ZTogbmF2aWdhdGlvblByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoID8/ICcnLFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IGZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg+LFxuICAgICAgICAnJHRhcmdldCcsXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICByZXNvbHZlVGFyZ2V0PE5hdmlnYXRpb25Qcm9wZXJ0eT4oXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvblByb3BlcnR5UGF0aC5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtXG4gICAgICAgICAgICApLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxOYXZpZ2F0aW9uUHJvcGVydHlQYXRoPjtcbn1cblxuZnVuY3Rpb24gbWFwUGF0aChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBwYXRoOiB7IHR5cGU6ICdQYXRoJzsgUGF0aDogc3RyaW5nIH0sXG4gICAgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlc3VsdDogT21pdDxBbm5vdGF0aW9uVmFsdWU8UGF0aEFubm90YXRpb25FeHByZXNzaW9uPGFueT4+LCAnJHRhcmdldCc+ID0ge1xuICAgICAgICB0eXBlOiAnUGF0aCcsXG4gICAgICAgIHBhdGg6IHBhdGguUGF0aCxcbiAgICAgICAgZnVsbHlRdWFsaWZpZWROYW1lOiBmdWxseVF1YWxpZmllZE5hbWUsXG4gICAgICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOyAvLyBUT0RPOiBSZXF1aXJlZCBhY2NvcmRpbmcgdG8gdGhlIHR5cGUuLi5cbiAgICAgICAgfSxcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldFxuICAgIH07XG5cbiAgICBsYXp5KFxuICAgICAgICByZXN1bHQgYXMgQW5ub3RhdGlvblZhbHVlPFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxhbnk+PixcbiAgICAgICAgJyR0YXJnZXQnLFxuICAgICAgICAoKSA9PiByZXNvbHZlVGFyZ2V0PFByb3BlcnR5Pihjb252ZXJ0ZXIsIGN1cnJlbnRUYXJnZXQsIHBhdGguUGF0aCwgY3VycmVudFRlcm0pLnRhcmdldFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIEFubm90YXRpb25WYWx1ZTxQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248YW55Pj47XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWUoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgY3VycmVudFRhcmdldDogYW55LFxuICAgIGN1cnJlbnRUZXJtOiBzdHJpbmcsXG4gICAgY3VycmVudFByb3BlcnR5OiBzdHJpbmcsXG4gICAgY3VycmVudFNvdXJjZTogc3RyaW5nLFxuICAgIHByb3BlcnR5VmFsdWU6IEV4cHJlc3Npb24sXG4gICAgdmFsdWVGUU46IHN0cmluZ1xuKSB7XG4gICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzd2l0Y2ggKHByb3BlcnR5VmFsdWUudHlwZSkge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuU3RyaW5nO1xuICAgICAgICBjYXNlICdJbnQnOlxuICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5VmFsdWUuSW50O1xuICAgICAgICBjYXNlICdCb29sJzpcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eVZhbHVlLkJvb2w7XG4gICAgICAgIGNhc2UgJ0RlY2ltYWwnOlxuICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwocHJvcGVydHlWYWx1ZS5EZWNpbWFsKTtcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZS5EYXRlO1xuICAgICAgICBjYXNlICdFbnVtTWVtYmVyJzpcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0RW51bSA9IHByb3BlcnR5VmFsdWUuRW51bU1lbWJlci5zcGxpdCgnICcpLm1hcCgoZW51bVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdW5hbGlhc2VkID0gY29udmVydGVyLnVuYWxpYXMoZW51bVZhbHVlKSA/PyAnJztcbiAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXMoVm9jYWJ1bGFyeVJlZmVyZW5jZXMsIHVuYWxpYXNlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChzcGxpdEVudW1bMF0gIT09IHVuZGVmaW5lZCAmJiBFbnVtSXNGbGFnW3N1YnN0cmluZ0JlZm9yZUZpcnN0KHNwbGl0RW51bVswXSwgJy8nKV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXRFbnVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0RW51bVswXTtcblxuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcFByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gbWFwTmF2aWdhdGlvblByb3BlcnR5UGF0aChjb252ZXJ0ZXIsIHByb3BlcnR5VmFsdWUsIHZhbHVlRlFOLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSk7XG5cbiAgICAgICAgY2FzZSAnQW5ub3RhdGlvblBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIG1hcEFubm90YXRpb25QYXRoKGNvbnZlcnRlciwgcHJvcGVydHlWYWx1ZSwgdmFsdWVGUU4sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKTtcblxuICAgICAgICBjYXNlICdQYXRoJzoge1xuICAgICAgICAgICAgaWYgKGlzQW5ub3RhdGlvblBhdGgocHJvcGVydHlWYWx1ZS5QYXRoKSkge1xuICAgICAgICAgICAgICAgIC8vIGlubGluZSB0aGUgdGFyZ2V0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVUYXJnZXQoY29udmVydGVyLCBjdXJyZW50VGFyZ2V0LCBwcm9wZXJ0eVZhbHVlLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXBQYXRoKGNvbnZlcnRlciwgcHJvcGVydHlWYWx1ZSwgdmFsdWVGUU4sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ1JlY29yZCc6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VSZWNvcmQoXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFByb3BlcnR5LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS5SZWNvcmQsXG4gICAgICAgICAgICAgICAgdmFsdWVGUU5cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBjdXJyZW50U291cmNlLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUuQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgICB2YWx1ZUZRTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgY2FzZSAnQXBwbHknOlxuICAgICAgICBjYXNlICdOdWxsJzpcbiAgICAgICAgY2FzZSAnTm90JzpcbiAgICAgICAgY2FzZSAnRXEnOlxuICAgICAgICBjYXNlICdOZSc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnR2UnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0xlJzpcbiAgICAgICAgY2FzZSAnSWYnOlxuICAgICAgICBjYXNlICdBbmQnOlxuICAgICAgICBjYXNlICdPcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogSW5mZXIgdGhlIHR5cGUgb2YgYSB0ZXJtIGJhc2VkIG9uIGl0cyB0eXBlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBhbm5vdGF0aW9uc1Rlcm0gICBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcGFyYW0gYW5ub3RhdGlvblRhcmdldCAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gKiBAcGFyYW0gY3VycmVudFByb3BlcnR5ICAgVGhlIGN1cnJlbnQgcHJvcGVydHkgb2YgdGhlIHJlY29yZFxuICogQHJldHVybnMgVGhlIGluZmVycmVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGluZmVyVHlwZUZyb21UZXJtKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGFubm90YXRpb25zVGVybTogc3RyaW5nLFxuICAgIGFubm90YXRpb25UYXJnZXQ6IHN0cmluZyxcbiAgICBjdXJyZW50UHJvcGVydHk/OiBzdHJpbmdcbikge1xuICAgIGxldCB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICBpZiAoY3VycmVudFByb3BlcnR5KSB7XG4gICAgICAgIGFubm90YXRpb25zVGVybSA9IGAke3N1YnN0cmluZ0JlZm9yZUxhc3QoYW5ub3RhdGlvbnNUZXJtLCAnLicpfS4ke2N1cnJlbnRQcm9wZXJ0eX1gO1xuICAgICAgICB0YXJnZXRUeXBlID0gKFRlcm1Ub1R5cGVzIGFzIGFueSlbYW5ub3RhdGlvbnNUZXJtXTtcbiAgICB9XG5cbiAgICBjb252ZXJ0ZXIubG9nRXJyb3IoXG4gICAgICAgIGBUaGUgdHlwZSBvZiB0aGUgcmVjb3JkIHVzZWQgd2l0aGluIHRoZSB0ZXJtICR7YW5ub3RhdGlvbnNUZXJtfSB3YXMgbm90IGRlZmluZWQgYW5kIHdhcyBpbmZlcnJlZCBhcyAke3RhcmdldFR5cGV9LlxuSGludDogSWYgcG9zc2libGUsIHRyeSB0byBtYWludGFpbiB0aGUgVHlwZSBwcm9wZXJ0eSBmb3IgZWFjaCBSZWNvcmQuXG48QW5ub3RhdGlvbnMgVGFyZ2V0PVwiJHthbm5vdGF0aW9uVGFyZ2V0fVwiPlxuXHQ8QW5ub3RhdGlvbiBUZXJtPVwiJHthbm5vdGF0aW9uc1Rlcm19XCI+XG5cdFx0PFJlY29yZD4uLi48L1JlY29yZD5cblx0PC9Bbm5vdGF0aW9uPlxuPC9Bbm5vdGF0aW9ucz5gXG4gICAgKTtcblxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24oYW5ub3RhdGlvbkNvbnRlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGFubm90YXRpb25Db250ZW50Lmhhc093blByb3BlcnR5KCdBY3Rpb24nKSAmJlxuICAgICAgICAoYW5ub3RhdGlvbkNvbnRlbnQuJFR5cGUgPT09ICdjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb24nIHx8XG4gICAgICAgICAgICBhbm5vdGF0aW9uQ29udGVudC4kVHlwZSA9PT0gJ2NvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhBY3Rpb24nKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVjb3JkVHlwZShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByZWNvcmREZWZpbml0aW9uOiBBbm5vdGF0aW9uUmVjb3JkXG4pIHtcbiAgICBsZXQgdGFyZ2V0VHlwZTtcbiAgICBpZiAoIXJlY29yZERlZmluaXRpb24udHlwZSAmJiBjdXJyZW50VGVybSkge1xuICAgICAgICB0YXJnZXRUeXBlID0gaW5mZXJUeXBlRnJvbVRlcm0oY29udmVydGVyLCBjdXJyZW50VGVybSwgY3VycmVudFRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUsIGN1cnJlbnRQcm9wZXJ0eSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0VHlwZSA9IGNvbnZlcnRlci51bmFsaWFzKHJlY29yZERlZmluaXRpb24udHlwZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRUeXBlO1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlY29yZChcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50UHJvcGVydHk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50U291cmNlOiBzdHJpbmcsXG4gICAgYW5ub3RhdGlvblJlY29yZDogQW5ub3RhdGlvblJlY29yZCxcbiAgICBjdXJyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IHJlY29yZDogYW55ID0ge1xuICAgICAgICAkVHlwZTogcGFyc2VSZWNvcmRUeXBlKGNvbnZlcnRlciwgY3VycmVudFRlcm0sIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRQcm9wZXJ0eSwgYW5ub3RhdGlvblJlY29yZCksXG4gICAgICAgIGZ1bGx5UXVhbGlmaWVkTmFtZTogY3VycmVudEZRTixcbiAgICAgICAgW0FOTk9UQVRJT05fVEFSR0VUXTogY3VycmVudFRhcmdldCxcbiAgICAgICAgX19zb3VyY2U6IGN1cnJlbnRTb3VyY2VcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eVZhbHVlIG9mIGFubm90YXRpb25SZWNvcmQucHJvcGVydHlWYWx1ZXMpIHtcbiAgICAgICAgbGF6eShyZWNvcmQsIHByb3BlcnR5VmFsdWUubmFtZSwgKCkgPT5cbiAgICAgICAgICAgIHBhcnNlVmFsdWUoXG4gICAgICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICAgICAgY3VycmVudFRlcm0sXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBgJHtjdXJyZW50RlFOfS8ke3Byb3BlcnR5VmFsdWUubmFtZX1gXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYW5ub3RhdGlvbnMgb24gdGhlIHJlY29yZFxuICAgIGxhenkocmVjb3JkLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnNPbkFubm90YXRpb24oY29udmVydGVyLCBhbm5vdGF0aW9uUmVjb3JkLCByZWNvcmQpKTtcblxuICAgIGlmIChpc0RhdGFGaWVsZFdpdGhGb3JBY3Rpb24ocmVjb3JkKSkge1xuICAgICAgICBsYXp5KHJlY29yZCwgJ0FjdGlvblRhcmdldCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBjb252ZXJ0ZXIudW5hbGlhcyhyZWNvcmQuQWN0aW9uPy50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgLy8gKDEpIEJvdW5kIGFjdGlvbiBvZiB0aGUgYW5ub3RhdGlvbiB0YXJnZXQ/XG4gICAgICAgICAgICBsZXQgYWN0aW9uVGFyZ2V0ID0gY3VycmVudFRhcmdldC5hY3Rpb25zW2FjdGlvbk5hbWVdO1xuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vICgyKSBBY3Rpb25JbXBvcnQgKD0gdW5ib3VuZCBhY3Rpb24pP1xuICAgICAgICAgICAgICAgIGFjdGlvblRhcmdldCA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb25JbXBvcnQoYWN0aW9uTmFtZSk/LmFjdGlvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb25UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICAvLyAoMykgQm91bmQgYWN0aW9uIG9mIGEgZGlmZmVyZW50IEVudGl0eVR5cGUgKHRoZSBhY3Rpb25OYW1lIGlzIGZ1bGx5IHF1YWxpZmllZCBpbiB0aGlzIGNhc2UpXG4gICAgICAgICAgICAgICAgYWN0aW9uVGFyZ2V0ID0gY29udmVydGVyLmdldENvbnZlcnRlZEFjdGlvbihhY3Rpb25OYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldD8uaXNCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvblRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnZlcnRlci5sb2dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYCR7cmVjb3JkLmZ1bGx5UXVhbGlmaWVkTmFtZX06IFVuYWJsZSB0byByZXNvbHZlICcke3JlY29yZC5BY3Rpb259JyAoJyR7YWN0aW9uTmFtZX0nKWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjdGlvblRhcmdldDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmQ7XG59XG5cbmV4cG9ydCB0eXBlIENvbGxlY3Rpb25UeXBlID1cbiAgICB8ICdQcm9wZXJ0eVBhdGgnXG4gICAgfCAnUGF0aCdcbiAgICB8ICdJZidcbiAgICB8ICdBcHBseSdcbiAgICB8ICdOdWxsJ1xuICAgIHwgJ0FuZCdcbiAgICB8ICdFcSdcbiAgICB8ICdOZSdcbiAgICB8ICdOb3QnXG4gICAgfCAnR3QnXG4gICAgfCAnR2UnXG4gICAgfCAnTHQnXG4gICAgfCAnTGUnXG4gICAgfCAnT3InXG4gICAgfCAnQW5ub3RhdGlvblBhdGgnXG4gICAgfCAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCdcbiAgICB8ICdSZWNvcmQnXG4gICAgfCAnU3RyaW5nJ1xuICAgIHwgJ0VtcHR5Q29sbGVjdGlvbic7XG5cbi8qKlxuICogUmV0cmlldmUgb3IgaW5mZXIgdGhlIGNvbGxlY3Rpb24gdHlwZSBiYXNlZCBvbiBpdHMgY29udGVudC5cbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbkRlZmluaXRpb25cbiAqIEByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10pOiBDb2xsZWN0aW9uVHlwZSB7XG4gICAgbGV0IHR5cGU6IENvbGxlY3Rpb25UeXBlID0gKGNvbGxlY3Rpb25EZWZpbml0aW9uIGFzIGFueSkudHlwZTtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkICYmIGNvbGxlY3Rpb25EZWZpbml0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZmlyc3RDb2xJdGVtID0gY29sbGVjdGlvbkRlZmluaXRpb25bMF07XG4gICAgICAgIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ1Byb3BlcnR5UGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ1Byb3BlcnR5UGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdQYXRoJykpIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUGF0aCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdBbm5vdGF0aW9uUGF0aCcpKSB7XG4gICAgICAgICAgICB0eXBlID0gJ0Fubm90YXRpb25QYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChmaXJzdENvbEl0ZW0uaGFzT3duUHJvcGVydHkoJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSkge1xuICAgICAgICAgICAgdHlwZSA9ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJztcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBmaXJzdENvbEl0ZW0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCd0eXBlJykgfHwgZmlyc3RDb2xJdGVtLmhhc093blByb3BlcnR5KCdwcm9wZXJ0eVZhbHVlcycpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHR5cGUgPSAnUmVjb3JkJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlyc3RDb2xJdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHlwZSA9ICdFbXB0eUNvbGxlY3Rpb24nO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VDb2xsZWN0aW9uKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIGN1cnJlbnRUYXJnZXQ6IGFueSxcbiAgICBjdXJyZW50VGVybTogc3RyaW5nLFxuICAgIGN1cnJlbnRQcm9wZXJ0eTogc3RyaW5nLFxuICAgIGN1cnJlbnRTb3VyY2U6IHN0cmluZyxcbiAgICBjb2xsZWN0aW9uRGVmaW5pdGlvbjogYW55W10sXG4gICAgcGFyZW50RlFOOiBzdHJpbmdcbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSA9IGdldE9ySW5mZXJDb2xsZWN0aW9uVHlwZShjb2xsZWN0aW9uRGVmaW5pdGlvbik7XG5cbiAgICBzd2l0Y2ggKGNvbGxlY3Rpb25EZWZpbml0aW9uVHlwZSkge1xuICAgICAgICBjYXNlICdQcm9wZXJ0eVBhdGgnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocGF0aCwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWFwUHJvcGVydHlQYXRoKGNvbnZlcnRlciwgcGF0aCwgYCR7cGFyZW50RlFOfS8ke2luZGV4fWAsIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjYXNlICdQYXRoJzpcbiAgICAgICAgICAgIC8vIFRPRE86IG1ha2UgbGF6eT9cbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKHBhdGhWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlVGFyZ2V0KGNvbnZlcnRlciwgY3VycmVudFRhcmdldCwgcGF0aFZhbHVlLlBhdGgsIGN1cnJlbnRUZXJtKS50YXJnZXQ7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdBbm5vdGF0aW9uUGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBtYXBBbm5vdGF0aW9uUGF0aChjb252ZXJ0ZXIsIHBhdGgsIGAke3BhcmVudEZRTn0vJHtpbmRleH1gLCBjdXJyZW50VGFyZ2V0LCBjdXJyZW50VGVybSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY2FzZSAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChwYXRoLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBtYXBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoKGNvbnZlcnRlciwgcGF0aCwgYCR7cGFyZW50RlFOfS8ke2luZGV4fWAsIGN1cnJlbnRUYXJnZXQsIGN1cnJlbnRUZXJtKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjYXNlICdSZWNvcmQnOlxuICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25EZWZpbml0aW9uLm1hcCgocmVjb3JkRGVmaW5pdGlvbiwgcmVjb3JkSWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVjb3JkKFxuICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXJtLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgIGAke3BhcmVudEZRTn0vJHtyZWNvcmRJZHh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlICdBcHBseSc6XG4gICAgICAgIGNhc2UgJ051bGwnOlxuICAgICAgICBjYXNlICdJZic6XG4gICAgICAgIGNhc2UgJ0VxJzpcbiAgICAgICAgY2FzZSAnTmUnOlxuICAgICAgICBjYXNlICdMdCc6XG4gICAgICAgIGNhc2UgJ0d0JzpcbiAgICAgICAgY2FzZSAnTGUnOlxuICAgICAgICBjYXNlICdHZSc6XG4gICAgICAgIGNhc2UgJ05vdCc6XG4gICAgICAgIGNhc2UgJ0FuZCc6XG4gICAgICAgIGNhc2UgJ09yJzpcbiAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9uRGVmaW5pdGlvbi5tYXAoKGlmVmFsdWUpID0+IGlmVmFsdWUpO1xuXG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbkRlZmluaXRpb24ubWFwKChzdHJpbmdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nVmFsdWUgPT09ICdzdHJpbmcnIHx8IHN0cmluZ1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZS5TdHJpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uRGVmaW5pdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVjROYXZpZ2F0aW9uUHJvcGVydHkoXG4gICAgbmF2UHJvcDogUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHkgfCBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogbmF2UHJvcCBpcyBSYXdWNE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG4gICAgcmV0dXJuICEhKG5hdlByb3AgYXMgQmFzZU5hdmlnYXRpb25Qcm9wZXJ0eSkudGFyZ2V0VHlwZU5hbWU7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRBbm5vdGF0aW9uKGNvbnZlcnRlcjogQ29udmVydGVyLCB0YXJnZXQ6IGFueSwgcmF3QW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbik6IEFubm90YXRpb24ge1xuICAgIGxldCBhbm5vdGF0aW9uOiBhbnk7XG4gICAgaWYgKHJhd0Fubm90YXRpb24ucmVjb3JkKSB7XG4gICAgICAgIGFubm90YXRpb24gPSBwYXJzZVJlY29yZChcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24udGVybSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZSxcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb24ucmVjb3JkLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJhd0Fubm90YXRpb24uY29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFubm90YXRpb24gPSBwYXJzZVZhbHVlKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlLFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi52YWx1ZSA/PyB7IHR5cGU6ICdCb29sJywgQm9vbDogdHJ1ZSB9LFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHJhd0Fubm90YXRpb24uY29sbGVjdGlvbikge1xuICAgICAgICBhbm5vdGF0aW9uID0gcGFyc2VDb2xsZWN0aW9uKFxuICAgICAgICAgICAgY29udmVydGVyLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAocmF3QW5ub3RhdGlvbiBhcyBhbnkpLl9fc291cmNlLFxuICAgICAgICAgICAgcmF3QW5ub3RhdGlvbi5jb2xsZWN0aW9uLFxuICAgICAgICAgICAgKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWVcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhc2UnKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhbm5vdGF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LXdyYXBwZXJzXG4gICAgICAgICAgICBhbm5vdGF0aW9uID0gbmV3IFN0cmluZyhhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctd3JhcHBlcnNcbiAgICAgICAgICAgIGFubm90YXRpb24gPSBuZXcgQm9vbGVhbihhbm5vdGF0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgYW5ub3RhdGlvbiA9IG5ldyBOdW1iZXIoYW5ub3RhdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lID0gKHJhd0Fubm90YXRpb24gYXMgYW55KS5mdWxseVF1YWxpZmllZE5hbWU7XG4gICAgYW5ub3RhdGlvbltBTk5PVEFUSU9OX1RBUkdFVF0gPSB0YXJnZXQ7XG5cbiAgICBjb25zdCBbdm9jQWxpYXMsIHZvY1Rlcm1dID0gY29udmVydGVyLnNwbGl0VGVybShyYXdBbm5vdGF0aW9uLnRlcm0pO1xuXG4gICAgYW5ub3RhdGlvbi50ZXJtID0gY29udmVydGVyLnVuYWxpYXMoYCR7dm9jQWxpYXN9LiR7dm9jVGVybX1gLCBWb2NhYnVsYXJ5UmVmZXJlbmNlcyk7XG4gICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPSByYXdBbm5vdGF0aW9uLnF1YWxpZmllcjtcbiAgICBhbm5vdGF0aW9uLl9fc291cmNlID0gKHJhd0Fubm90YXRpb24gYXMgYW55KS5fX3NvdXJjZTtcblxuICAgIHRyeSB7XG4gICAgICAgIGxhenkoYW5ub3RhdGlvbiwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zT25Bbm5vdGF0aW9uKGNvbnZlcnRlciwgcmF3QW5ub3RhdGlvbiwgYW5ub3RhdGlvbikpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbm90IGFuIGVycm9yOiBwYXJzZVJlY29yZCgpIGFscmVhZHkgYWRkcyBhbm5vdGF0aW9ucywgYnV0IHRoZSBvdGhlciBwYXJzZVhYWCBmdW5jdGlvbnMgZG9uJ3QsIHNvIHRoaXMgY2FuIGhhcHBlblxuICAgIH1cblxuICAgIHJldHVybiBhbm5vdGF0aW9uIGFzIEFubm90YXRpb247XG59XG5cbmNsYXNzIENvbnZlcnRlciB7XG4gICAgcHJpdmF0ZSBhbm5vdGF0aW9uc0J5VGFyZ2V0OiBSZWNvcmQ8RnVsbHlRdWFsaWZpZWROYW1lLCBBbm5vdGF0aW9uW10+O1xuXG4gICAgLyoqXG4gICAgICogR2V0IHByZXByb2Nlc3NlZCBhbm5vdGF0aW9ucyBvbiB0aGUgc3BlY2lmaWVkIHRhcmdldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgICAgVGhlIGFubm90YXRpb24gdGFyZ2V0XG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgYW5ub3RhdGlvbnNcbiAgICAgKi9cbiAgICBnZXRBbm5vdGF0aW9ucyh0YXJnZXQ6IEZ1bGx5UXVhbGlmaWVkTmFtZSk6IEFubm90YXRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmFubm90YXRpb25zQnlUYXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvblNvdXJjZXMgPSBPYmplY3Qua2V5cyh0aGlzLnJhd1NjaGVtYS5hbm5vdGF0aW9ucykubWFwKChzb3VyY2UpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZTogc291cmNlLFxuICAgICAgICAgICAgICAgIGFubm90YXRpb25MaXN0OiB0aGlzLnJhd1NjaGVtYS5hbm5vdGF0aW9uc1tzb3VyY2VdXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNCeVRhcmdldCA9IG1lcmdlQW5ub3RhdGlvbnModGhpcy5yYXdNZXRhZGF0YS5yZWZlcmVuY2VzLCAuLi5hbm5vdGF0aW9uU291cmNlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0J5VGFyZ2V0W3RhcmdldF0gPz8gW107XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRW50aXR5Q29udGFpbmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb252ZXJ0ZWRFbGVtZW50KFxuICAgICAgICAgICAgdGhpcy5yYXdNZXRhZGF0YS5zY2hlbWEuZW50aXR5Q29udGFpbmVyLmZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgICAgIHRoaXMucmF3TWV0YWRhdGEuc2NoZW1hLmVudGl0eUNvbnRhaW5lcixcbiAgICAgICAgICAgIGNvbnZlcnRFbnRpdHlDb250YWluZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRFbnRpdHlTZXQoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmVudGl0eVNldHMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkU2luZ2xldG9uKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5zaW5nbGV0b25zLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEVudGl0eVR5cGUoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LmVudGl0eVR5cGVzLmJ5X2Z1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZENvbXBsZXhUeXBlKGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZE91dHB1dC5jb21wbGV4VHlwZXMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkVHlwZURlZmluaXRpb24oZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkT3V0cHV0LnR5cGVEZWZpbml0aW9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBnZXRDb252ZXJ0ZWRBY3Rpb25JbXBvcnQoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpIHtcbiAgICAgICAgbGV0IGFjdGlvbkltcG9ydCA9IHRoaXMuY29udmVydGVkT3V0cHV0LmFjdGlvbkltcG9ydHMuYnlfZnVsbHlRdWFsaWZpZWROYW1lKGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG4gICAgICAgIGlmICghYWN0aW9uSW1wb3J0KSB7XG4gICAgICAgICAgICBhY3Rpb25JbXBvcnQgPSB0aGlzLmNvbnZlcnRlZE91dHB1dC5hY3Rpb25JbXBvcnRzLmJ5X25hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uSW1wb3J0O1xuICAgIH1cblxuICAgIGdldENvbnZlcnRlZEFjdGlvbihmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRPdXRwdXQuYWN0aW9ucy5ieV9mdWxseVF1YWxpZmllZE5hbWUoZnVsbHlRdWFsaWZpZWROYW1lKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0PENvbnZlcnRlZCwgUmF3IGV4dGVuZHMgUmF3VHlwZTxDb252ZXJ0ZWQ+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhdyxcbiAgICAgICAgbWFwOiAoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhdzogUmF3KSA9PiBDb252ZXJ0ZWRcbiAgICApOiAoKSA9PiBDb252ZXJ0ZWQ7XG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPiwgSW5kZXhQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgQ29udmVydGVkLCBzdHJpbmc+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhd1tdLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgpID0+IEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT47XG4gICAgY29udmVydDxDb252ZXJ0ZWQsIFJhdyBleHRlbmRzIFJhd1R5cGU8Q29udmVydGVkPiwgSW5kZXhQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgQ29udmVydGVkLCBzdHJpbmc+PihcbiAgICAgICAgcmF3VmFsdWU6IFJhdyB8IFJhd1tdLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXcpID0+IENvbnZlcnRlZFxuICAgICk6ICgoKSA9PiBDb252ZXJ0ZWQpIHwgKCgpID0+IEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT4pIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHJhd1ZhbHVlLnJlZHVjZSgoY29udmVydGVkRWxlbWVudHMsIHJhd0VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkRWxlbWVudCA9IHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIChyYXdFbGVtZW50IGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3RWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydGVkRWxlbWVudHMucHVzaChjb252ZXJ0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgfSwgW10gYXMgQ29udmVydGVkW10pO1xuICAgICAgICAgICAgICAgIGFkZEdldEJ5VmFsdWUoY29udmVydGVkLCAnbmFtZScgYXMgYW55KTtcbiAgICAgICAgICAgICAgICBhZGRHZXRCeVZhbHVlKGNvbnZlcnRlZCwgJ2Z1bGx5UXVhbGlmaWVkTmFtZScgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVkIGFzIEFycmF5V2l0aEluZGV4PENvbnZlcnRlZCwgSW5kZXhQcm9wZXJ0eT47XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuZ2V0Q29udmVydGVkRWxlbWVudChyYXdWYWx1ZS5mdWxseVF1YWxpZmllZE5hbWUsIHJhd1ZhbHVlLCBtYXApITtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmF3TWV0YWRhdGE6IFJhd01ldGFkYXRhO1xuICAgIHByaXZhdGUgY29udmVydGVkRWxlbWVudHM6IE1hcDxGdWxseVF1YWxpZmllZE5hbWUsIGFueT4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBjb252ZXJ0ZWRPdXRwdXQ6IENvbnZlcnRlZE1ldGFkYXRhO1xuXG4gICAgcmF3U2NoZW1hOiBSYXdTY2hlbWE7XG5cbiAgICBjb25zdHJ1Y3RvcihyYXdNZXRhZGF0YTogUmF3TWV0YWRhdGEsIGNvbnZlcnRlZE91dHB1dDogQ29udmVydGVkTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5yYXdNZXRhZGF0YSA9IHJhd01ldGFkYXRhO1xuICAgICAgICB0aGlzLnJhd1NjaGVtYSA9IHJhd01ldGFkYXRhLnNjaGVtYTtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRPdXRwdXQgPSBjb252ZXJ0ZWRPdXRwdXQ7XG4gICAgfVxuXG4gICAgZ2V0Q29udmVydGVkRWxlbWVudDxDb252ZXJ0ZWRUeXBlLCBSYXdUeXBlIGV4dGVuZHMgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGU8Q29udmVydGVkVHlwZT4+KFxuICAgICAgICBmdWxseVF1YWxpZmllZE5hbWU6IEZ1bGx5UXVhbGlmaWVkTmFtZSxcbiAgICAgICAgcmF3RWxlbWVudDogUmF3VHlwZSB8IHVuZGVmaW5lZCB8ICgoZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUpID0+IFJhd1R5cGUgfCB1bmRlZmluZWQpLFxuICAgICAgICBtYXA6IChjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3OiBSYXdUeXBlKSA9PiBDb252ZXJ0ZWRUeXBlXG4gICAgKTogQ29udmVydGVkVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGxldCBjb252ZXJ0ZWQ6IENvbnZlcnRlZFR5cGUgfCB1bmRlZmluZWQgPSB0aGlzLmNvbnZlcnRlZEVsZW1lbnRzLmdldChmdWxseVF1YWxpZmllZE5hbWUpO1xuICAgICAgICBpZiAoY29udmVydGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd01ldGFkYXRhID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgcmF3RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/IHJhd0VsZW1lbnQuYXBwbHkodW5kZWZpbmVkLCBbZnVsbHlRdWFsaWZpZWROYW1lXSkgOiByYXdFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHJhd01ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBtYXAuYXBwbHkodW5kZWZpbmVkLCBbdGhpcywgcmF3TWV0YWRhdGFdKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEVsZW1lbnRzLnNldChmdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcbiAgICB9XG5cbiAgICBsb2dFcnJvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRPdXRwdXQuZGlhZ25vc3RpY3MucHVzaCh7IG1lc3NhZ2UgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3BsaXQgdGhlIGFsaWFzIGZyb20gdGhlIHRlcm0gdmFsdWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGVybSB0aGUgdmFsdWUgb2YgdGhlIHRlcm1cbiAgICAgKiBAcmV0dXJucyB0aGUgdGVybSBhbGlhcyBhbmQgdGhlIGFjdHVhbCB0ZXJtIHZhbHVlXG4gICAgICovXG4gICAgc3BsaXRUZXJtKHRlcm06IHN0cmluZykge1xuICAgICAgICBjb25zdCBhbGlhc2VkID0gYWxpYXMoVm9jYWJ1bGFyeVJlZmVyZW5jZXMsIHRlcm0pO1xuICAgICAgICByZXR1cm4gc3BsaXRBdExhc3QoYWxpYXNlZCwgJy4nKTtcbiAgICB9XG5cbiAgICB1bmFsaWFzKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJlZmVyZW5jZXMgPSB0aGlzLnJhd01ldGFkYXRhLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXMocmVmZXJlbmNlcywgdmFsdWUsIHRoaXMucmF3U2NoZW1hLm5hbWVzcGFjZSkgPz8gJyc7XG4gICAgfVxufVxuXG50eXBlIFJhd1R5cGU8VD4gPSBSZW1vdmVBbm5vdGF0aW9uQW5kVHlwZTxUPiAmIHsgZnVsbHlRdWFsaWZpZWROYW1lOiBGdWxseVF1YWxpZmllZE5hbWUgfTtcblxuZnVuY3Rpb24gcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIGZ1bGx5UXVhbGlmaWVkTmFtZTogRnVsbHlRdWFsaWZpZWROYW1lKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgbGV0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5VHlwZShmdWxseVF1YWxpZmllZE5hbWUpO1xuXG4gICAgICAgIGlmICghZW50aXR5VHlwZSkge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKGBFbnRpdHlUeXBlICcke2Z1bGx5UXVhbGlmaWVkTmFtZX0nIG5vdCBmb3VuZGApO1xuICAgICAgICAgICAgZW50aXR5VHlwZSA9IHt9IGFzIEVudGl0eVR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0eVR5cGU7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKFxuICAgIGNvbnZlcnRlcjogQ29udmVydGVyLFxuICAgIHJhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzOiBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXG4pIHtcbiAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMocmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MpLnJlZHVjZSgobmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MsIGJpbmRpbmdQYXRoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByYXdCaW5kaW5nVGFyZ2V0ID0gcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3NbYmluZGluZ1BhdGhdO1xuXG4gICAgICAgICAgICBsYXp5KFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzLFxuICAgICAgICAgICAgICAgIGJpbmRpbmdQYXRoLFxuICAgICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nIHdpbGwgbGVhZCB0byBlaXRoZXIgYW4gRW50aXR5U2V0IG9yIGEgU2luZ2xldG9uLCBpdCBjYW5ub3QgYmUgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIChjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRW50aXR5U2V0KHJhd0JpbmRpbmdUYXJnZXQpID8/XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkU2luZ2xldG9uKHJhd0JpbmRpbmdUYXJnZXQpKSFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3M7XG4gICAgICAgIH0sIHt9IGFzIEVudGl0eVNldFsnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZyddIHwgU2luZ2xldG9uWyduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJ10pO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0Fubm90YXRpb25UYXJnZXQ6IGFueSkge1xuICAgIGNvbnN0IG5lc3RlZEFubm90YXRpb25zID0gcmF3QW5ub3RhdGlvblRhcmdldC5hbm5vdGF0aW9ucztcblxuICAgIHJldHVybiAoKSA9PlxuICAgICAgICBjcmVhdGVBbm5vdGF0aW9uc09iamVjdChcbiAgICAgICAgICAgIGNvbnZlcnRlcixcbiAgICAgICAgICAgIHJhd0Fubm90YXRpb25UYXJnZXQsXG4gICAgICAgICAgICBuZXN0ZWRBbm5vdGF0aW9ucyA/PyBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnMocmF3QW5ub3RhdGlvblRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUpXG4gICAgICAgICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBbm5vdGF0aW9uc09uQW5ub3RhdGlvbihcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICBhbm5vdGF0aW9uUmVjb3JkOiBBbm5vdGF0aW9uUmVjb3JkIHwgUmF3QW5ub3RhdGlvbixcbiAgICBhbm5vdGF0aW9uVGVybTogYW55XG4pIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RlFOID0gYW5ub3RhdGlvblRlcm0uZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIC8vIGJlIGdyYWNlZnVsIHdoZW4gcmVzb2x2aW5nIGFubm90YXRpb25zIG9uIGFubm90YXRpb25zOiBTb21ldGltZXMgdGhleSBhcmUgcmVmZXJlbmNlZCBkaXJlY3RseSwgc29tZXRpbWVzIHRoZXlcbiAgICAgICAgLy8gYXJlIHBhcnQgb2YgdGhlIGdsb2JhbCBhbm5vdGF0aW9ucyBsaXN0XG4gICAgICAgIGxldCBhbm5vdGF0aW9ucztcbiAgICAgICAgaWYgKGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnMgJiYgYW5ub3RhdGlvblJlY29yZC5hbm5vdGF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25SZWNvcmQuYW5ub3RhdGlvbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGNvbnZlcnRlci5nZXRBbm5vdGF0aW9ucyhjdXJyZW50RlFOKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFubm90YXRpb25zPy5mb3JFYWNoKChhbm5vdGF0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFubm90YXRpb24udGFyZ2V0ID0gY3VycmVudEZRTjtcbiAgICAgICAgICAgIGFubm90YXRpb24uX19zb3VyY2UgPSBhbm5vdGF0aW9uVGVybS5fX3NvdXJjZTtcbiAgICAgICAgICAgIGFubm90YXRpb25bQU5OT1RBVElPTl9UQVJHRVRdID0gYW5ub3RhdGlvblRlcm1bQU5OT1RBVElPTl9UQVJHRVRdO1xuICAgICAgICAgICAgYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPSBgJHtjdXJyZW50RlFOfUAke2Fubm90YXRpb24udGVybX1gO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3JlYXRlQW5ub3RhdGlvbnNPYmplY3QoY29udmVydGVyLCBhbm5vdGF0aW9uVGVybSwgYW5ub3RhdGlvbnMgPz8gW10pO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlcjogQ29udmVydGVyLCB0YXJnZXQ6IGFueSwgcmF3QW5ub3RhdGlvbnM6IFJhd0Fubm90YXRpb25bXSkge1xuICAgIHJldHVybiByYXdBbm5vdGF0aW9ucy5yZWR1Y2UoKHZvY2FidWxhcnlBbGlhc2VzLCBhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IFt2b2NBbGlhcywgdm9jVGVybV0gPSBjb252ZXJ0ZXIuc3BsaXRUZXJtKGFubm90YXRpb24udGVybSk7XG4gICAgICAgIGNvbnN0IHZvY1Rlcm1XaXRoUXVhbGlmaWVyID0gYCR7dm9jVGVybX0ke2Fubm90YXRpb24ucXVhbGlmaWVyID8gJyMnICsgYW5ub3RhdGlvbi5xdWFsaWZpZXIgOiAnJ31gO1xuXG4gICAgICAgIGlmICh2b2NhYnVsYXJ5QWxpYXNlc1t2b2NBbGlhc10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZvY2FidWxhcnlBbGlhc2VzW3ZvY0FsaWFzXS5oYXNPd25Qcm9wZXJ0eSh2b2NUZXJtV2l0aFF1YWxpZmllcikpIHtcbiAgICAgICAgICAgIGxhenkodm9jYWJ1bGFyeUFsaWFzZXNbdm9jQWxpYXNdLCB2b2NUZXJtV2l0aFF1YWxpZmllciwgKCkgPT5cbiAgICAgICAgICAgICAgICBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkRWxlbWVudChcbiAgICAgICAgICAgICAgICAgICAgKGFubm90YXRpb24gYXMgQW5ub3RhdGlvbikuZnVsbHlRdWFsaWZpZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAoY29udmVydGVyLCByYXdBbm5vdGF0aW9uKSA9PiBjb252ZXJ0QW5ub3RhdGlvbihjb252ZXJ0ZXIsIHRhcmdldCwgcmF3QW5ub3RhdGlvbilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2b2NhYnVsYXJ5QWxpYXNlcztcbiAgICB9LCB7fSBhcyBhbnkpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEVudGl0eUNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdFbnRpdHlDb250YWluZXIgICAgVW5jb252ZXJ0ZWQgRW50aXR5Q29udGFpbmVyXG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eUNvbnRhaW5lclxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5Q29udGFpbmVyKGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlDb250YWluZXI6IFJhd0VudGl0eUNvbnRhaW5lcik6IEVudGl0eUNvbnRhaW5lciB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5Q29udGFpbmVyID0gcmF3RW50aXR5Q29udGFpbmVyIGFzIEVudGl0eUNvbnRhaW5lcjtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdFbnRpdHlDb250YWluZXIpKTtcblxuICAgIGxhenkoY29udmVydGVkRW50aXR5Q29udGFpbmVyLCAnZW50aXR5U2V0cycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuZW50aXR5U2V0cywgY29udmVydEVudGl0eVNldCkpO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsICdzaW5nbGV0b25zJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5zaW5nbGV0b25zLCBjb252ZXJ0U2luZ2xldG9uKSk7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlDb250YWluZXIsXG4gICAgICAgICdhY3Rpb25JbXBvcnRzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25JbXBvcnRzLCBjb252ZXJ0QWN0aW9uSW1wb3J0KVxuICAgICk7XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5Q29udGFpbmVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgU2luZ2xldG9uLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdTaW5nbGV0b24gIFVuY29udmVydGVkIFNpbmdsZXRvblxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBTaW5nbGV0b25cbiAqL1xuZnVuY3Rpb24gY29udmVydFNpbmdsZXRvbihjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3U2luZ2xldG9uOiBSYXdTaW5nbGV0b24pOiBTaW5nbGV0b24ge1xuICAgIGNvbnN0IGNvbnZlcnRlZFNpbmdsZXRvbiA9IHJhd1NpbmdsZXRvbiBhcyB1bmtub3duIGFzIFNpbmdsZXRvbjtcblxuICAgIGxhenkoY29udmVydGVkU2luZ2xldG9uLCAnZW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3U2luZ2xldG9uLmVudGl0eVR5cGVOYW1lKSk7XG4gICAgbGF6eShjb252ZXJ0ZWRTaW5nbGV0b24sICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIGNvbnZlcnRlZFNpbmdsZXRvbikpO1xuXG4gICAgY29uc3QgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzID0gcmF3U2luZ2xldG9uLm5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmc7XG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkU2luZ2xldG9uLFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnR5QmluZGluZycsXG4gICAgICAgIHJlc29sdmVOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncyhjb252ZXJ0ZXIsIF9yYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5ncylcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZFNpbmdsZXRvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBFbnRpdHlTZXQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eVNldCAgVW5jb252ZXJ0ZWQgRW50aXR5U2V0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEVudGl0eVNldFxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5U2V0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdFbnRpdHlTZXQ6IFJhd0VudGl0eVNldCk6IEVudGl0eVNldCB7XG4gICAgY29uc3QgY29udmVydGVkRW50aXR5U2V0ID0gcmF3RW50aXR5U2V0IGFzIHVua25vd24gYXMgRW50aXR5U2V0O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlTZXQsICdlbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdFbnRpdHlTZXQuZW50aXR5VHlwZU5hbWUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVNldCwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgY29udmVydGVkRW50aXR5U2V0KSk7XG5cbiAgICBjb25zdCBfcmF3TmF2aWdhdGlvblByb3BlcnR5QmluZGluZ3MgPSByYXdFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZztcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlTZXQsXG4gICAgICAgICduYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nJyxcbiAgICAgICAgcmVzb2x2ZU5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKGNvbnZlcnRlciwgX3Jhd05hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdzKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29udmVydGVkRW50aXR5U2V0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEVudGl0eVR5cGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0VudGl0eVR5cGUgIFVuY29udmVydGVkIEVudGl0eVR5cGVcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgRW50aXR5VHlwZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0RW50aXR5VHlwZShjb252ZXJ0ZXI6IENvbnZlcnRlciwgcmF3RW50aXR5VHlwZTogUmF3RW50aXR5VHlwZSk6IEVudGl0eVR5cGUge1xuICAgIGNvbnN0IGNvbnZlcnRlZEVudGl0eVR5cGUgPSByYXdFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGU7XG5cbiAgICByYXdFbnRpdHlUeXBlLmtleXMuZm9yRWFjaCgoa2V5UHJvcDogYW55KSA9PiB7XG4gICAgICAgIGtleVByb3AuaXNLZXkgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRFbnRpdHlUeXBlLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdFbnRpdHlUeXBlKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdrZXlzJywgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5rZXlzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdlbnRpdHlQcm9wZXJ0aWVzJywgY29udmVydGVyLmNvbnZlcnQocmF3RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRFbnRpdHlUeXBlLFxuICAgICAgICAnbmF2aWdhdGlvblByb3BlcnRpZXMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChyYXdFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzIGFzIGFueVtdLCBjb252ZXJ0TmF2aWdhdGlvblByb3BlcnR5KVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEVudGl0eVR5cGUsICdhY3Rpb25zJywgKCkgPT5cbiAgICAgICAgY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChyYXdBY3Rpb24pID0+XG4gICAgICAgICAgICAgICAgICAgIHJhd0FjdGlvbi5pc0JvdW5kICYmXG4gICAgICAgICAgICAgICAgICAgIChyYXdBY3Rpb24uc291cmNlVHlwZSA9PT0gcmF3RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd0FjdGlvbi5zb3VyY2VUeXBlID09PSBgQ29sbGVjdGlvbigke3Jhd0VudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lfSlgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWN0aW9ucywgcmF3QWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGAke2NvbnZlcnRlci5yYXdTY2hlbWEubmFtZXNwYWNlfS4ke3Jhd0FjdGlvbi5uYW1lfWA7XG4gICAgICAgICAgICAgICAgYWN0aW9uc1tuYW1lXSA9IGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRBY3Rpb24ocmF3QWN0aW9uLmZ1bGx5UXVhbGlmaWVkTmFtZSkhO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgICAgICAgICAgfSwge30gYXMgRW50aXR5VHlwZVsnYWN0aW9ucyddKVxuICAgICk7XG5cbiAgICBjb252ZXJ0ZWRFbnRpdHlUeXBlLnJlc29sdmVQYXRoID0gKHJlbGF0aXZlUGF0aDogc3RyaW5nLCBpbmNsdWRlVmlzaXRlZE9iamVjdHM/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVRhcmdldChjb252ZXJ0ZXIsIHJhd0VudGl0eVR5cGUsIHJlbGF0aXZlUGF0aCk7XG4gICAgICAgIGlmIChpbmNsdWRlVmlzaXRlZE9iamVjdHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHRhcmdldDogcmVzb2x2ZWQudGFyZ2V0LCB2aXNpdGVkT2JqZWN0czogcmVzb2x2ZWQub2JqZWN0UGF0aCwgbWVzc2FnZXM6IHJlc29sdmVkLm1lc3NhZ2VzIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZWQudGFyZ2V0O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRFbnRpdHlUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgUHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1Byb3BlcnR5ICBVbmNvbnZlcnRlZCBQcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBQcm9wZXJ0eVxuICovXG5mdW5jdGlvbiBjb252ZXJ0UHJvcGVydHkoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1Byb3BlcnR5OiBSYXdQcm9wZXJ0eSk6IFByb3BlcnR5IHtcbiAgICBjb25zdCBjb252ZXJ0ZWRQcm9wZXJ0eSA9IHJhd1Byb3BlcnR5IGFzIFByb3BlcnR5O1xuXG4gICAgbGF6eShjb252ZXJ0ZWRQcm9wZXJ0eSwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3UHJvcGVydHkpKTtcblxuICAgIGxhenkoY29udmVydGVkUHJvcGVydHksICd0YXJnZXRUeXBlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlID0gcmF3UHJvcGVydHkudHlwZTtcbiAgICAgICAgY29uc3QgdHlwZU5hbWUgPSB0eXBlLnN0YXJ0c1dpdGgoJ0NvbGxlY3Rpb24nKSA/IHR5cGUuc3Vic3RyaW5nKDExLCB0eXBlLmxlbmd0aCAtIDEpIDogdHlwZTtcblxuICAgICAgICByZXR1cm4gY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHR5cGVOYW1lKSA/PyBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkVHlwZURlZmluaXRpb24odHlwZU5hbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZFByb3BlcnR5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgTmF2aWdhdGlvblByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSByYXdOYXZpZ2F0aW9uUHJvcGVydHkgIFVuY29udmVydGVkIE5hdmlnYXRpb25Qcm9wZXJ0eVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBOYXZpZ2F0aW9uUHJvcGVydHlcbiAqL1xuZnVuY3Rpb24gY29udmVydE5hdmlnYXRpb25Qcm9wZXJ0eShcbiAgICBjb252ZXJ0ZXI6IENvbnZlcnRlcixcbiAgICByYXdOYXZpZ2F0aW9uUHJvcGVydHk6IFJhd1YyTmF2aWdhdGlvblByb3BlcnR5IHwgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHlcbik6IE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG4gICAgY29uc3QgY29udmVydGVkTmF2aWdhdGlvblByb3BlcnR5ID0gcmF3TmF2aWdhdGlvblByb3BlcnR5IGFzIE5hdmlnYXRpb25Qcm9wZXJ0eTtcblxuICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5yZWZlcmVudGlhbENvbnN0cmFpbnQgPSBjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHkucmVmZXJlbnRpYWxDb25zdHJhaW50ID8/IFtdO1xuXG4gICAgaWYgKCFpc1Y0TmF2aWdhdGlvblByb3BlcnR5KHJhd05hdmlnYXRpb25Qcm9wZXJ0eSkpIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25FbmQgPSBjb252ZXJ0ZXIucmF3U2NoZW1hLmFzc29jaWF0aW9uc1xuICAgICAgICAgICAgLmZpbmQoKGFzc29jaWF0aW9uKSA9PiBhc3NvY2lhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS5yZWxhdGlvbnNoaXApXG4gICAgICAgICAgICA/LmFzc29jaWF0aW9uRW5kLmZpbmQoKGVuZCkgPT4gZW5kLnJvbGUgPT09IHJhd05hdmlnYXRpb25Qcm9wZXJ0eS50b1JvbGUpO1xuXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS5pc0NvbGxlY3Rpb24gPSBhc3NvY2lhdGlvbkVuZD8ubXVsdGlwbGljaXR5ID09PSAnKic7XG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eS50YXJnZXRUeXBlTmFtZSA9IGFzc29jaWF0aW9uRW5kPy50eXBlID8/ICcnO1xuICAgIH1cblxuICAgIGxhenkoXG4gICAgICAgIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICAgICAgJ3RhcmdldFR5cGUnLFxuICAgICAgICByZXNvbHZlRW50aXR5VHlwZShjb252ZXJ0ZXIsIChyYXdOYXZpZ2F0aW9uUHJvcGVydHkgYXMgTmF2aWdhdGlvblByb3BlcnR5KS50YXJnZXRUeXBlTmFtZSlcbiAgICApO1xuXG4gICAgbGF6eShjb252ZXJ0ZWROYXZpZ2F0aW9uUHJvcGVydHksICdhbm5vdGF0aW9ucycsIHJlc29sdmVBbm5vdGF0aW9ucyhjb252ZXJ0ZXIsIHJhd05hdmlnYXRpb25Qcm9wZXJ0eSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZE5hdmlnYXRpb25Qcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBY3Rpb25JbXBvcnQuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0FjdGlvbkltcG9ydCAgVW5jb252ZXJ0ZWQgQWN0aW9uSW1wb3J0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIEFjdGlvbkltcG9ydFxuICovXG5mdW5jdGlvbiBjb252ZXJ0QWN0aW9uSW1wb3J0KGNvbnZlcnRlcjogQ29udmVydGVyLCByYXdBY3Rpb25JbXBvcnQ6IFJhd0FjdGlvbkltcG9ydCk6IEFjdGlvbkltcG9ydCB7XG4gICAgY29uc3QgY29udmVydGVkQWN0aW9uSW1wb3J0ID0gcmF3QWN0aW9uSW1wb3J0IGFzIEFjdGlvbkltcG9ydDtcblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uSW1wb3J0LCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdBY3Rpb25JbXBvcnQpKTtcblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uSW1wb3J0LCAnYWN0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByYXdBY3Rpb25zID0gY29udmVydGVyLnJhd1NjaGVtYS5hY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgIChyYXdBY3Rpb24pID0+ICFyYXdBY3Rpb24uaXNCb3VuZCAmJiByYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lLnN0YXJ0c1dpdGgocmF3QWN0aW9uSW1wb3J0LmFjdGlvbk5hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gdGhpcyBhbHdheXMgcmVzb2x2ZXMgdG8gYSB1bmlxdWUgdW5ib3VuZCBhY3Rpb24sIGJ1dCByZXNvbHV0aW9uIG9mIHVuYm91bmQgZnVuY3Rpb25zIGNhbiBiZSBhbWJpZ3VvdXM6XG4gICAgICAgIC8vIHVuYm91bmQgZnVuY3Rpb24gRlFOcyBoYXZlIG92ZXJsb2FkcyBkZXBlbmRpbmcgb24gYWxsIG9mIHRoZWlyIHBhcmFtZXRlcnNcbiAgICAgICAgaWYgKHJhd0FjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29udmVydGVyLmxvZ0Vycm9yKGBBbWJpZ3VvdXMgcmVmZXJlbmNlIGluIGFjdGlvbiBpbXBvcnQ6ICR7cmF3QWN0aW9uSW1wb3J0LmZ1bGx5UXVhbGlmaWVkTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgYWN0aW9uIG9yIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBjb252ZXJ0ZXIuZ2V0Q29udmVydGVkQWN0aW9uKHJhd0FjdGlvbnNbMF0uZnVsbHlRdWFsaWZpZWROYW1lKSE7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uSW1wb3J0O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uICBVbmNvbnZlcnRlZCBBY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0FjdGlvbjogUmF3QWN0aW9uKTogQWN0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRBY3Rpb24gPSByYXdBY3Rpb24gYXMgQWN0aW9uO1xuXG4gICAgaWYgKGNvbnZlcnRlZEFjdGlvbi5zb3VyY2VUeXBlKSB7XG4gICAgICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAnc291cmNlRW50aXR5VHlwZScsIHJlc29sdmVFbnRpdHlUeXBlKGNvbnZlcnRlciwgcmF3QWN0aW9uLnNvdXJjZVR5cGUpKTtcbiAgICB9XG5cbiAgICBpZiAoY29udmVydGVkQWN0aW9uLnJldHVyblR5cGUpIHtcbiAgICAgICAgbGF6eShjb252ZXJ0ZWRBY3Rpb24sICdyZXR1cm5FbnRpdHlUeXBlJywgcmVzb2x2ZUVudGl0eVR5cGUoY29udmVydGVyLCByYXdBY3Rpb24ucmV0dXJuVHlwZSkpO1xuICAgIH1cblxuICAgIGxhenkoY29udmVydGVkQWN0aW9uLCAncGFyYW1ldGVycycsIGNvbnZlcnRlci5jb252ZXJ0KHJhd0FjdGlvbi5wYXJhbWV0ZXJzLCBjb252ZXJ0QWN0aW9uUGFyYW1ldGVyKSk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvbiwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgICAgQW5ub3RhdGlvbiByZXNvbHV0aW9uIHJ1bGUgZm9yIGFjdGlvbnM6XG5cbiAgICAgICAgICAgICgxKSBhbm5vdGF0aW9uIHRhcmdldDogdGhlIHNwZWNpZmljIHVuYm91bmQgb3IgYm91bmQgb3ZlcmxvYWQsIGUuZy5cbiAgICAgICAgICAgICAgICAgICAgLSBmb3IgYWN0aW9uczogICBcIngueS56LnVuYm91bmRBY3Rpb24oKVwiIC8gXCJ4Lnkuei5ib3VuZEFjdGlvbih4Lnkuei5FbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgICAgLSBmb3IgZnVuY3Rpb25zOiBcIngueS56LnVuYm91bmRGdW5jdGlvbihFZG0uU3RyaW5nKVwiIC8gXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb24oeC55LnouRW50aXR5LEVkbS5TdHJpbmcpXCJcbiAgICAgICAgICAgICgyKSBhbm5vdGF0aW9uIHRhcmdldDogdW5zcGVjaWZpZWQgb3ZlcmxvYWQsIGUuZy5cbiAgICAgICAgICAgICAgICAtIGZvciBhY3Rpb25zOiAgIFwieC55LnoudW5ib3VuZEFjdGlvblwiIC8gXCJ4Lnkuei5ib3VuZEFjdGlvblwiXG4gICAgICAgICAgICAgICAgLSBmb3IgZnVuY3Rpb25zOiBcIngueS56LnVuYm91bmRGdW5jdGlvblwiIC8gXCJ4Lnkuei51bmJvdW5kRnVuY3Rpb25cIlxuXG4gICAgICAgICAgICBXaGVuIHJlc29sdmluZyAoMSkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyICgyKS4gVGhhdCBpcywgYW5ub3RhdGlvbnMgb24gdGhlIHNwZWNpZmljIG92ZXJsb2FkIG92ZXJ3cml0ZVxuICAgICAgICAgICAgYW5ub3RhdGlvbnMgb24gdGhlIHVuc3BlY2lmaWMgb3ZlcmxvYWQsIG9uIHRlcm0vcXVhbGlmaWVyIGxldmVsLlxuICAgICAgICAqL1xuXG4gICAgICAgIGNvbnN0IHVuc3BlY2lmaWNPdmVybG9hZFRhcmdldCA9IHN1YnN0cmluZ0JlZm9yZUZpcnN0KHJhd0FjdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsICcoJyk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSByYXdBY3Rpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUFubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQpO1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnModW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVuc3BlY2lmaWNBbm5vdGF0aW9uIG9mIHVuc3BlY2lmaWNBbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFlZmZlY3RpdmVBbm5vdGF0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24udGVybSA9PT0gdW5zcGVjaWZpY0Fubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUFubm90YXRpb25zLnB1c2godW5zcGVjaWZpY0Fubm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgcmF3QWN0aW9uLCBlZmZlY3RpdmVBbm5vdGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIEFjdGlvblBhcmFtZXRlci5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyICAgQ29udmVydGVyXG4gKiBAcGFyYW0gcmF3QWN0aW9uUGFyYW1ldGVyICBVbmNvbnZlcnRlZCBBY3Rpb25QYXJhbWV0ZXJcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgQWN0aW9uUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBY3Rpb25QYXJhbWV0ZXIoXG4gICAgY29udmVydGVyOiBDb252ZXJ0ZXIsXG4gICAgcmF3QWN0aW9uUGFyYW1ldGVyOiBSYXdBY3Rpb25bJ3BhcmFtZXRlcnMnXVtudW1iZXJdXG4pOiBBY3Rpb25QYXJhbWV0ZXIge1xuICAgIGNvbnN0IGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciA9IHJhd0FjdGlvblBhcmFtZXRlciBhcyBBY3Rpb25QYXJhbWV0ZXI7XG5cbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRBY3Rpb25QYXJhbWV0ZXIsXG4gICAgICAgICd0eXBlUmVmZXJlbmNlJyxcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIGNvbnZlcnRlci5nZXRDb252ZXJ0ZWRFbnRpdHlUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZENvbXBsZXhUeXBlKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKSA/P1xuICAgICAgICAgICAgY29udmVydGVyLmdldENvbnZlcnRlZFR5cGVEZWZpbml0aW9uKHJhd0FjdGlvblBhcmFtZXRlci50eXBlKVxuICAgICk7XG5cbiAgICBsYXp5KGNvbnZlcnRlZEFjdGlvblBhcmFtZXRlciwgJ2Fubm90YXRpb25zJywgKCkgPT4ge1xuICAgICAgICAvLyBhbm5vdGF0aW9ucyBvbiBhY3Rpb24gcGFyYW1ldGVycyBhcmUgcmVzb2x2ZWQgZm9sbG93aW5nIHRoZSBydWxlcyBmb3IgYWN0aW9uc1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPVxuICAgICAgICAgICAgcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5zdWJzdHJpbmcoMCwgcmF3QWN0aW9uUGFyYW1ldGVyLmZ1bGx5UXVhbGlmaWVkTmFtZS5pbmRleE9mKCcoJykpICtcbiAgICAgICAgICAgIHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuc3Vic3RyaW5nKHJhd0FjdGlvblBhcmFtZXRlci5mdWxseVF1YWxpZmllZE5hbWUuaW5kZXhPZignKScpICsgMSk7XG4gICAgICAgIGNvbnN0IHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQgPSByYXdBY3Rpb25QYXJhbWV0ZXIuZnVsbHlRdWFsaWZpZWROYW1lO1xuXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZUFubm90YXRpb25zID0gY29udmVydGVyLmdldEFubm90YXRpb25zKHNwZWNpZmljT3ZlcmxvYWRUYXJnZXQpO1xuICAgICAgICBjb25zdCB1bnNwZWNpZmljQW5ub3RhdGlvbnMgPSBjb252ZXJ0ZXIuZ2V0QW5ub3RhdGlvbnModW5zcGVjaWZpY092ZXJsb2FkVGFyZ2V0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IHVuc3BlY2lmaWNBbm5vdGF0aW9uIG9mIHVuc3BlY2lmaWNBbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFlZmZlY3RpdmVBbm5vdGF0aW9ucy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb24udGVybSA9PT0gdW5zcGVjaWZpY0Fubm90YXRpb24udGVybSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IHVuc3BlY2lmaWNBbm5vdGF0aW9uLnF1YWxpZmllclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVmZmVjdGl2ZUFubm90YXRpb25zLnB1c2godW5zcGVjaWZpY0Fubm90YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFubm90YXRpb25zT2JqZWN0KGNvbnZlcnRlciwgcmF3QWN0aW9uUGFyYW1ldGVyLCBlZmZlY3RpdmVBbm5vdGF0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29udmVydGVkQWN0aW9uUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgQ29tcGxleFR5cGUuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd0NvbXBsZXhUeXBlICBVbmNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBDb21wbGV4VHlwZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0Q29tcGxleFR5cGUoY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd0NvbXBsZXhUeXBlOiBSYXdDb21wbGV4VHlwZSk6IENvbXBsZXhUeXBlIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRDb21wbGV4VHlwZSA9IHJhd0NvbXBsZXhUeXBlIGFzIENvbXBsZXhUeXBlO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRDb21wbGV4VHlwZSwgJ3Byb3BlcnRpZXMnLCBjb252ZXJ0ZXIuY29udmVydChyYXdDb21wbGV4VHlwZS5wcm9wZXJ0aWVzLCBjb252ZXJ0UHJvcGVydHkpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRDb21wbGV4VHlwZSxcbiAgICAgICAgJ25hdmlnYXRpb25Qcm9wZXJ0aWVzJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQocmF3Q29tcGxleFR5cGUubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgYW55W10sIGNvbnZlcnROYXZpZ2F0aW9uUHJvcGVydHkpXG4gICAgKTtcbiAgICBsYXp5KGNvbnZlcnRlZENvbXBsZXhUeXBlLCAnYW5ub3RhdGlvbnMnLCByZXNvbHZlQW5ub3RhdGlvbnMoY29udmVydGVyLCByYXdDb21wbGV4VHlwZSkpO1xuXG4gICAgcmV0dXJuIGNvbnZlcnRlZENvbXBsZXhUeXBlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVHlwZURlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlciAgIENvbnZlcnRlclxuICogQHBhcmFtIHJhd1R5cGVEZWZpbml0aW9uICBVbmNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGNvbnZlcnRlZCBUeXBlRGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBjb252ZXJ0VHlwZURlZmluaXRpb24oY29udmVydGVyOiBDb252ZXJ0ZXIsIHJhd1R5cGVEZWZpbml0aW9uOiBSYXdUeXBlRGVmaW5pdGlvbik6IFR5cGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiA9IHJhd1R5cGVEZWZpbml0aW9uIGFzIFR5cGVEZWZpbml0aW9uO1xuXG4gICAgbGF6eShjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbiwgJ2Fubm90YXRpb25zJywgcmVzb2x2ZUFubm90YXRpb25zKGNvbnZlcnRlciwgcmF3VHlwZURlZmluaXRpb24pKTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRUeXBlRGVmaW5pdGlvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgUmF3TWV0YWRhdGEgaW50byBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24gdG8gYmUgdXNlZCB0byBlYXNpbHkgbmF2aWdhdGUgYSBtZXRhZGF0YSBvYmplY3QgYW5kIGl0cyBhbm5vdGF0aW9uLlxuICpcbiAqIEBwYXJhbSByYXdNZXRhZGF0YVxuICogQHJldHVybnMgdGhlIGNvbnZlcnRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0KHJhd01ldGFkYXRhOiBSYXdNZXRhZGF0YSk6IENvbnZlcnRlZE1ldGFkYXRhIHtcbiAgICAvLyBDb252ZXJ0ZXIgT3V0cHV0XG4gICAgY29uc3QgY29udmVydGVkT3V0cHV0OiBDb252ZXJ0ZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgdmVyc2lvbjogcmF3TWV0YWRhdGEudmVyc2lvbixcbiAgICAgICAgbmFtZXNwYWNlOiByYXdNZXRhZGF0YS5zY2hlbWEubmFtZXNwYWNlLFxuICAgICAgICBhbm5vdGF0aW9uczogcmF3TWV0YWRhdGEuc2NoZW1hLmFubm90YXRpb25zLFxuICAgICAgICByZWZlcmVuY2VzOiBWb2NhYnVsYXJ5UmVmZXJlbmNlcyxcbiAgICAgICAgZGlhZ25vc3RpY3M6IFtdXG4gICAgfSBhcyBhbnk7XG5cbiAgICAvLyBmYWxsIGJhY2sgb24gdGhlIGRlZmF1bHQgcmVmZXJlbmNlcyBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IHNwZWNpZnkgYW55XG4gICAgaWYgKHJhd01ldGFkYXRhLnJlZmVyZW5jZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJhd01ldGFkYXRhLnJlZmVyZW5jZXMgPSBWb2NhYnVsYXJ5UmVmZXJlbmNlcztcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0ZXJcbiAgICBjb25zdCBjb252ZXJ0ZXIgPSBuZXcgQ29udmVydGVyKHJhd01ldGFkYXRhLCBjb252ZXJ0ZWRPdXRwdXQpO1xuXG4gICAgbGF6eShcbiAgICAgICAgY29udmVydGVkT3V0cHV0LFxuICAgICAgICAnZW50aXR5Q29udGFpbmVyJyxcbiAgICAgICAgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlDb250YWluZXIsIGNvbnZlcnRFbnRpdHlDb250YWluZXIpXG4gICAgKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2VudGl0eVNldHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmVudGl0eVNldHMsIGNvbnZlcnRFbnRpdHlTZXQpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ3NpbmdsZXRvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnNpbmdsZXRvbnMsIGNvbnZlcnRTaW5nbGV0b24pKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2VudGl0eVR5cGVzJywgY29udmVydGVyLmNvbnZlcnQoY29udmVydGVyLnJhd1NjaGVtYS5lbnRpdHlUeXBlcywgY29udmVydEVudGl0eVR5cGUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2FjdGlvbnMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbnMsIGNvbnZlcnRBY3Rpb24pKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2NvbXBsZXhUeXBlcycsIGNvbnZlcnRlci5jb252ZXJ0KGNvbnZlcnRlci5yYXdTY2hlbWEuY29tcGxleFR5cGVzLCBjb252ZXJ0Q29tcGxleFR5cGUpKTtcbiAgICBsYXp5KGNvbnZlcnRlZE91dHB1dCwgJ2FjdGlvbkltcG9ydHMnLCBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLmFjdGlvbkltcG9ydHMsIGNvbnZlcnRBY3Rpb25JbXBvcnQpKTtcbiAgICBsYXp5KFxuICAgICAgICBjb252ZXJ0ZWRPdXRwdXQsXG4gICAgICAgICd0eXBlRGVmaW5pdGlvbnMnLFxuICAgICAgICBjb252ZXJ0ZXIuY29udmVydChjb252ZXJ0ZXIucmF3U2NoZW1hLnR5cGVEZWZpbml0aW9ucywgY29udmVydFR5cGVEZWZpbml0aW9uKVxuICAgICk7XG5cbiAgICBjb252ZXJ0ZWRPdXRwdXQucmVzb2x2ZVBhdGggPSBmdW5jdGlvbiByZXNvbHZlUGF0aDxUPihwYXRoOiBzdHJpbmcpOiBSZXNvbHV0aW9uVGFyZ2V0PFQ+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVzb2x1dGlvbiA9IHJlc29sdmVUYXJnZXQ8VD4oY29udmVydGVyLCB1bmRlZmluZWQsIHBhdGgpO1xuICAgICAgICBpZiAodGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQpIHtcbiAgICAgICAgICAgIGFwcGVuZE9iamVjdFBhdGgodGFyZ2V0UmVzb2x1dGlvbi5vYmplY3RQYXRoLCB0YXJnZXRSZXNvbHV0aW9uLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFJlc29sdXRpb247XG4gICAgfTtcblxuICAgIHJldHVybiBjb252ZXJ0ZWRPdXRwdXQ7XG59XG4iLCJleHBvcnQgKiBmcm9tICcuL2NvbnZlcnRlcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vd3JpdGViYWNrJztcbiIsImltcG9ydCB0eXBlIHtcbiAgICBBbm5vdGF0aW9uLFxuICAgIEFubm90YXRpb25MaXN0LFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIENvbXBsZXhUeXBlLFxuICAgIEluZGV4LFxuICAgIFJlZmVyZW5jZSxcbiAgICBUeXBlRGVmaW5pdGlvblxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5cbmV4cG9ydCB7IEVudW1Jc0ZsYWcgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRW51bUlzRmxhZyc7XG5leHBvcnQgeyBUZXJtVG9UeXBlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9UZXJtVG9UeXBlcyc7XG5leHBvcnQgeyBWb2NhYnVsYXJ5UmVmZXJlbmNlcyBhcyBkZWZhdWx0UmVmZXJlbmNlcyB9IGZyb20gJ0BzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Wb2NhYnVsYXJ5UmVmZXJlbmNlcyc7XG5cbmV4cG9ydCB0eXBlIFJlZmVyZW5jZXNXaXRoTWFwID0gUmVmZXJlbmNlW10gJiB7XG4gICAgcmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbiAgICByZXZlcnNlUmVmZXJlbmNlTWFwPzogUmVjb3JkPHN0cmluZywgUmVmZXJlbmNlPjtcbn07XG5cbmZ1bmN0aW9uIHNwbGl0QXQoc3RyaW5nOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICByZXR1cm4gaW5kZXggPCAwID8gW3N0cmluZywgJyddIDogW3N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpLCBzdHJpbmcuc3Vic3RyaW5nKGluZGV4ICsgMSldO1xufVxuXG5mdW5jdGlvbiBzdWJzdHJpbmdBdChzdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBpbmRleCA8IDAgPyBzdHJpbmcgOiBzdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nIHRvIHNwbGl0XG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBjb25zaXN0aW5nIG9mIHR3byBlbGVtZW50czogdGhlIHBhcnQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IgYW5kIHRoZSBwYXJ0IGFmdGVyIGl0LiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gdGhlIHNlcGFyYXRvciwgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdEF0Rmlyc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIHNwbGl0QXQoc3RyaW5nLCBzdHJpbmcuaW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmcgdG8gc3BsaXRcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIEFuIGFycmF5IGNvbnNpc3Rpbmcgb2YgdHdvIGVsZW1lbnRzOiB0aGUgcGFydCBiZWZvcmUgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VwYXJhdG9yIGFuZCB0aGUgcGFydCBhZnRlciBpdC4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIHRoZSBzZXBhcmF0b3IsIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRBdExhc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgcmV0dXJuIHNwbGl0QXQoc3RyaW5nLCBzdHJpbmcubGFzdEluZGV4T2Yoc2VwYXJhdG9yKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHNlcGFyYXRvci5cbiAqXG4gKiBAcGFyYW0gc3RyaW5nICAgIFRoZSBzdHJpbmdcbiAqIEBwYXJhbSBzZXBhcmF0b3IgU2VwYXJhdG9yLCBlLmcuIGEgc2luZ2xlIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IsIG9yIHRoZSBpbnB1dCBzdHJpbmcgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlRmlyc3Qoc3RyaW5nOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3Vic3RyaW5nQXQoc3RyaW5nLCBzdHJpbmcuaW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdWJzdHJpbmcgYmVmb3JlIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHN0cmluZyAgICBUaGUgc3RyaW5nXG4gKiBAcGFyYW0gc2VwYXJhdG9yIFNlcGFyYXRvciwgZS5nLiBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc3Vic3RyaW5nIGJlZm9yZSB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIHRoZSBzZXBhcmF0b3IsIG9yIHRoZSBpbnB1dCBzdHJpbmcgaWYgaXQgZG9lcyBub3QgY29udGFpbiB0aGUgc2VwYXJhdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyaW5nQmVmb3JlTGFzdChzdHJpbmc6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdWJzdHJpbmdBdChzdHJpbmcsIHN0cmluZy5sYXN0SW5kZXhPZihzZXBhcmF0b3IpKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gdW5hbGlhc2VkIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbm5vdGF0aW9uIHRvIHRoZSBhbGlhc2VkIHZlcnNpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgY3VycmVudFJlZmVyZW5jZXMgZm9yIHRoZSBwcm9qZWN0XG4gKiBAcGFyYW0gdW5hbGlhc2VkVmFsdWUgdGhlIHVuYWxpYXNlZCB2YWx1ZVxuICogQHJldHVybnMgdGhlIGFsaWFzZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc2FtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxpYXMocmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsIHVuYWxpYXNlZFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwKSB7XG4gICAgICAgIHJlZmVyZW5jZXMucmV2ZXJzZVJlZmVyZW5jZU1hcCA9IHJlZmVyZW5jZXMucmVkdWNlKChtYXA6IFJlY29yZDxzdHJpbmcsIFJlZmVyZW5jZT4sIHJlZikgPT4ge1xuICAgICAgICAgICAgbWFwW3JlZi5uYW1lc3BhY2VdID0gcmVmO1xuICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBpZiAoIXVuYWxpYXNlZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB1bmFsaWFzZWRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgW25hbWVzcGFjZSwgdmFsdWVdID0gc3BsaXRBdExhc3QodW5hbGlhc2VkVmFsdWUsICcuJyk7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gcmVmZXJlbmNlcy5yZXZlcnNlUmVmZXJlbmNlTWFwW25hbWVzcGFjZV07XG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gYCR7cmVmZXJlbmNlLmFsaWFzfS4ke3ZhbHVlfWA7XG4gICAgfSBlbHNlIGlmICh1bmFsaWFzZWRWYWx1ZS5pbmNsdWRlcygnQCcpKSB7XG4gICAgICAgIC8vIFRyeSB0byBzZWUgaWYgaXQncyBhbiBhbm5vdGF0aW9uIFBhdGggbGlrZSB0b19TYWxlc09yZGVyL0BVSS5MaW5lSXRlbVxuICAgICAgICBjb25zdCBbcHJlQWxpYXMsIHBvc3RBbGlhc10gPSBzcGxpdEF0Rmlyc3QodW5hbGlhc2VkVmFsdWUsICdAJyk7XG4gICAgICAgIHJldHVybiBgJHtwcmVBbGlhc31AJHthbGlhcyhyZWZlcmVuY2VzLCBwb3N0QWxpYXMpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuYWxpYXNlZFZhbHVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gYWxpYXNlZCBzdHJpbmcgdG8gaXRzIHVuYWxpYXNlZCB2ZXJzaW9uIGdpdmVuIGEgc2V0IG9mIHJlZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgVGhlIHJlZmVyZW5jZXMgdG8gdXNlIGZvciB1bmFsaWFzaW5nLlxuICogQHBhcmFtIGFsaWFzZWRWYWx1ZSBUaGUgYWxpYXNlZCB2YWx1ZVxuICogQHBhcmFtIG5hbWVzcGFjZSBUaGUgZmFsbGJhY2sgbmFtZXNwYWNlXG4gKiBAcmV0dXJucyBUaGUgZXF1YWwgdW5hbGlhc2VkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuYWxpYXMoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlc1dpdGhNYXAsXG4gICAgYWxpYXNlZFZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgbmFtZXNwYWNlPzogc3RyaW5nXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IF91bmFsaWFzID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzLnJlZmVyZW5jZU1hcCkge1xuICAgICAgICAgICAgcmVmZXJlbmNlcy5yZWZlcmVuY2VNYXAgPSBPYmplY3QuZnJvbUVudHJpZXMocmVmZXJlbmNlcy5tYXAoKHJlZikgPT4gW3JlZi5hbGlhcywgcmVmXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWxpYXNlcyBhcmUgb2YgdHlwZSAnU2ltcGxlSWRlbnRpZmllcicgYW5kIG11c3Qgbm90IGNvbnRhaW4gZG90c1xuICAgICAgICBjb25zdCBbbWF5YmVBbGlhcywgcmVzdF0gPSBzcGxpdEF0Rmlyc3QodmFsdWUsICcuJyk7XG5cbiAgICAgICAgaWYgKCFyZXN0IHx8IHJlc3QuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICAgICAgLy8gZWl0aGVyIHRoZXJlIGlzIG5vIGRvdCBpbiB0aGUgdmFsdWUgb3IgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSAtLT4gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNBbm5vdGF0aW9uID0gbWF5YmVBbGlhcy5zdGFydHNXaXRoKCdAJyk7XG4gICAgICAgIGNvbnN0IHZhbHVlVG9VbmFsaWFzID0gaXNBbm5vdGF0aW9uID8gbWF5YmVBbGlhcy5zdWJzdHJpbmcoMSkgOiBtYXliZUFsaWFzO1xuICAgICAgICBjb25zdCBrbm93blJlZmVyZW5jZSA9IHJlZmVyZW5jZXMucmVmZXJlbmNlTWFwW3ZhbHVlVG9VbmFsaWFzXTtcbiAgICAgICAgaWYgKGtub3duUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBbm5vdGF0aW9uID8gYEAke2tub3duUmVmZXJlbmNlLm5hbWVzcGFjZX0uJHtyZXN0fWAgOiBgJHtrbm93blJlZmVyZW5jZS5uYW1lc3BhY2V9LiR7cmVzdH1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGFsaWFzIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB1c2luZyB0aGUgcmVmZXJlbmNlcy4gQXNzdW1lIGl0IGlzIHRoZSBcImdsb2JhbFwiIGFsaWFzICg9IG5hbWVzcGFjZSlcbiAgICAgICAgcmV0dXJuIG5hbWVzcGFjZSAmJiAhaXNBbm5vdGF0aW9uID8gYCR7bmFtZXNwYWNlfS4ke3Jlc3R9YCA6IHZhbHVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gYWxpYXNlZFZhbHVlXG4gICAgICAgID8uc3BsaXQoJy8nKVxuICAgICAgICAucmVkdWNlKChzZWdtZW50cywgc2VnbWVudCkgPT4ge1xuICAgICAgICAgICAgLy8gdGhlIHNlZ21lbnQgY291bGQgYmUgYW4gYWN0aW9uLCBsaWtlIFwiZG9Tb21ldGhpbmcoZm9vLmJhcilcIlxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0LCByZXN0XSA9IHNwbGl0QXRGaXJzdChzZWdtZW50LCAnKCcpO1xuICAgICAgICAgICAgY29uc3Qgc3ViU2VnbWVudCA9IFtfdW5hbGlhcyhmaXJzdCldO1xuXG4gICAgICAgICAgICBpZiAocmVzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHJlc3Quc2xpY2UoMCwgLTEpOyAvLyByZW1vdmUgdHJhaWxpbmcgXCIpXCJcbiAgICAgICAgICAgICAgICBzdWJTZWdtZW50LnB1c2goYCgke191bmFsaWFzKHBhcmFtZXRlcil9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VnbWVudHMucHVzaChzdWJTZWdtZW50LmpvaW4oJycpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRzO1xuICAgICAgICB9LCBbXSBhcyBzdHJpbmdbXSlcbiAgICAgICAgPy5qb2luKCcvJyk7XG59XG5cbi8qKlxuICogRGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGEgQ29tcGxleFR5cGUgYW5kIGEgVHlwZURlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGNvbXBsZXhUeXBlRGVmaW5pdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYSBjb21wbGV4IHR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGxleFR5cGVEZWZpbml0aW9uKFxuICAgIGNvbXBsZXhUeXBlRGVmaW5pdGlvbj86IENvbXBsZXhUeXBlIHwgVHlwZURlZmluaXRpb25cbik6IGNvbXBsZXhUeXBlRGVmaW5pdGlvbiBpcyBDb21wbGV4VHlwZSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgISFjb21wbGV4VHlwZURlZmluaXRpb24gJiYgY29tcGxleFR5cGVEZWZpbml0aW9uLl90eXBlID09PSAnQ29tcGxleFR5cGUnICYmICEhY29tcGxleFR5cGVEZWZpbml0aW9uLnByb3BlcnRpZXNcbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGVjaW1hbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNEZWNpbWFsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlT2YoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBsYXp5IHByb3BlcnR5LlxuICpcbiAqIFRoZSBwcm9wZXJ0eSBpcyBpbml0aWFsaXplZCBieSBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uIG9uIHRoZSBmaXJzdCByZWFkIGFjY2Vzcywgb3IgYnkgZGlyZWN0bHkgYXNzaWduaW5nIGEgdmFsdWUuXG4gKlxuICogQHBhcmFtIG9iamVjdCAgICBUaGUgaG9zdCBvYmplY3RcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgVGhlIGxhenkgcHJvcGVydHkgdG8gYWRkXG4gKiBAcGFyYW0gaW5pdCAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGluaXRpYWxpemVzIHRoZSBwcm9wZXJ0eSdzIHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXp5PFR5cGUsIEtleSBleHRlbmRzIGtleW9mIFR5cGU+KG9iamVjdDogVHlwZSwgcHJvcGVydHk6IEtleSwgaW5pdDogKCkgPT4gVHlwZVtLZXldKSB7XG4gICAgY29uc3QgaW5pdGlhbCA9IFN5bWJvbCgnaW5pdGlhbCcpO1xuICAgIGxldCBfdmFsdWU6IFR5cGVbS2V5XSB8IHR5cGVvZiBpbml0aWFsID0gaW5pdGlhbDtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5LCB7XG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgaWYgKF92YWx1ZSA9PT0gaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IGluaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlOiBUeXBlW0tleV0pIHtcbiAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHRvIGZpbmQgYW4gYXJyYXkgZWxlbWVudCBieSBwcm9wZXJ0eSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgICAgIFRoZSBhcnJheVxuICogQHBhcmFtIHByb3BlcnR5ICBFbGVtZW50cyBpbiB0aGUgYXJyYXkgYXJlIHNlYXJjaGVkIGJ5IHRoaXMgcHJvcGVydHlcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaW5kIGFuIGVsZW1lbnQgb2YgdGhlIGFycmF5IGJ5IHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5kZXhlZEZpbmQ8VD4oYXJyYXk6IEFycmF5PFQ+LCBwcm9wZXJ0eToga2V5b2YgVCkge1xuICAgIGNvbnN0IGluZGV4OiBNYXA8VFtrZXlvZiBUXSwgVCB8IHVuZGVmaW5lZD4gPSBuZXcgTWFwKCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZmluZCh2YWx1ZTogVFtrZXlvZiBUXSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaW5kZXguZ2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoZWxlbWVudD8uW3Byb3BlcnR5XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5LmZpbmQoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudD8uaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudFtwcm9wZXJ0eV07XG4gICAgICAgICAgICBpbmRleC5zZXQocHJvcGVydHlWYWx1ZSwgZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gcHJvcGVydHlWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5cbi8qKlxuICogQWRkcyBhICdnZXQgYnkgdmFsdWUnIGZ1bmN0aW9uIHRvIGFuIGFycmF5LlxuICpcbiAqIElmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYWRkSW5kZXgobXlBcnJheSwgJ25hbWUnKSwgYSBuZXcgZnVuY3Rpb24gJ2J5X25hbWUodmFsdWUpJyB3aWxsIGJlIGFkZGVkIHRoYXQgYWxsb3dzIHRvXG4gKiBmaW5kIGEgbWVtYmVyIG9mIHRoZSBhcnJheSBieSB0aGUgdmFsdWUgb2YgaXRzICduYW1lJyBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0gYXJyYXkgICAgICBUaGUgYXJyYXlcbiAqIEBwYXJhbSBwcm9wZXJ0eSAgIFRoZSBwcm9wZXJ0eSB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgJ2J5X3twcm9wZXJ0eX0oKScgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFRoZSBhcnJheSB3aXRoIHRoZSBhZGRlZCBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkR2V0QnlWYWx1ZTxULCBQIGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+PihhcnJheTogQXJyYXk8VD4sIHByb3BlcnR5OiBQKSB7XG4gICAgY29uc3QgaW5kZXhOYW1lOiBrZXlvZiBJbmRleDxULCBQPiA9IGBieV8ke3Byb3BlcnR5fWA7XG5cbiAgICBpZiAoIWFycmF5Lmhhc093blByb3BlcnR5KGluZGV4TmFtZSkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCBpbmRleE5hbWUsIHsgd3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogY3JlYXRlSW5kZXhlZEZpbmQoYXJyYXksIHByb3BlcnR5KSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2luZGV4TmFtZX0nIGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHJldHVybiBhcnJheSBhcyBBcnJheVdpdGhJbmRleDxULCBQPjtcbn1cblxuLyoqXG4gKiBNZXJnZSBhbm5vdGF0aW9ucyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzIHRvZ2V0aGVyIGJ5IG92ZXJ3cml0aW5nIGF0IHRoZSB0ZXJtIGxldmVsLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzICAgICAgICBSZWZlcmVuY2VzLCB1c2VkIHRvIHJlc29sdmUgYWxpYXNlZCBhbm5vdGF0aW9uIHRhcmdldHMgYW5kIGFsaWFzZWQgYW5ub3RhdGlvbiB0ZXJtcy5cbiAqIEBwYXJhbSBhbm5vdGF0aW9uU291cmNlcyBBbm5vdGF0aW9uIHNvdXJjZXNcbiAqIEByZXR1cm5zIHRoZSByZXN1bHRpbmcgbWVyZ2VkIGFubm90YXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFubm90YXRpb25zKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIC4uLmFubm90YXRpb25Tb3VyY2VzOiB7IG5hbWU6IHN0cmluZzsgYW5ub3RhdGlvbkxpc3Q6IEFubm90YXRpb25MaXN0W10gfVtdXG4pOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uW10+IHtcbiAgICByZXR1cm4gYW5ub3RhdGlvblNvdXJjZXMucmVkdWNlUmlnaHQoKHJlc3VsdCwgeyBuYW1lLCBhbm5vdGF0aW9uTGlzdCB9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgeyB0YXJnZXQsIGFubm90YXRpb25zIH0gb2YgYW5ub3RhdGlvbkxpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRpb25UYXJnZXQgPSB1bmFsaWFzKHJlZmVyZW5jZXMsIHRhcmdldCkgPz8gdGFyZ2V0O1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRbYW5ub3RhdGlvblRhcmdldF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbYW5ub3RhdGlvblRhcmdldF0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGlvbnNPblRhcmdldCA9IGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgLm1hcCgocmF3QW5ub3RhdGlvbik6IEFubm90YXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICByYXdBbm5vdGF0aW9uLnRlcm0gPSB1bmFsaWFzKHJlZmVyZW5jZXMsIHJhd0Fubm90YXRpb24udGVybSkgPz8gcmF3QW5ub3RhdGlvbi50ZXJtO1xuXG4gICAgICAgICAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuZnVsbHlRdWFsaWZpZWROYW1lID0gcmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7YW5ub3RhdGlvblRhcmdldH1AJHtyYXdBbm5vdGF0aW9uLnRlcm19IyR7cmF3QW5ub3RhdGlvbi5xdWFsaWZpZXJ9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgJHthbm5vdGF0aW9uVGFyZ2V0fUAke3Jhd0Fubm90YXRpb24udGVybX1gO1xuXG4gICAgICAgICAgICAgICAgICAgIChyYXdBbm5vdGF0aW9uIGFzIGFueSkuX19zb3VyY2UgPSBuYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByYXdBbm5vdGF0aW9uIGFzIEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoYW5ub3RhdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICFyZXN1bHRbYW5ub3RhdGlvblRhcmdldF0uc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhpc3RpbmdBbm5vdGF0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0Fubm90YXRpb24udGVybSA9PT0gYW5ub3RhdGlvbi50ZXJtICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQW5ub3RhdGlvbi5xdWFsaWZpZXIgPT09IGFubm90YXRpb24ucXVhbGlmaWVyXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmVzdWx0W2Fubm90YXRpb25UYXJnZXRdLnB1c2goLi4uYW5ub3RhdGlvbnNPblRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIEFubm90YXRpb25bXT4pO1xufVxuIiwiaW1wb3J0IHR5cGUge1xuICAgIEFubm90YXRpb25QYXRoRXhwcmVzc2lvbixcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFubm90YXRpb25UZXJtLFxuICAgIEV4cHJlc3Npb24sXG4gICAgTmF2aWdhdGlvblByb3BlcnR5UGF0aEV4cHJlc3Npb24sXG4gICAgUGF0aEV4cHJlc3Npb24sXG4gICAgUHJvcGVydHlQYXRoRXhwcmVzc2lvbixcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcyc7XG5pbXBvcnQgeyB1bmFsaWFzIH0gZnJvbSAnLi91dGlscyc7XG5cbi8qKlxuICogUmV2ZXJ0IGFuIG9iamVjdCB0byBpdHMgcmF3IHR5cGUgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCByZWZlcmVuY2VcbiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmV2ZXJ0XG4gKiBAcmV0dXJucyB0aGUgcmF3IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHJldmVydE9iamVjdFRvUmF3VHlwZShyZWZlcmVuY2VzOiBSZWZlcmVuY2VbXSwgdmFsdWU6IGFueSkge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdDb2xsZWN0aW9uJyxcbiAgICAgICAgICAgIENvbGxlY3Rpb246IHZhbHVlLm1hcCgoYW5ubykgPT4gcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ubykpIGFzIGFueVtdXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0RlY2ltYWw/LigpKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgIERlY2ltYWw6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNTdHJpbmc/LigpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlTWF0Y2hlcyA9IHZhbHVlLnZhbHVlT2YoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdFbnVtTWVtYmVyJyxcbiAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzSW50Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgIEludDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pc0Zsb2F0Py4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICAgICAgRmxvYXQ6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUuaXNEYXRlPy4oKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnRGF0ZScsXG4gICAgICAgICAgICBEYXRlOiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbj8uKCkpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgQm9vbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUGF0aCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxuICAgICAgICAgICAgUGF0aDogdmFsdWUucGF0aFxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAodmFsdWUudHlwZSA9PT0gJ0Fubm90YXRpb25QYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnQW5ub3RhdGlvblBhdGgnLFxuICAgICAgICAgICAgQW5ub3RhdGlvblBhdGg6IHZhbHVlLnZhbHVlXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnQXBwbHknKSB7XG4gICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdBcHBseScsXG4gICAgICAgICAgICAkQXBwbHk6IHZhbHVlLiRBcHBseSxcbiAgICAgICAgICAgICRGdW5jdGlvbjogdmFsdWUuJEZ1bmN0aW9uXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnTnVsbCcpIHtcbiAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHlwZTogJ051bGwnXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgIFByb3BlcnR5UGF0aDogdmFsdWUudmFsdWVcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnR5cGUgPT09ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJykge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnTmF2aWdhdGlvblByb3BlcnR5UGF0aCcsXG4gICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiB2YWx1ZS52YWx1ZVxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnJFR5cGUnKSkge1xuICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICB0eXBlOiAnUmVjb3JkJyxcbiAgICAgICAgICAgIFJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgdmFsdWUpIGFzIEFubm90YXRpb25SZWNvcmRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXZlcnQgYSB2YWx1ZSB0byBpdHMgcmF3IHZhbHVlIGRlcGVuZGluZyBvbiBpdHMgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJldmVydFxuICogQHJldHVybnMgdGhlIHJhdyBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIHJldmVydFZhbHVlVG9SYXdUeXBlKHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLCB2YWx1ZTogYW55KTogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZUNvbnN0cnVjdG9yID0gdmFsdWU/LmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgc3dpdGNoICh2YWx1ZUNvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU1hdGNoZXMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBpZiAodmFsdWVNYXRjaGVzLmxlbmd0aCA+IDEgJiYgcmVmZXJlbmNlcy5maW5kKChyZWYpID0+IHJlZi5hbGlhcyA9PT0gdmFsdWVNYXRjaGVzWzBdKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0VudW1NZW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBFbnVtTWVtYmVyOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgU3RyaW5nOiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Jvb2wnLFxuICAgICAgICAgICAgICAgIEJvb2w6IHZhbHVlLnZhbHVlT2YoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBpZiAodmFsdWUudG9TdHJpbmcoKSA9PT0gdmFsdWUudG9GaXhlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgICAgICAgICAgICAgSW50OiB2YWx1ZS52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdEZWNpbWFsJyxcbiAgICAgICAgICAgICAgICAgICAgRGVjaW1hbDogdmFsdWUudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmVzdWx0ID0gcmV2ZXJ0T2JqZWN0VG9SYXdUeXBlKHJlZmVyZW5jZXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5jb25zdCByZXN0cmljdGVkS2V5cyA9IFsnJFR5cGUnLCAndGVybScsICdfX3NvdXJjZScsICdxdWFsaWZpZXInLCAnQWN0aW9uVGFyZ2V0JywgJ2Z1bGx5UXVhbGlmaWVkTmFtZScsICdhbm5vdGF0aW9ucyddO1xuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBlbWJlZGRlZCBhbm5vdGF0aW9ucyB0byB0aGVpciByYXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlcyB0aGUgY3VycmVudCBzZXQgb2YgcmVmZXJlbmNlXG4gKiBAcGFyYW0gY3VycmVudEFubm90YXRpb25zIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEBwYXJhbSB0YXJnZXRBbm5vdGF0aW9ucyB0aGUgcGxhY2Ugd2hlcmUgd2UgbmVlZCB0byBhZGQgdGhlIGFubm90YXRpb25cbiAqL1xuZnVuY3Rpb24gcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUoXG4gICAgcmVmZXJlbmNlczogUmVmZXJlbmNlW10sXG4gICAgY3VycmVudEFubm90YXRpb25zOiBhbnksXG4gICAgdGFyZ2V0QW5ub3RhdGlvbnM6IFJhd0Fubm90YXRpb25bXVxuKSB7XG4gICAgT2JqZWN0LmtleXMoY3VycmVudEFubm90YXRpb25zKVxuICAgICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gJ19hbm5vdGF0aW9ucycpXG4gICAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnRBbm5vdGF0aW9uc1trZXldKS5mb3JFYWNoKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkQW5ub3RhdGlvbiA9IHJldmVydFRlcm1Ub0dlbmVyaWNUeXBlKHJlZmVyZW5jZXMsIGN1cnJlbnRBbm5vdGF0aW9uc1trZXldW3Rlcm1dKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZEFubm90YXRpb24udGVybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB1bmFsaWFzZWRUZXJtID0gdW5hbGlhcyhyZWZlcmVuY2VzLCBgJHtrZXl9LiR7dGVybX1gKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuYWxpYXNlZFRlcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1YWxpZmllZFNwbGl0ID0gdW5hbGlhc2VkVGVybS5zcGxpdCgnIycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi50ZXJtID0gcXVhbGlmaWVkU3BsaXRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbGlmaWVkU3BsaXQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN1YiBBbm5vdGF0aW9uIHdpdGggYSBxdWFsaWZpZXIsIG5vdCBzdXJlIHdoZW4gdGhhdCBjYW4gaGFwcGVuIGluIHJlYWwgc2NlbmFyaW9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkQW5ub3RhdGlvbi5xdWFsaWZpZXIgPSBxdWFsaWZpZWRTcGxpdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YXJnZXRBbm5vdGF0aW9ucy5wdXNoKHBhcnNlZEFubm90YXRpb24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xufVxuXG4vKipcbiAqIFJldmVydCB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGl0ZW0gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcmF3IGFubm90YXRpb24uXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZXMgdGhlIGN1cnJlbnQgc2V0IG9mIHJlZmVyZW5jZVxuICogQHBhcmFtIGNvbGxlY3Rpb25JdGVtIHRoZSBjb2xsZWN0aW9uIGl0ZW0gdG8gZXZhbHVhdGVcbiAqIEByZXR1cm5zIHRoZSByYXcgdHlwZSBlcXVpdmFsZW50XG4gKi9cbmZ1bmN0aW9uIHJldmVydENvbGxlY3Rpb25JdGVtVG9SYXdUeXBlKFxuICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZVtdLFxuICAgIGNvbGxlY3Rpb25JdGVtOiBhbnlcbik6XG4gICAgfCBBbm5vdGF0aW9uUmVjb3JkXG4gICAgfCBzdHJpbmdcbiAgICB8IFByb3BlcnR5UGF0aEV4cHJlc3Npb25cbiAgICB8IFBhdGhFeHByZXNzaW9uXG4gICAgfCBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoRXhwcmVzc2lvblxuICAgIHwgQW5ub3RhdGlvblBhdGhFeHByZXNzaW9uXG4gICAgfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgY29sbGVjdGlvbkl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uSXRlbTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2xsZWN0aW9uSXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb25JdGVtLmhhc093blByb3BlcnR5KCckVHlwZScpKSB7XG4gICAgICAgICAgICAvLyBBbm5vdGF0aW9uIFJlY29yZFxuICAgICAgICAgICAgY29uc3Qgb3V0SXRlbTogQW5ub3RhdGlvblJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uSXRlbS4kVHlwZSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlczogW10gYXMgYW55W11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBDb3VsZCB2YWxpZGF0ZSBrZXlzIGFuZCB0eXBlIGJhc2VkIG9uICRUeXBlXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9uSXRlbSkuZm9yRWFjaCgoY29sbGVjdGlvbktleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN0cmljdGVkS2V5cy5pbmRleE9mKGNvbGxlY3Rpb25LZXkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbGxlY3Rpb25JdGVtW2NvbGxlY3Rpb25LZXldO1xuICAgICAgICAgICAgICAgICAgICBvdXRJdGVtLnByb3BlcnR5VmFsdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogY29sbGVjdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCB2YWx1ZSkgYXMgRXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25LZXkgPT09ICdhbm5vdGF0aW9ucycgJiYgT2JqZWN0LmtleXMoY29sbGVjdGlvbkl0ZW1bY29sbGVjdGlvbktleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0SXRlbS5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXZlcnRBbm5vdGF0aW9uc1RvUmF3VHlwZShyZWZlcmVuY2VzLCBjb2xsZWN0aW9uSXRlbVtjb2xsZWN0aW9uS2V5XSwgb3V0SXRlbS5hbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gb3V0SXRlbTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uSXRlbS50eXBlID09PSAnUHJvcGVydHlQYXRoJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBQcm9wZXJ0eVBhdGg6IGNvbGxlY3Rpb25JdGVtLnZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25JdGVtLnR5cGUgPT09ICdBbm5vdGF0aW9uUGF0aCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ0Fubm90YXRpb25QYXRoJyxcbiAgICAgICAgICAgICAgICBBbm5vdGF0aW9uUGF0aDogY29sbGVjdGlvbkl0ZW0udmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkl0ZW0udHlwZSA9PT0gJ05hdmlnYXRpb25Qcm9wZXJ0eVBhdGgnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdOYXZpZ2F0aW9uUHJvcGVydHlQYXRoJyxcbiAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBjb2xsZWN0aW9uSXRlbS52YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldmVydCBhbiBhbm5vdGF0aW9uIHRlcm0gdG8gaXQncyBnZW5lcmljIG9yIHJhdyBlcXVpdmFsZW50LlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2VzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgY29udGV4dFxuICogQHBhcmFtIGFubm90YXRpb24gdGhlIGFubm90YXRpb24gdGVybSB0byByZXZlcnRcbiAqIEByZXR1cm5zIHRoZSByYXcgYW5ub3RhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJ0VGVybVRvR2VuZXJpY1R5cGUocmVmZXJlbmNlczogUmVmZXJlbmNlW10sIGFubm90YXRpb246IEFubm90YXRpb25UZXJtPGFueT4pOiBSYXdBbm5vdGF0aW9uIHtcbiAgICBjb25zdCBiYXNlQW5ub3RhdGlvbjogUmF3QW5ub3RhdGlvbiA9IHtcbiAgICAgICAgdGVybTogYW5ub3RhdGlvbi50ZXJtLFxuICAgICAgICBxdWFsaWZpZXI6IGFubm90YXRpb24ucXVhbGlmaWVyXG4gICAgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhbm5vdGF0aW9uKSkge1xuICAgICAgICAvLyBDb2xsZWN0aW9uXG4gICAgICAgIGlmIChhbm5vdGF0aW9uLmhhc093blByb3BlcnR5KCdhbm5vdGF0aW9ucycpICYmIE9iamVjdC5rZXlzKChhbm5vdGF0aW9uIGFzIGFueSkuYW5ub3RhdGlvbnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gb24gYSBjb2xsZWN0aW9uIGl0c2VsZiwgbm90IHN1cmUgd2hlbiB0aGF0IGhhcHBlbnMgaWYgYXQgYWxsXG4gICAgICAgICAgICBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgKGFubm90YXRpb24gYXMgYW55KS5hbm5vdGF0aW9ucywgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlQW5ub3RhdGlvbixcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGFubm90YXRpb24ubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgYXMgYW55IH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuICAgIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0gdm9pZCAwO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0ge1xuICAgIFwiQXV0aG9yaXphdGlvbi5LZXlMb2NhdGlvblwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUmV2aXNpb25LaW5kXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5EYXRhTW9kaWZpY2F0aW9uT3BlcmF0aW9uS2luZFwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUGVybWlzc2lvblwiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLklzb2xhdGlvbkxldmVsXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuTmF2aWdhdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJDYXBhYmlsaXRpZXMuU2VhcmNoRXhwcmVzc2lvbnNcIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5IdHRwTWV0aG9kXCI6IHRydWUsXG4gICAgXCJBZ2dyZWdhdGlvbi5Sb2xsdXBUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLlRleHRGb3JtYXRUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpbHRlckV4cHJlc3Npb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRWZmZWN0VHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5LaW5kVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW11bmljYXRpb24uQ29udGFjdEluZm9ybWF0aW9uVHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5QaG9uZVR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uR2VuZGVyVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlZpc3VhbGl6YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ3JpdGljYWxpdHlUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVHJlbmRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRBeGlzU2NhbGVCZWhhdmlvclR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydEF4aXNBdXRvU2NhbGVEYXRhU2NvcGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuU2VsZWN0aW9uUmFuZ2VTaWduVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlNlbGVjdGlvblJhbmdlT3B0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5JbXBvcnRhbmNlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNyaXRpY2FsaXR5UmVwcmVzZW50YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlXCI6IGZhbHNlLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHZvaWQgMDtcbnZhciBUZXJtVG9UeXBlcztcbihmdW5jdGlvbiAoVGVybVRvVHlwZXMpIHtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCJdID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BcHBsaWVzVmlhQ29udGFpbmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlcmVmZXJlbmNlYWJsZUlEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db252ZW50aW9uYWxJRHNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlZmF1bHROYW1lc3BhY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkRGVmYXVsdFZhbHVlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTWVkaWFUeXBlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnRlbnREaXNwb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW1pc3RpY0NvbmN1cnJlbmN5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BZGRpdGlvbmFsUHJvcGVydGllc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRSZWZlcmVuY2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1heUltcGxlbWVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9yZGVyZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUG9zaXRpb25hbEluc2VydFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJlcXVpcmVzRXhwbGljaXRCaW5kaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4cGxpY2l0T3BlcmF0aW9uQmluZGluZ3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZEJvdW5kT3BlcmF0aW9uTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFueVN0cnVjdHVyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWZhdWx0Q2FwYWJpbGl0aWVzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlZmF1bHRDYXBhYmlsaXRpZXNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BcHBseVN1cHBvcnRlZERlZmF1bHRzXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRCYXNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuR3JvdXBhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BZ2dyZWdhdGFibGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5MZXZlbGVkSGllcmFyY2h5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5XCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuUmVjdXJzaXZlSGllcmFyY2h5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkF2YWlsYWJsZU9uQWdncmVnYXRlc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW1cIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuRXhjbHVzaXZlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTXVsdGlwbGVPZlwiXSA9IFwiRWRtLkRlY2ltYWxcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkNvbnN0cmFpbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5JdGVtc09mVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuT3BlblByb3BlcnR5VHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkRlcml2ZWRUeXBlQ29uc3RyYWludFwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuU2luZ2xlT3JDb2xsZWN0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQWxsb3dlZFRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuQXBwbGljYWJsZVRlcm1zXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5RdWFsaWZpZWRUZXJtTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4SXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWluSXRlbXNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLlNjYWxlXCJdID0gXCJFZG0uQnl0ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLk1lYXN1cmVzLlYxLkR1cmF0aW9uR3JhbnVsYXJpdHlcIl0gPSBcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkRpbWVuc2lvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWNjdW11bGF0aXZlTWVhc3VyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUm9sbGVkVXBQcm9wZXJ0eUNvdW50XCJdID0gXCJFZG0uSW50MTZcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5QbGFubmluZ0FjdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQW5hbHl0aWNhbENvbnRleHRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VydmljZVZlcnNpb25cIl0gPSBcIkVkbS5JbnQzMlwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VTY2hlbWFWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9yXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNMYW5ndWFnZUlkZW50aWZpZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRGb3JtYXRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVGltZXpvbmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNVcHBlckNhc2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ3VycmVuY3lcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVW5pdFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljU2NhbGVcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVW5pdFNwZWNpZmljUHJlY2lzaW9uXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlY29uZGFyeUtleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1pbk9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4T2NjdXJzXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Bc3NvY2lhdGlvbkVudGl0eVwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZXJpdmVkTmF2aWdhdGlvblwiXSA9IFwiRWRtLk5hdmlnYXRpb25Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXNrZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJldmVhbE9uRGVtYW5kXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0luc3RhbmNlQW5ub3RhdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BcHBsaWNhdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UaW1lc3RhbXBcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVycm9yUmVzb2x1dGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlc1wiXSA9IFwiRWRtLkNvbXBsZXhUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEubnVtZXJpY1NldmVyaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTnVtZXJpY01lc3NhZ2VTZXZlcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NYXhpbXVtTnVtZXJpY01lc3NhZ2VTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNBY3Rpb25Dcml0aWNhbFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5BdHRyaWJ1dGVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVsYXRlZFJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5JbnRlcnZhbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNBUE9iamVjdE5vZGVUeXBlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNvbXBvc2l0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc05hdHVyYWxQZXJzb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWxldmFudFF1YWxpZmllcnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlNpbXBsZUlkZW50aWZpZXJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdFNob3dWYWx1ZXNJbW1lZGlhdGVseVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZDYWxlbmRhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhckhhbGZ5ZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhclF1YXJ0ZXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyV2Vla1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhckRhdGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhclBlcmlvZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFdlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGF5T2ZGaXNjYWxZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJWYXJpYW50XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NdXR1YWxseUV4Y2x1c2l2ZVRlcm1cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRBY3RpdmF0aW9uVmlhXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRWRpdGFibGVGaWVsZEZvclwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EZWZhdWx0VmFsdWVzRnVuY3Rpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5RdWFsaWZpZWROYW1lXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmlsdGVyRGVmYXVsdFZhbHVlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZUhpZ2hcIl0gPSBcIkVkbS5QcmltaXRpdmVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU29ydE9yZGVyVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNyZWF0ZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRBdFwiXSA9IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ2hhbmdlZEJ5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVXNlcklEXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbHlNdWx0aVVuaXRCZWhhdmlvckZvclNvcnRpbmdBbmRGaWx0ZXJpbmdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlByaW1pdGl2ZVByb3BlcnR5UGF0aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5DdXJyZW5jeUNvZGVzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuVW5pdHNPZk1lYXN1cmVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkNvZGVMaXN0U291cmNlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5TdGFuZGFyZENvZGVcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLkV4dGVybmFsQ29kZVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuSXNDb25maWd1cmF0aW9uRGVwcmVjYXRpb25Db2RlXCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQWRkcmVzc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNFbWFpbEFkZHJlc3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Jc1Bob25lTnVtYmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuRXZlbnREYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuVGFza0RhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuTWVzc2FnZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5NZXNzYWdlRGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlBY3Rpb25zXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5NYXRjaENvdW50XCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkVudGl0eVNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLkZpZWxkU2VtYW50aWNzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlQZXJzb25hbFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuSXNQb3RlbnRpYWxseVNlbnNpdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjEuU3RpY2t5U2Vzc2lvblN1cHBvcnRlZFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckluZm9UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkJhZGdlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRBYnN0cmFjdFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU3RhdHVzSW5mb1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbm5lY3RlZEZpZWxkc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvblwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db250YWN0c1wiXSA9IFwiRWRtLkFubm90YXRpb25QYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NZWRpYVJlc291cmNlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLktQSVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydERlZmluaXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WYWx1ZUNyaXRpY2FsaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JpdGljYWxpdHlMYWJlbHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhlYWRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrVmlld0ZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlF1aWNrQ3JlYXRlRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmlsdGVyRmFjZXRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGhpbmdQZXJzcGVjdGl2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc1N1bW1hcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUGFydE9mUHJldmlld1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5NYXBcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2FsbGVyeVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzSW1hZ2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTXVsdGlMaW5lVGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JbnB1dE1hc2tcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklucHV0TWFza1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTm90ZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTm90ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkltcG9ydGFuY2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNDb3B5QWN0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLklzQUlPcGVyYXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkFkYXB0YXRpb25IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uc1wiXSA9IFwiRWRtLkNvbXBsZXhUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRvTm90Q2hlY2tTY2FsZU9mTWVhc3VyZWRRdWFudGl0eVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Dc3NEZWZhdWx0c1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkxpbmtUYXJnZXRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkxpbmtUYXJnZXRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MS5Sb3dTcGFuRm9yRHVwbGljYXRlVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVm9jYWJ1bGFyeVJlZmVyZW5jZXMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBsaXN0IG9mIHZvY2FidWxhcmllcyB3aXRoIGRlZmF1bHQgYWxpYXNlcy5cbiAqL1xuZXhwb3J0cy5Wb2NhYnVsYXJ5UmVmZXJlbmNlcyA9IFtcbiAgICB7IGFsaWFzOiBcIkF1dGhvcml6YXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29yZVwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5Db3JlLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFnZ3JlZ2F0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiVmFsaWRhdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJNZWFzdXJlc1wiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuTWVhc3VyZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFuYWx5dGljc1wiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3MueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW1vblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db21tb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvZGVMaXN0XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29kZUxpc3QueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW11bmljYXRpb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhpZXJhcmNoeVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9IaWVyYXJjaHkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9QZXJzb25hbERhdGEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlNlc3Npb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlVJXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvVUkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhUTUw1XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvSFRNTDUueG1sXCIgfVxuXTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcbiIsIiJdfQ==
|