@sapui5/sap.fe.core 1.124.2 → 1.126.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +5 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +4 -4
- package/src/sap/fe/core/AppComponent.js +2 -2
- package/src/sap/fe/core/AppComponent.ts +1 -1
- package/src/sap/fe/core/AppStateHandler.js +2 -2
- package/src/sap/fe/core/AppStateHandler.ts +1 -1
- package/src/sap/fe/core/BaseController.js +2 -2
- package/src/sap/fe/core/BaseController.ts +1 -1
- package/src/sap/fe/core/CommonUtils.js +3 -3
- package/src/sap/fe/core/CommonUtils.ts +12 -15
- package/src/sap/fe/core/ExtensionAPI.js +2 -2
- package/src/sap/fe/core/ExtensionAPI.ts +4 -3
- package/src/sap/fe/core/PageController.js +2 -2
- package/src/sap/fe/core/PageController.ts +1 -1
- package/src/sap/fe/core/ResourceModel.js +2 -2
- package/src/sap/fe/core/ResourceModel.ts +1 -1
- package/src/sap/fe/core/ReuseComponent.js +172 -0
- package/src/sap/fe/core/ReuseComponent.ts +165 -0
- package/src/sap/fe/core/TemplateComponent.js +2 -2
- package/src/sap/fe/core/TemplateComponent.ts +5 -1
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +92 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +90 -10
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +28 -4
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +10 -16
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +19 -16
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +5 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +2 -2
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +17 -5
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +14 -6
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +2 -2
- package/src/sap/fe/core/controllerextensions/ContextSharing.ts +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +57 -43
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +61 -46
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -2
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +8 -16
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +10 -7
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +5 -5
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +22 -18
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +28 -23
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +4 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +21 -15
- package/src/sap/fe/core/controllerextensions/PageReady.ts +29 -20
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +12 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +15 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +26 -8
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +29 -3
- package/src/sap/fe/core/controllerextensions/Routing.js +5 -7
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/Share.js +4 -4
- package/src/sap/fe/core/controllerextensions/Share.ts +10 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +20 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.js +2 -2
- package/src/sap/fe/core/controllerextensions/Telemetry.ts +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +79 -81
- package/src/sap/fe/core/controllerextensions/ViewState.ts +117 -105
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +3 -3
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +2 -2
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +17 -8
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +8 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +10 -9
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +15 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +130 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +240 -275
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +46 -28
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +60 -32
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +2 -2
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +2 -2
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +27 -3
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/CommandExecution.ts +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +3 -3
- package/src/sap/fe/core/controls/ComponentLoader.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.js +2 -2
- package/src/sap/fe/core/controls/EventDelegateHook.ts +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +51 -6
- package/src/sap/fe/core/controls/FormElementWrapper.ts +43 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +3 -3
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +3 -3
- package/src/sap/fe/core/converters/ConverterContext.js +4 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +5 -2
- package/src/sap/fe/core/converters/ManifestSettings.js +8 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +25 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +12 -3
- package/src/sap/fe/core/converters/ManifestWrapper.ts +11 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +7 -6
- package/src/sap/fe/core/converters/MetaModelConverter.ts +6 -2
- package/src/sap/fe/core/converters/annotations/DataField.js +56 -16
- package/src/sap/fe/core/converters/annotations/DataField.ts +74 -25
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +19 -18
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.js +40 -7
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +56 -20
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +8 -11
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +23 -27
- package/src/sap/fe/core/converters/controls/Common/Form.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +13 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +6 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +137 -48
- package/src/sap/fe/core/converters/controls/Common/Table.ts +174 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +73 -21
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +91 -20
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +4 -4
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +3 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -16
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +18 -17
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +2 -2
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +9 -9
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +12 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +9 -73
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +4 -74
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +5 -10
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +3 -12
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +4 -7
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FiscalFormat.js +5 -3
- package/src/sap/fe/core/formatters/FiscalFormat.ts +4 -2
- package/src/sap/fe/core/formatters/StandardFormatter.js +2 -2
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/fpm/Component.js +3 -3
- package/src/sap/fe/core/fpm/Component.ts +3 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +2 -2
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.ts +1 -1
- package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +2 -2
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.ts +2 -2
- package/src/sap/fe/core/helpers/DeleteHelper.js +7 -4
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.js +5 -5
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +2 -2
- package/src/sap/fe/core/helpers/MetaPath.js +9 -3
- package/src/sap/fe/core/helpers/MetaPath.ts +8 -2
- package/src/sap/fe/core/helpers/ModelHelper.js +149 -3
- package/src/sap/fe/core/helpers/ModelHelper.ts +202 -6
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +3 -3
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +2 -2
- package/src/sap/fe/core/helpers/TitleHelper.js +4 -4
- package/src/sap/fe/core/helpers/TitleHelper.ts +4 -4
- package/src/sap/fe/core/library.js +4 -4
- package/src/sap/fe/core/library.ts +2 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +11 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +10 -2
- package/src/sap/fe/core/messagebundle.properties +8 -57
- package/src/sap/fe/core/messagebundle_ar.properties +2 -0
- package/src/sap/fe/core/messagebundle_bg.properties +2 -0
- package/src/sap/fe/core/messagebundle_ca.properties +2 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -0
- package/src/sap/fe/core/messagebundle_cs.properties +2 -0
- package/src/sap/fe/core/messagebundle_cy.properties +4 -2
- package/src/sap/fe/core/messagebundle_da.properties +2 -0
- package/src/sap/fe/core/messagebundle_de.properties +2 -0
- package/src/sap/fe/core/messagebundle_el.properties +2 -0
- package/src/sap/fe/core/messagebundle_en.properties +6 -57
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -36
- package/src/sap/fe/core/messagebundle_es.properties +2 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -0
- package/src/sap/fe/core/messagebundle_et.properties +2 -0
- package/src/sap/fe/core/messagebundle_fi.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr.properties +2 -0
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +2 -0
- package/src/sap/fe/core/messagebundle_hu.properties +3 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -0
- package/src/sap/fe/core/messagebundle_it.properties +2 -0
- package/src/sap/fe/core/messagebundle_iw.properties +3 -1
- package/src/sap/fe/core/messagebundle_ja.properties +2 -0
- package/src/sap/fe/core/messagebundle_kk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +2 -0
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_mk.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +2 -0
- package/src/sap/fe/core/messagebundle_nl.properties +2 -0
- package/src/sap/fe/core/messagebundle_no.properties +2 -0
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -0
- package/src/sap/fe/core/messagebundle_ro.properties +2 -0
- package/src/sap/fe/core/messagebundle_ru.properties +2 -0
- package/src/sap/fe/core/messagebundle_sh.properties +64 -62
- package/src/sap/fe/core/messagebundle_sk.properties +2 -0
- package/src/sap/fe/core/messagebundle_sl.properties +2 -0
- package/src/sap/fe/core/messagebundle_sr.properties +2 -0
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +2 -0
- package/src/sap/fe/core/messagebundle_tr.properties +2 -0
- package/src/sap/fe/core/messagebundle_uk.properties +3 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper.js +3 -3
- package/src/sap/fe/core/operationsHelper.ts +2 -2
- package/src/sap/fe/core/rootView/Fcl.controller.js +3 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +114 -92
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +120 -106
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +6 -4
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +4 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +12 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -2
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +7 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +16 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +22 -11
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +2 -2
- package/src/sap/fe/core/templating/ActionHelper.ts +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.js +2 -2
- package/src/sap/fe/core/templating/CommonFormatters.ts +3 -3
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataFieldFormatters.js +4 -4
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.js +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.js +2 -2
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.js +2 -2
- package/src/sap/fe/core/templating/FieldControlHelper.ts +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +2 -2
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +7 -7
- package/src/sap/fe/core/templating/UIFormatters.ts +6 -6
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +1 -1
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +1 -1
- package/src/sap/fe/core/type/InputMask.js +124 -0
- package/src/sap/fe/core/type/InputMask.ts +131 -0
- package/ui5.yaml +19 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +0 -117
- package/src/sap/fe/core/helpers/AnnotationEnum.js +0 -33
- package/src/sap/fe/core/helpers/AnnotationEnum.ts +0 -21
- package/src/sap/fe/core/helpers/BindingToolkit.js +0 -1813
- package/src/sap/fe/core/helpers/BindingToolkit.ts +0 -2450
- package/src/sap/fe/core/helpers/ClassSupport.js +0 -584
- package/src/sap/fe/core/helpers/ClassSupport.ts +0 -697
- package/src/sap/fe/core/jsx-runtime/Fragment.js +0 -14
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +0 -93
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +0 -86
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +0 -177
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +0 -197
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +0 -237
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +0 -246
- package/src/sap/fe/core/jsx-runtime/jsx.js +0 -47
- package/src/sap/fe/core/jsx-runtime/jsx.ts +0 -71
- package/src/sap/fe/core/jsx-runtime/jsxs.js +0 -10
- package/src/sap/fe/core/jsx-runtime/jsxs.ts +0 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +0 -172
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +0 -194
|
@@ -8,14 +8,14 @@
|
|
|
8
8
|
/******/ "use strict";
|
|
9
9
|
/******/ var __webpack_modules__ = ({
|
|
10
10
|
|
|
11
|
-
/***/
|
|
11
|
+
/***/ 280:
|
|
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__(239);
|
|
18
|
+
const utils_1 = __webpack_require__(581);
|
|
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
|
+
/***/ 899:
|
|
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__(280), exports);
|
|
1093
|
+
__exportStar(__webpack_require__(581), exports);
|
|
1094
|
+
__exportStar(__webpack_require__(5), exports);
|
|
1095
1095
|
|
|
1096
1096
|
|
|
1097
1097
|
/***/ }),
|
|
1098
1098
|
|
|
1099
|
-
/***/
|
|
1099
|
+
/***/ 581:
|
|
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__(323);
|
|
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__(860);
|
|
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__(239);
|
|
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
|
+
/***/ 5:
|
|
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__(581);
|
|
1375
1375
|
/**
|
|
1376
1376
|
* Revert an object to its raw type equivalent.
|
|
1377
1377
|
*
|
|
@@ -1652,7 +1652,7 @@ exports.revertTermToGenericType = revertTermToGenericType;
|
|
|
1652
1652
|
|
|
1653
1653
|
/***/ }),
|
|
1654
1654
|
|
|
1655
|
-
/***/
|
|
1655
|
+
/***/ 323:
|
|
1656
1656
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1657
1657
|
|
|
1658
1658
|
|
|
@@ -1697,7 +1697,7 @@ exports.EnumIsFlag = {
|
|
|
1697
1697
|
|
|
1698
1698
|
/***/ }),
|
|
1699
1699
|
|
|
1700
|
-
/***/
|
|
1700
|
+
/***/ 860:
|
|
1701
1701
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1702
1702
|
|
|
1703
1703
|
|
|
@@ -1776,6 +1776,7 @@ var TermToTypes;
|
|
|
1776
1776
|
TermToTypes["Org.OData.Capabilities.V1.CustomHeaders"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1777
1777
|
TermToTypes["Org.OData.Capabilities.V1.CustomQueryOptions"] = "Org.OData.Capabilities.V1.CustomParameter";
|
|
1778
1778
|
TermToTypes["Org.OData.Capabilities.V1.MediaLocationUpdateSupported"] = "Org.OData.Core.V1.Tag";
|
|
1779
|
+
TermToTypes["Org.OData.Capabilities.V1.DefaultCapabilities"] = "Org.OData.Capabilities.V1.DefaultCapabilitiesType";
|
|
1779
1780
|
TermToTypes["Org.OData.Aggregation.V1.ApplySupported"] = "Org.OData.Aggregation.V1.ApplySupportedType";
|
|
1780
1781
|
TermToTypes["Org.OData.Aggregation.V1.ApplySupportedDefaults"] = "Org.OData.Aggregation.V1.ApplySupportedBase";
|
|
1781
1782
|
TermToTypes["Org.OData.Aggregation.V1.Groupable"] = "Org.OData.Core.V1.Tag";
|
|
@@ -1969,7 +1970,7 @@ var TermToTypes;
|
|
|
1969
1970
|
|
|
1970
1971
|
/***/ }),
|
|
1971
1972
|
|
|
1972
|
-
/***/
|
|
1973
|
+
/***/ 239:
|
|
1973
1974
|
/***/ (function(__unused_webpack_module, exports) {
|
|
1974
1975
|
|
|
1975
1976
|
|
|
@@ -2030,7 +2031,7 @@ exports.VocabularyReferences = [
|
|
|
2030
2031
|
/******/ // startup
|
|
2031
2032
|
/******/ // Load entry module and return exports
|
|
2032
2033
|
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
2033
|
-
/******/ var __webpack_exports__ = __webpack_require__(
|
|
2034
|
+
/******/ var __webpack_exports__ = __webpack_require__(899);
|
|
2034
2035
|
/******/ AnnotationConverter = __webpack_exports__;
|
|
2035
2036
|
/******/
|
|
2036
2037
|
/******/ })()
|
|
@@ -2038,4 +2039,4 @@ exports.VocabularyReferences = [
|
|
|
2038
2039
|
|
|
2039
2040
|
return AnnotationConverter;
|
|
2040
2041
|
},true);
|
|
2041
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC41L25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9jb252ZXJ0ZXIudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguNS9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvd3JpdGViYWNrLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrdm9jYWJ1bGFyaWVzLXR5cGVzQDAuMTAuNC9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VudW1Jc0ZsYWcuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC40L25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC40L25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLHdEQUFvRztBQUNwRyx5Q0FhaUI7QUFFakI7O0dBRUc7QUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXREOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsVUFBaUIsRUFBRSxhQUFrQjtJQUMzRCxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBRTtRQUNyRCxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2xDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxhQUFhLENBQ2xCLFNBQW9CLEVBQ3BCLFlBQWlCLEVBQ2pCLElBQXdCLEVBQ3hCLGVBQXdCOztJQUV4QixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDcEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7S0FDOUQ7SUFFRCxzREFBc0Q7SUFDdEQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pC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QUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QyxtQkFBbUIsS0FBSzs7Ozs7Ozs7QUN4UXBEO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsTUFBTSxvS0FBb0s7QUFDMUssTUFBTSx5SUFBeUk7QUFDL0ksTUFBTSxpS0FBaUs7QUFDdkssTUFBTSw4SkFBOEo7QUFDcEssTUFBTSwySkFBMko7QUFDakssTUFBTSxxSkFBcUo7QUFDM0osTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx1SUFBdUk7QUFDN0ksTUFBTSw2SUFBNkk7QUFDbkosTUFBTSw0SkFBNEo7QUFDbEssTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx5SkFBeUo7QUFDL0osTUFBTSwwSUFBMEk7QUFDaEosTUFBTSwySEFBMkg7QUFDakksTUFBTTtBQUNOOzs7Ozs7O1VDdEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiQW5ub3RhdGlvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQWN0aW9uLFxuICAgIEFjdGlvbkltcG9ydCxcbiAgICBBY3Rpb25QYXJhbWV0ZXIsXG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uUGF0aCxcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgQ29tcGxleFR5cGUsXG4gICAgQ29udmVydGVkTWV0YWRhdGEsXG4gICAgRW50aXR5Q29udGFpbmVyLFxuICAgIEVudGl0eVNldCxcbiAgICBFbnRpdHlUeXBlLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgUmF3QWN0aW9uLFxuICAgIFJhd0FjdGlvbkltcG9ydCxcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJhd0NvbXBsZXhUeXBlLFxuICAgIFJhd0VudGl0eUNvbnRhaW5lcixcbiAgICBSYXdFbnRpdHlTZXQsXG4gICAgUmF3RW50aXR5VHlwZSxcbiAgICBSYXdNZXRhZGF0YSxcbiAgICBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGUsXG4gICAgUmVzb2x1dGlvblRhcmdldCxcbiAgICBTaW5nbGV0b24sXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuaW1wb3J0IHtcbiAgICBhZGRHZXRCeVZhbHVlLFxuICAgIGFsaWFzLFxuICAgIERlY2ltYWwsXG4gICAgRW51bUlzRmxhZyxcbiAgICBsYXp5LFxuICAgIG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+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+IDApIHtcbiAgICAgICAgICAgIC8vIEFubm90YXRpb24gb24gYSBjb2xsZWN0aW9uIGl0c2VsZiwgbm90IHN1cmUgd2hlbiB0aGF0IGhhcHBlbnMgaWYgYXQgYWxsXG4gICAgICAgICAgICBiYXNlQW5ub3RhdGlvbi5hbm5vdGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgcmV2ZXJ0QW5ub3RhdGlvbnNUb1Jhd1R5cGUocmVmZXJlbmNlcywgKGFubm90YXRpb24gYXMgYW55KS5hbm5vdGF0aW9ucywgYmFzZUFubm90YXRpb24uYW5ub3RhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5iYXNlQW5ub3RhdGlvbixcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGFubm90YXRpb24ubWFwKChhbm5vKSA9PiByZXZlcnRDb2xsZWN0aW9uSXRlbVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vKSkgYXMgYW55W11cbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGFubm90YXRpb24uaGFzT3duUHJvcGVydHkoJyRUeXBlJykpIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHJlY29yZDogcmV2ZXJ0Q29sbGVjdGlvbkl0ZW1Ub1Jhd1R5cGUocmVmZXJlbmNlcywgYW5ub3RhdGlvbikgYXMgYW55IH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZUFubm90YXRpb24sIHZhbHVlOiByZXZlcnRWYWx1ZVRvUmF3VHlwZShyZWZlcmVuY2VzLCBhbm5vdGF0aW9uKSB9O1xuICAgIH1cbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0gdm9pZCAwO1xuZXhwb3J0cy5FbnVtSXNGbGFnID0ge1xuICAgIFwiQXV0aG9yaXphdGlvbi5LZXlMb2NhdGlvblwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUmV2aXNpb25LaW5kXCI6IGZhbHNlLFxuICAgIFwiQ29yZS5EYXRhTW9kaWZpY2F0aW9uT3BlcmF0aW9uS2luZFwiOiBmYWxzZSxcbiAgICBcIkNvcmUuUGVybWlzc2lvblwiOiB0cnVlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLkNvbmZvcm1hbmNlTGV2ZWxUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ2FwYWJpbGl0aWVzLklzb2xhdGlvbkxldmVsXCI6IHRydWUsXG4gICAgXCJDYXBhYmlsaXRpZXMuTmF2aWdhdGlvblR5cGVcIjogZmFsc2UsXG4gICAgXCJDYXBhYmlsaXRpZXMuU2VhcmNoRXhwcmVzc2lvbnNcIjogdHJ1ZSxcbiAgICBcIkNhcGFiaWxpdGllcy5IdHRwTWV0aG9kXCI6IHRydWUsXG4gICAgXCJBZ2dyZWdhdGlvbi5Sb2xsdXBUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLlRleHRGb3JtYXRUeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpbHRlckV4cHJlc3Npb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGVcIjogZmFsc2UsXG4gICAgXCJDb21tb24uRWZmZWN0VHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5LaW5kVHlwZVwiOiBmYWxzZSxcbiAgICBcIkNvbW11bmljYXRpb24uQ29udGFjdEluZm9ybWF0aW9uVHlwZVwiOiB0cnVlLFxuICAgIFwiQ29tbXVuaWNhdGlvbi5QaG9uZVR5cGVcIjogdHJ1ZSxcbiAgICBcIkNvbW11bmljYXRpb24uR2VuZGVyVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlZpc3VhbGl6YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ3JpdGljYWxpdHlUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuVHJlbmRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnRBeGlzU2NhbGVCZWhhdmlvclR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5DaGFydEF4aXNBdXRvU2NhbGVEYXRhU2NvcGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuQ2hhcnREaW1lbnNpb25Sb2xlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNoYXJ0TWVhc3VyZVJvbGVUeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuU2VsZWN0aW9uUmFuZ2VTaWduVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlNlbGVjdGlvblJhbmdlT3B0aW9uVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGVcIjogZmFsc2UsXG4gICAgXCJVSS5JbXBvcnRhbmNlVHlwZVwiOiBmYWxzZSxcbiAgICBcIlVJLkNyaXRpY2FsaXR5UmVwcmVzZW50YXRpb25UeXBlXCI6IGZhbHNlLFxuICAgIFwiVUkuT3BlcmF0aW9uR3JvdXBpbmdUeXBlXCI6IGZhbHNlLFxufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHZvaWQgMDtcbnZhciBUZXJtVG9UeXBlcztcbihmdW5jdGlvbiAoVGVybVRvVHlwZXMpIHtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLlNlY3VyaXR5U2NoZW1lc1wiXSA9IFwiT3JnLk9EYXRhLkF1dGhvcml6YXRpb24uVjEuU2VjdXJpdHlTY2hlbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxLkF1dGhvcml6YXRpb25zXCJdID0gXCJPcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS5BdXRob3JpemF0aW9uXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXZpc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlJldmlzaW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTGlua3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkxpbmtcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkV4YW1wbGVWYWx1ZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuTWVzc2FnZXNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLk1lc3NhZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5WYWx1ZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVmFsdWVFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5SZXNvdXJjZUV4Y2VwdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUmVzb3VyY2VFeGNlcHRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5EYXRhTW9kaWZpY2F0aW9uRXhjZXB0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSXNMYW5ndWFnZURlcGVuZGVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BcHBsaWVzVmlhQ29udGFpbmVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlcmVmZXJlbmNlYWJsZUlEc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5Db252ZW50aW9uYWxJRHNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUGVybWlzc2lvbnNcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlBlcm1pc3Npb25cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkRlZmF1bHROYW1lc3BhY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuSW1tdXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbXB1dGVkRGVmYXVsdFZhbHVlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzVVJMXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLklzTWVkaWFUeXBlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkNvbnRlbnREaXNwb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuQ29udGVudERpc3Bvc2l0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuT3B0aW1pc3RpY0NvbmN1cnJlbmN5XCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BZGRpdGlvbmFsUHJvcGVydGllc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BdXRvRXhwYW5kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkF1dG9FeHBhbmRSZWZlcmVuY2VzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk1heUltcGxlbWVudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVHlwZU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9yZGVyZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuUG9zaXRpb25hbEluc2VydFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5BbHRlcm5hdGVLZXlcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wdGlvbmFsUGFyYW1ldGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5PcHRpb25hbFBhcmFtZXRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLk9wZXJhdGlvbkF2YWlsYWJsZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLlJlcXVpcmVzRXhwbGljaXRCaW5kaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkV4cGxpY2l0T3BlcmF0aW9uQmluZGluZ3NcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlF1YWxpZmllZEJvdW5kT3BlcmF0aW9uTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNvcmUuVjEuU3ltYm9saWNOYW1lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ29yZS5WMS5HZW9tZXRyeUZlYXR1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLkdlb21ldHJ5RmVhdHVyZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5Db3JlLlYxLkFueVN0cnVjdHVyZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbmZvcm1hbmNlTGV2ZWxcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ29uZm9ybWFuY2VMZXZlbFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQXN5bmNocm9ub3VzUmVxdWVzdHNTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5CYXRjaENvbnRpbnVlT25FcnJvclN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLklzb2xhdGlvblN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Jc29sYXRpb25MZXZlbFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Dcm9zc0pvaW5TdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1N1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DYWxsYmFja1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ2hhbmdlVHJhY2tpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvdW50UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkluZGV4YWJsZUJ5S2V5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVG9wU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2tpcFN1cHBvcnRlZFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbXB1dGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWxlY3RTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlbGVjdFN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQmF0Y2hTdXBwb3J0XCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkJhdGNoU3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5FeHBhbmRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRXhwYW5kUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU2VhcmNoUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5LZXlBc1NlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5RdWVyeVNlZ21lbnRTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5JbnNlcnRSZXN0cmljdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFwiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWVwSW5zZXJ0U3VwcG9ydFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRGVlcFVwZGF0ZVN1cHBvcnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkRlbGV0ZVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5EZWxldGVSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkNvbGxlY3Rpb25Qcm9wZXJ0eVJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Db2xsZWN0aW9uUHJvcGVydHlSZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk9wZXJhdGlvblJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5PcGVyYXRpb25SZXN0cmljdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkFubm90YXRpb25WYWx1ZXNJblF1ZXJ5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuTW9kaWZpY2F0aW9uUXVlcnlPcHRpb25zXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1vZGlmaWNhdGlvblF1ZXJ5T3B0aW9uc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuUmVhZFJlc3RyaWN0aW9uc1wiXSA9IFwiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5SZWFkUmVzdHJpY3Rpb25zVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21IZWFkZXJzXCJdID0gXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkN1c3RvbVBhcmFtZXRlclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5DdXN0b21RdWVyeU9wdGlvbnNcIl0gPSBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuQ3VzdG9tUGFyYW1ldGVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk1lZGlhTG9jYXRpb25VcGRhdGVTdXBwb3J0ZWRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQXBwbHlTdXBwb3J0ZWREZWZhdWx0c1wiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFwcGx5U3VwcG9ydGVkQmFzZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Db250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuTGV2ZWxlZEhpZXJhcmNoeVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVwiXSA9IFwiT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLlJlY3Vyc2l2ZUhpZXJhcmNoeVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNcIl0gPSBcIk9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5BdmFpbGFibGVPbkFnZ3JlZ2F0ZXNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuTWF4aW11bVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkV4Y2x1c2l2ZVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5BbGxvd2VkVmFsdWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk11bHRpcGxlT2ZcIl0gPSBcIkVkbS5EZWNpbWFsXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5Db25zdHJhaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlwiXSA9IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjEuSXRlbXNPZlR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk9wZW5Qcm9wZXJ0eVR5cGVDb25zdHJhaW50XCJdID0gXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5TaW5nbGVPckNvbGxlY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5EZXJpdmVkVHlwZUNvbnN0cmFpbnRcIl0gPSBcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLlNpbmdsZU9yQ29sbGVjdGlvblR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFsbG93ZWRUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLkFwcGxpY2FibGVUZXJtc1wiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuUXVhbGlmaWVkVGVybU5hbWVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heEl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbkl0ZW1zXCJdID0gXCJFZG0uSW50NjRcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5TY2FsZVwiXSA9IFwiRWRtLkJ5dGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcIk9yZy5PRGF0YS5NZWFzdXJlcy5WMS5EdXJhdGlvbkdyYW51bGFyaXR5XCJdID0gXCJPcmcuT0RhdGEuTWVhc3VyZXMuVjEuRHVyYXRpb25HcmFudWxhcml0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5EaW1lbnNpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFjY3VtdWxhdGl2ZU1lYXN1cmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLlJvbGxlZFVwUHJvcGVydHlDb3VudFwiXSA9IFwiRWRtLkludDE2XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuUGxhbm5pbmdBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BbmFseXRpY2FsQ29udGV4dFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFuYWx5dGljYWxDb250ZXh0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlcnZpY2VWZXJzaW9uXCJdID0gXCJFZG0uSW50MzJcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZXJ2aWNlU2NoZW1hVmVyc2lvblwiXSA9IFwiRWRtLkludDMyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvclwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzTGFuZ3VhZ2VJZGVudGlmaWVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0Rm9ybWF0XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEZvcm1hdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1RpbWV6b25lXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzVXBwZXJDYXNlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0N1cnJlbmN5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc1VuaXRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1NjYWxlXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVuaXRTcGVjaWZpY1ByZWNpc2lvblwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZWNvbmRhcnlLZXlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NaW5PY2N1cnNcIl0gPSBcIkVkbS5JbnQ2NFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1heE9jY3Vyc1wiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXNzb2NpYXRpb25FbnRpdHlcIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVyaXZlZE5hdmlnYXRpb25cIl0gPSBcIkVkbS5OYXZpZ2F0aW9uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWFza2VkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXZlYWxPbkRlbWFuZFwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNJbnN0YW5jZUFubm90YXRpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGxpY2F0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXBwbGljYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGltZXN0YW1wXCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5FcnJvclJlc29sdXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWVzc2FnZXNcIl0gPSBcIkVkbS5Db21wbGV4VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLm51bWVyaWNTZXZlcml0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk51bWVyaWNNZXNzYWdlU2V2ZXJpdHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTWF4aW11bU51bWVyaWNNZXNzYWdlU2V2ZXJpdHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5OdW1lcmljTWVzc2FnZVNldmVyaXR5VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQWN0aW9uQ3JpdGljYWxcIl0gPSBcIkVkbS5Cb29sZWFuXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQXR0cmlidXRlc1wiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlbGF0ZWRSZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkludGVydmFsXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSW50ZXJ2YWxUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU0FQT2JqZWN0Tm9kZVR5cGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TQVBPYmplY3ROb2RlVHlwZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Db21wb3NpdGlvblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNOYXR1cmFsUGVyc29uXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVsZXZhbnRRdWFsaWZpZXJzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5TaW1wbGVJZGVudGlmaWVyXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RTaG93VmFsdWVzSW1tZWRpYXRlbHlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlZhbHVlTGlzdE1hcHBpbmdcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RNYXBwaW5nVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJZZWFyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFySGFsZnllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyTW9udGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mQ2FsZW5kYXJNb250aFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNEYXlPZkNhbGVuZGFyWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJIYWxmeWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNDYWxlbmRhclllYXJRdWFydGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhck1vbnRoXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0NhbGVuZGFyWWVhcldlZWtcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzQ2FsZW5kYXJEYXRlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUGVyaW9kXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJQZXJpb2RcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRmlzY2FsUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyUXVhcnRlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0Zpc2NhbFllYXJXZWVrXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RheU9mRmlzY2FsWWVhclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuSXNGaXNjYWxZZWFyVmFyaWFudFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTXV0dWFsbHlFeGNsdXNpdmVUZXJtXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnROb2RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0QWN0aXZhdGlvblZpYVwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuU2ltcGxlSWRlbnRpZmllclwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkVkaXRhYmxlRmllbGRGb3JcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiXSA9IFwiRWRtLlByb3BlcnR5UGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNpZGVFZmZlY3RzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRGVmYXVsdFZhbHVlc0Z1bmN0aW9uXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUXVhbGlmaWVkTmFtZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVIaWdoXCJdID0gXCJFZG0uUHJpbWl0aXZlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNvcnRPcmRlclR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuQ3JlYXRlZEF0XCJdID0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DcmVhdGVkQnlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Vc2VySURcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5DaGFuZ2VkQXRcIl0gPSBcIkVkbS5EYXRlVGltZU9mZnNldFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkNoYW5nZWRCeVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlVzZXJJRFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkFwcGx5TXVsdGlVbml0QmVoYXZpb3JGb3JTb3J0aW5nQW5kRmlsdGVyaW5nXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5QcmltaXRpdmVQcm9wZXJ0eVBhdGhcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ3VycmVuY3lDb2Rlc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuQ29kZUxpc3RTb3VyY2VcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLlVuaXRzT2ZNZWFzdXJlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5Db2RlTGlzdFNvdXJjZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29kZUxpc3QudjEuU3RhbmRhcmRDb2RlXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MS5FeHRlcm5hbENvZGVcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvZGVMaXN0LnYxLklzQ29uZmlndXJhdGlvbkRlcHJlY2F0aW9uQ29kZVwiXSA9IFwiRWRtLkJvb2xlYW5cIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkFkZHJlc3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLklzRW1haWxBZGRyZXNzXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuSXNQaG9uZU51bWJlclwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkV2ZW50RGF0YVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5UYXNrXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLlRhc2tEYXRhXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLk1lc3NhZ2VcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuTWVzc2FnZURhdGFcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhpZXJhcmNoeS52MS5SZWN1cnNpdmVIaWVyYXJjaHlUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5QWN0aW9uc1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxLlJlY3Vyc2l2ZUhpZXJhcmNoeUFjdGlvbnNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuTWF0Y2hDb3VudFwiXSA9IFwiRWRtLkludDY0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5IaWVyYXJjaHkudjEuUmVjdXJzaXZlSGllcmFyY2h5U3VwcG9ydGVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5FbnRpdHlTZW1hbnRpY3NUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5QZXJzb25hbERhdGEudjEuRmllbGRTZW1hbnRpY3NcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5GaWVsZFNlbWFudGljc1R5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5UGVyc29uYWxcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuU2Vzc2lvbi52MS5TdGlja3lTZXNzaW9uU3VwcG9ydGVkXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5TZXNzaW9uLnYxLlN0aWNreVNlc3Npb25TdXBwb3J0ZWRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJJbmZvVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSWRlbnRpZmljYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5CYWRnZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQmFkZ2VUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlN0YXR1c0luZm9cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEFic3RyYWN0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29ubmVjdGVkRmllbGRzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db25uZWN0ZWRGaWVsZHNUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5HZW9Mb2NhdGlvbnNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuR2VvTG9jYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdlb0xvY2F0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29udGFjdHNcIl0gPSBcIkVkbS5Bbm5vdGF0aW9uUGF0aFwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWVkaWFSZXNvdXJjZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuS1BJXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5LUElUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnREZWZpbml0aW9uVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmFsdWVDcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5TGFiZWxzXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eUxhYmVsVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCJdID0gXCJFZG0uUHJvcGVydHlQYXRoXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IZWFkZXJGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja1ZpZXdGYWNldHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZhY2V0XCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5RdWlja0NyZWF0ZUZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpbHRlckZhY2V0c1wiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50VHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uVmFyaWFudFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRoaW5nUGVyc3BlY3RpdmVcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNTdW1tYXJ5XCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcnRPZlByZXZpZXdcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTWFwXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkdhbGxlcnlcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSXNJbWFnZVVSTFwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0ltYWdlXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk11bHRpTGluZVRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlXCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Ob3RlVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSW1wb3J0YW5jZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Jc0NvcHlBY3Rpb25cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ3JlYXRlSGlkZGVuXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlVwZGF0ZUhpZGRlblwiXSA9IFwiT3JnLk9EYXRhLkNvcmUuVjEuVGFnXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EZWxldGVIaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkFkYXB0YXRpb25IaWRkZW5cIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRGVmYXVsdFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkQWJzdHJhY3RcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5XCJdID0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Dcml0aWNhbGl0eVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25cIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FbXBoYXNpemVkXCJdID0gXCJPcmcuT0RhdGEuQ29yZS5WMS5UYWdcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9yZGVyQnlcIl0gPSBcIkVkbS5Qcm9wZXJ0eVBhdGhcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlBhcmFtZXRlckRlZmF1bHRWYWx1ZVwiXSA9IFwiRWRtLlByaW1pdGl2ZVR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uU3RhdGVUeXBlXCI7XG4gICAgVGVybVRvVHlwZXNbXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWNvbW1lbmRhdGlvbkxpc3RcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlY29tbWVuZGF0aW9uTGlzdFR5cGVcIjtcbiAgICBUZXJtVG9UeXBlc1tcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHRcIl0gPSBcIk9yZy5PRGF0YS5Db3JlLlYxLlRhZ1wiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRG9Ob3RDaGVja1NjYWxlT2ZNZWFzdXJlZFF1YW50aXR5XCJdID0gXCJFZG0uQm9vbGVhblwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuQ3NzRGVmYXVsdHNcIl0gPSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkhUTUw1LnYxLkNzc0RlZmF1bHRzVHlwZVwiO1xuICAgIFRlcm1Ub1R5cGVzW1wiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFwiXSA9IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSFRNTDUudjEuTGlua1RhcmdldFR5cGVcIjtcbn0pKFRlcm1Ub1R5cGVzID0gZXhwb3J0cy5UZXJtVG9UeXBlcyB8fCAoZXhwb3J0cy5UZXJtVG9UeXBlcyA9IHt9KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuVm9jYWJ1bGFyeVJlZmVyZW5jZXMgPSB2b2lkIDA7XG4vKipcbiAqIFRoZSBsaXN0IG9mIHZvY2FidWxhcmllcyB3aXRoIGRlZmF1bHQgYWxpYXNlcy5cbiAqL1xuZXhwb3J0cy5Wb2NhYnVsYXJ5UmVmZXJlbmNlcyA9IFtcbiAgICB7IGFsaWFzOiBcIkF1dGhvcml6YXRpb25cIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5BdXRob3JpemF0aW9uLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuQXV0aG9yaXphdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiQ29yZVwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLkNvcmUuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5Db3JlLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJDYXBhYmlsaXRpZXNcIiwgbmFtZXNwYWNlOiBcIk9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFnZ3JlZ2F0aW9uXCIsIG5hbWVzcGFjZTogXCJPcmcuT0RhdGEuQWdncmVnYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS54bWxcIiB9LFxuICAgIHsgYWxpYXM6IFwiVmFsaWRhdGlvblwiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLlZhbGlkYXRpb24uVjFcIiwgdXJpOiBcImh0dHBzOi8vb2FzaXMtdGNzLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL09yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLnhtbFwiIH0sXG4gICAgeyBhbGlhczogXCJNZWFzdXJlc1wiLCBuYW1lc3BhY2U6IFwiT3JnLk9EYXRhLk1lYXN1cmVzLlYxXCIsIHVyaTogXCJodHRwczovL29hc2lzLXRjcy5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9PcmcuT0RhdGEuTWVhc3VyZXMuVjEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkFuYWx5dGljc1wiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3MueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW1vblwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9Db21tb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvZGVMaXN0XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db2RlTGlzdC52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvQ29kZUxpc3QueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkNvbW11bmljYXRpb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL0NvbW11bmljYXRpb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhpZXJhcmNoeVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuSGllcmFyY2h5LnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9IaWVyYXJjaHkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlBlcnNvbmFsRGF0YVwiLCBuYW1lc3BhY2U6IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxXCIsIHVyaTogXCJodHRwczovL3NhcC5naXRodWIuaW8vb2RhdGEtdm9jYWJ1bGFyaWVzL3ZvY2FidWxhcmllcy9QZXJzb25hbERhdGEueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlNlc3Npb25cIiwgbmFtZXNwYWNlOiBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlNlc3Npb24udjFcIiwgdXJpOiBcImh0dHBzOi8vc2FwLmdpdGh1Yi5pby9vZGF0YS12b2NhYnVsYXJpZXMvdm9jYWJ1bGFyaWVzL1Nlc3Npb24ueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIlVJXCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvVUkueG1sXCIgfSxcbiAgICB7IGFsaWFzOiBcIkhUTUw1XCIsIG5hbWVzcGFjZTogXCJjb20uc2FwLnZvY2FidWxhcmllcy5IVE1MNS52MVwiLCB1cmk6IFwiaHR0cHM6Ly9zYXAuZ2l0aHViLmlvL29kYXRhLXZvY2FidWxhcmllcy92b2NhYnVsYXJpZXMvSFRNTDUueG1sXCIgfVxuXTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMyKTtcbiIsIiJdfQ==
|
|
2042
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvY29udmVydGVyLnRzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvbm9kZV9tb2R1bGVzLy5wbnBtL0BzYXAtdXgrYW5ub3RhdGlvbi1jb252ZXJ0ZXJAMC44LjEyL25vZGVfbW9kdWxlcy9Ac2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K2Fubm90YXRpb24tY29udmVydGVyQDAuOC4xMi9ub2RlX21vZHVsZXMvQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlci9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCthbm5vdGF0aW9uLWNvbnZlcnRlckAwLjguMTIvbm9kZV9tb2R1bGVzL0BzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXIvc3JjL3dyaXRlYmFjay50cyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjEwLjExL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRW51bUlzRmxhZy5qcyIsIndlYnBhY2s6Ly9Bbm5vdGF0aW9uQ29udmVydGVyL25vZGVfbW9kdWxlcy8ucG5wbS9Ac2FwLXV4K3ZvY2FidWxhcmllcy10eXBlc0AwLjEwLjExL25vZGVfbW9kdWxlcy9Ac2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVGVybVRvVHlwZXMuanMiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci9ub2RlX21vZHVsZXMvLnBucG0vQHNhcC11eCt2b2NhYnVsYXJpZXMtdHlwZXNAMC4xMC4xMS9ub2RlX21vZHVsZXMvQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1ZvY2FidWxhcnlSZWZlcmVuY2VzLmpzIiwid2VicGFjazovL0Fubm90YXRpb25Db252ZXJ0ZXIvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQW5ub3RhdGlvbkNvbnZlcnRlci93ZWJwYWNrL3N0YXJ0dXAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQXlDQSx3REFBb0c7QUFDcEcseUNBYWlCO0FBRWpCOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUV0RDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFVBQWlCLEVBQUUsYUFBa0I7SUFDM0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxhQUFhLEVBQUU7UUFDckQsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUNsQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsYUFBYSxDQUNsQixTQUFvQixFQUNwQixZQUFpQixFQUNqQixJQUF3QixFQUN4QixlQUF3Qjs7SUFFeEIsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3BCLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQzlEO0lBRUQsc0RBQXNEO0lBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUMsbURBQW1EO0tBQ2hGO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDaEUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLDhCQUE4QjtZQUM5QixNQUFNLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHLHdCQUFZLEVBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDLEVBQUUsRUFBYyxDQUFDLENBQUM7SUFFbkIsa0RBQWtEO0lBQ2xELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtRQUM1Qix5REFBeUQ7UUFDekQsSUFDSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQztZQUMvRCxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQUssZUFBUyxDQUFDLDJCQUEyQixFQUFFLDBDQUFFLGtCQUFrQixHQUNqRjtZQUNFLCtFQUErRTtZQUMvRSxZQUFZO2dCQUNSLDJCQUFTLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUNqRCxTQUFTLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUNsRCxTQUFTLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUM3QyxTQUFTLENBQUMsa0JBQWtCLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCO1lBQzNFLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztTQUMvRDthQUFNO1lBQ0gsWUFBWSxHQUFHLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1NBQzFEO0tBQ0o7U0FBTSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLFNBQVMsRUFBRTtRQUN0RCw2Q0FBNkM7UUFDN0MsWUFBWSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ2xEO1NBQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtRQUMxQyw2RUFBNkU7UUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxnQ0FBb0IsRUFBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEYsWUFBWTtZQUNSLGVBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxtQ0FBSSxTQUFTLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNqSDtJQUVELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQzlCLENBQUMsT0FBOEIsRUFBRSxPQUFlLEVBQUUsRUFBRTs7UUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtZQUM5QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDbkMsT0FBTyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDM0IsT0FBTyxPQUFPLENBQUM7UUFDbkIsQ0FBQyxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUM5QixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUUsYUFBYTtRQUNiLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLEVBQUU7WUFDekQsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELE1BQU0sVUFBVSxHQUFHLGFBQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsMENBQUcsSUFBSSxDQUFDLENBQUM7WUFFcEYsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUMxQixPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDNUIsT0FBTyxPQUFPLENBQUM7YUFDbEI7WUFDRCxPQUFPLEtBQUssQ0FDUixlQUFlLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssS0FDckUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFDbkIsR0FBRyxDQUNOLENBQUM7U0FDTDtRQUVELGlDQUFpQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3hCLElBQUksT0FBMkIsQ0FBQztZQUNoQyxJQUFJLE9BQU8sS0FBSyxpQkFBaUIsRUFBRTtnQkFDL0IsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtnQkFDNUIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2FBQ2pDO1lBRUQsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUN2QixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkYsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBcUIsRUFBRSxFQUFFO29CQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTt3QkFDaEQsT0FBTyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7cUJBQy9FO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDbEMsT0FBTyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxPQUFPLENBQUM7YUFDbEI7U0FDSjtRQUVELHFDQUFxQztRQUNyQyxRQUFRLGFBQU8sQ0FBQyxNQUFNLDBDQUFFLEtBQUssRUFBRTtZQUMzQixLQUFLLFFBQVE7Z0JBQ1QsbUVBQW1FO2dCQUVuRSxNQUFNO1lBQ1YsS0FBSyxpQkFBaUI7Z0JBQ2xCO29CQUNJLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUF5QixDQUFDO29CQUV0RCxJQUFJLE9BQU8sS0FBSyxFQUFFLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxXQUFXLENBQUMsa0JBQWtCLEVBQUU7d0JBQ2pGLE9BQU8sT0FBTyxDQUFDO3FCQUNsQjtvQkFFRCxzREFBc0Q7b0JBQ3RELE1BQU0sV0FBVyxHQUNiLHVCQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQ3ZDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQ0FDdkMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBRS9DLElBQUksV0FBVyxFQUFFO3dCQUNiLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO3dCQUM3QixPQUFPLE9BQU8sQ0FBQztxQkFDbEI7aUJBQ0o7Z0JBQ0QsTUFBTTtZQUVWLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ2QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQStCLENBQUM7Z0JBRTVELElBQUksT0FBTyxLQUFLLEVBQUUsSUFBSSxPQUFPLEtBQUssT0FBTyxFQUFFO29CQUN2Qyw4REFBOEQ7b0JBQzlELE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDeEMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELElBQUksT0FBTyxLQUFLLEdBQUcsRUFBRTtvQkFDakIsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELElBQUksT0FBTyxLQUFLLDRCQUE0QixFQUFFO29CQUMxQyxNQUFNLDBCQUEwQixHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQztvQkFDekUsT0FBTyxDQUFDLE1BQU0sR0FBRywwQkFBMEIsQ0FBQztvQkFDNUMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELDREQUE0RDtnQkFDNUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRixPQUFPLE9BQU8sQ0FBQzthQUNsQjtZQUVELEtBQUssWUFBWTtnQkFDYjtvQkFDSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBb0IsQ0FBQztvQkFFakQsSUFBSSxPQUFPLEtBQUssRUFBRSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7d0JBQ3ZDLE9BQU8sT0FBTyxDQUFDO3FCQUNsQjtvQkFFRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvRCxJQUFJLFFBQVEsRUFBRTt3QkFDVixPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQzt3QkFDMUIsT0FBTyxPQUFPLENBQUM7cUJBQ2xCO29CQUVELE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDN0UsSUFBSSxrQkFBa0IsRUFBRTt3QkFDcEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQzt3QkFDcEMsT0FBTyxPQUFPLENBQUM7cUJBQ2xCO29CQUVELE1BQU0sVUFBVSxHQUFHLGdDQUFvQixFQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3pFLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQy9DLElBQUksTUFBTSxFQUFFO3dCQUNSLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO3dCQUN4QixPQUFPLE9BQU8sQ0FBQztxQkFDbEI7aUJBQ0o7Z0JBQ0QsTUFBTTtZQUVWLEtBQUssY0FBYyxDQUFDLENBQUM7Z0JBQ2pCLG1DQUFtQztnQkFDbkMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDeEUsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxPQUFPLENBQUM7YUFDbEI7WUFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUNYLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFnQixDQUFDO2dCQUU3QyxJQUFJLE9BQU8sS0FBSyxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sT0FBTyxDQUFDO2lCQUNsQjtnQkFFRCxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFO29CQUNqRCxPQUFPLE9BQU8sQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxPQUFPLEtBQUssWUFBWSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2pELE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDeEMsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUVELE1BQU0sV0FBVyxHQUNiLGlCQUFXLENBQUMsVUFBVSxDQUFDLE9BQWMsQ0FBQyxtQ0FDdEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUVwRixJQUFJLFdBQVcsRUFBRTtvQkFDYixPQUFPLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztvQkFDN0IsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUNELE1BQU07YUFDVDtZQUVELEtBQUssVUFBVTtnQkFDWDtvQkFDSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsTUFBa0IsQ0FBQztvQkFFL0Msb0RBQW9EO29CQUNwRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsVUFBcUMsQ0FBQztvQkFDL0QsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO3dCQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbEQsSUFBSSxRQUFRLEVBQUU7NEJBQ1YsT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7NEJBQzFCLE9BQU8sT0FBTyxDQUFDO3lCQUNsQjt3QkFFRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ3RFLElBQUksa0JBQWtCLEVBQUU7NEJBQ3BCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7NEJBQ3BDLE9BQU8sT0FBTyxDQUFDO3lCQUNsQjtxQkFDSjtpQkFDSjtnQkFDRCxNQUFNO1lBRVYsS0FBSyxpQkFBaUI7Z0JBQ2xCLE1BQU0sY0FBYyxHQUFJLE9BQU8sQ0FBQyxNQUEwQixDQUFDLGFBQWEsQ0FBQztnQkFDekUsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO29CQUM5QixNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDakUsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO29CQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDcEYsT0FBTyxPQUFPLENBQUM7aUJBQ2xCO2dCQUNELE1BQU07WUFFVixLQUFLLG9CQUFvQjtnQkFDckIsbURBQW1EO2dCQUNuRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsU0FBUyxFQUFHLE9BQU8sQ0FBQyxNQUE2QixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDcEcsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUMvQixPQUFPLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDcEYsT0FBTyxPQUFPLENBQUM7WUFFbkI7Z0JBQ0ksSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFO29CQUNoQixPQUFPLE9BQU8sQ0FBQztpQkFDbEI7Z0JBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN6QixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFFLE9BQU8sT0FBTyxDQUFDO2lCQUNsQjtTQUNSO1FBRUQsT0FBTyxLQUFLLENBQ1IsWUFBWSxPQUFPLGtCQUFrQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQ3JHLENBQUM7SUFDTixDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUN6RCxDQUFDO0lBRUYsY0FBYztJQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ2hCLElBQUksZUFBZSxFQUFFO1lBQ2pCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdEcsU0FBUyxDQUFDLFFBQVEsQ0FDZCx5Q0FBeUM7Z0JBQ3JDLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixJQUFJO2dCQUNKLElBQUk7Z0JBQ0osMEpBQTBKO2dCQUMxSixxQkFBcUI7Z0JBQ3JCLGVBQWU7Z0JBQ2YsR0FBRztnQkFDSCxJQUFJO2dCQUNKLGlCQUFpQjtnQkFDakIsY0FBYztnQkFDZCxHQUFHO2dCQUNILElBQUk7Z0JBQ0osb0JBQW9CO2dCQUNwQixJQUFJO2dCQUNKLEdBQUcsQ0FDVixDQUFDO1NBQ0w7YUFBTTtZQUNILFNBQVMsQ0FBQyxRQUFRLENBQ2QseUNBQXlDO2dCQUNyQyxJQUFJO2dCQUNKLElBQUk7Z0JBQ0osSUFBSTtnQkFDSiwwSkFBMEo7Z0JBQzFKLHFCQUFxQjtnQkFDckIsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDZixHQUFHO2dCQUNILElBQUk7Z0JBQ0osd0JBQXdCO2dCQUN4QixZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNmLEdBQUcsQ0FDVixDQUFDO1NBQ0w7S0FDSjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsT0FBZTtJQUNyQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUlELFNBQVMsZUFBZSxDQUNwQixTQUFvQixFQUNwQixZQUE0RCxFQUM1RCxrQkFBc0MsRUFDdEMsYUFBa0IsRUFDbEIsV0FBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQW1EO1FBQzNELElBQUksRUFBRSxjQUFjO1FBQ3BCLEtBQUssRUFBRSxZQUFZLENBQUMsWUFBWTtRQUNoQyxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLGFBQWE7S0FDckMsQ0FBQztJQUVGLGdCQUFJLEVBQ0EsTUFBdUMsRUFDdkMsU0FBUyxFQUNULEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBVyxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUN6RyxDQUFDO0lBRUYsT0FBTyxNQUF1QyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN0QixTQUFvQixFQUNwQixjQUFrRSxFQUNsRSxrQkFBc0MsRUFDdEMsYUFBa0IsRUFDbEIsV0FBbUI7SUFFbkIsTUFBTSxNQUFNLEdBQTBEO1FBQ2xFLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQztRQUN2RCxrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLGFBQWE7S0FDckMsQ0FBQztJQUVGLGdCQUFJLEVBQ0EsTUFBOEMsRUFDOUMsU0FBUyxFQUNULEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUNsRixDQUFDO0lBRUYsT0FBTyxNQUE4QyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUM5QixTQUFvQixFQUNwQixzQkFBMEYsRUFDMUYsa0JBQXNDLEVBQ3RDLGFBQWtCLEVBQ2xCLFdBQW1COztJQUVuQixNQUFNLE1BQU0sR0FBNkQ7UUFDckUsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixLQUFLLEVBQUUsNEJBQXNCLENBQUMsc0JBQXNCLG1DQUFJLEVBQUU7UUFDMUQsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxhQUFhO0tBQ3JDLENBQUM7SUFFRixnQkFBSSxFQUNBLE1BQWlELEVBQ2pELFNBQVMsRUFDVCxHQUFHLEVBQUUsQ0FDRCxhQUFhLENBQ1QsU0FBUyxFQUNULGFBQWEsRUFDYixzQkFBc0IsQ0FBQyxzQkFBc0IsRUFDN0MsV0FBVyxDQUNkLENBQUMsTUFBTSxDQUNmLENBQUM7SUFFRixPQUFPLE1BQWlELENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUNaLFNBQW9CLEVBQ3BCLElBQW9DLEVBQ3BDLGtCQUFzQyxFQUN0QyxhQUFrQixFQUNsQixXQUFtQjtJQUVuQixNQUFNLE1BQU0sR0FBb0U7UUFDNUUsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixrQkFBa0IsRUFBRSxrQkFBa0I7UUFDdEMsUUFBUTtZQUNKLE9BQU8sU0FBUyxDQUFDLENBQUMsMENBQTBDO1FBQ2hFLENBQUM7UUFDRCxDQUFDLGlCQUFpQixDQUFDLEVBQUUsYUFBYTtLQUNyQyxDQUFDO0lBRUYsZ0JBQUksRUFDQSxNQUF3RCxFQUN4RCxTQUFTLEVBQ1QsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFXLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQ3pGLENBQUM7SUFFRixPQUFPLE1BQXdELENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUNmLFNBQW9CLEVBQ3BCLGFBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGVBQXVCLEVBQ3ZCLGFBQXFCLEVBQ3JCLGFBQXlCLEVBQ3pCLFFBQWdCO0lBRWhCLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtRQUM3QixPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUNELFFBQVEsYUFBYSxDQUFDLElBQUksRUFBRTtRQUN4QixLQUFLLFFBQVE7WUFDVCxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDaEMsS0FBSyxLQUFLO1lBQ04sT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDO1FBQzdCLEtBQUssTUFBTTtZQUNQLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLLFNBQVM7WUFDVixPQUFPLG1CQUFPLEVBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLEtBQUssTUFBTTtZQUNQLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQztRQUM5QixLQUFLLFlBQVk7WUFDYixNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTs7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFHLGVBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLG1DQUFJLEVBQUUsQ0FBQztnQkFDckQsT0FBTyxpQkFBSyxFQUFDLDJDQUFvQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLGtCQUFVLENBQUMsZ0NBQW9CLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25GLE9BQU8sU0FBUyxDQUFDO2FBQ3BCO1lBQ0QsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsS0FBSyxjQUFjO1lBQ2YsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTNGLEtBQUssd0JBQXdCO1lBQ3pCLE9BQU8seUJBQXlCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXJHLEtBQUssZ0JBQWdCO1lBQ2pCLE9BQU8saUJBQWlCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdGLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDVCxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEMsb0JBQW9CO2dCQUNwQixPQUFPLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQzFGO2lCQUFNO2dCQUNILE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNsRjtTQUNKO1FBRUQsS0FBSyxRQUFRO1lBQ1QsT0FBTyxXQUFXLENBQ2QsU0FBUyxFQUNULFdBQVcsRUFDWCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLENBQUMsTUFBTSxFQUNwQixRQUFRLENBQ1gsQ0FBQztRQUVOLEtBQUssWUFBWTtZQUNiLE9BQU8sZUFBZSxDQUNsQixTQUFTLEVBQ1QsYUFBYSxFQUNiLFdBQVcsRUFDWCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsQ0FBQyxVQUFVLEVBQ3hCLFFBQVEsQ0FDWCxDQUFDO1FBQ04sS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssS0FBSyxDQUFDO1FBQ1gsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssSUFBSSxDQUFDO1FBQ1Y7WUFDSSxPQUFPLGFBQWEsQ0FBQztLQUM1QjtBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsaUJBQWlCLENBQ3RCLFNBQW9CLEVBQ3BCLGVBQXVCLEVBQ3ZCLGdCQUF3QixFQUN4QixlQUF3QjtJQUV4QixJQUFJLFVBQVUsR0FBSSxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxJQUFJLGVBQWUsRUFBRTtRQUNqQixlQUFlLEdBQUcsR0FBRywrQkFBbUIsRUFBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEYsVUFBVSxHQUFJLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsU0FBUyxDQUFDLFFBQVEsQ0FDZCwrQ0FBK0MsZUFBZSx3Q0FBd0MsVUFBVTs7dUJBRWpHLGdCQUFnQjtxQkFDbEIsZUFBZTs7O2VBR3JCLENBQ1YsQ0FBQztJQUVGLE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLGlCQUFzQjtJQUNwRCxPQUFPLENBQ0gsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUMxQyxDQUFDLGlCQUFpQixDQUFDLEtBQUssS0FBSywrQ0FBK0M7WUFDeEUsaUJBQWlCLENBQUMsS0FBSyxLQUFLLGdEQUFnRCxDQUFDLENBQ3BGLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3BCLFNBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLGFBQWtCLEVBQ2xCLGVBQW1DLEVBQ25DLGdCQUFrQztJQUVsQyxJQUFJLFVBQVUsQ0FBQztJQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksV0FBVyxFQUFFO1FBQ3ZDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxlQUFlLENBQUMsQ0FBQztLQUM3RztTQUFNO1FBQ0gsVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekQ7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQ2hCLFNBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLGFBQWtCLEVBQ2xCLGVBQW1DLEVBQ25DLGFBQXFCLEVBQ3JCLGdCQUFrQyxFQUNsQyxVQUFrQjtJQUVsQixNQUFNLE1BQU0sR0FBUTtRQUNoQixLQUFLLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztRQUNoRyxrQkFBa0IsRUFBRSxVQUFVO1FBQzlCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxhQUFhO1FBQ2xDLFFBQVEsRUFBRSxhQUFhO0tBQzFCLENBQUM7SUFFRixLQUFLLE1BQU0sYUFBYSxJQUFJLGdCQUFnQixDQUFDLGNBQWMsRUFBRTtRQUN6RCxnQkFBSSxFQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUNsQyxVQUFVLENBQ04sU0FBUyxFQUNULGFBQWEsRUFDYixXQUFXLEVBQ1gsYUFBYSxDQUFDLElBQUksRUFDbEIsYUFBYSxFQUNiLGFBQWEsQ0FBQyxLQUFLLEVBQ25CLEdBQUcsVUFBVSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FDeEMsQ0FDSixDQUFDO0tBQ0w7SUFFRCw0QkFBNEI7SUFDNUIsZ0JBQUksRUFBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWpHLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDbEMsZ0JBQUksRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRTs7WUFDOUIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFNLENBQUMsTUFBTSwwQ0FBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRWhFLDZDQUE2QztZQUM3QyxJQUFJLFlBQVksR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJELElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2YsdUNBQXVDO2dCQUN2QyxZQUFZLEdBQUcsZUFBUyxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQywwQ0FBRSxNQUFNLENBQUM7YUFDekU7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLDhGQUE4RjtnQkFDOUYsWUFBWSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGFBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxPQUFPLEdBQUU7b0JBQ3hCLFlBQVksR0FBRyxTQUFTLENBQUM7aUJBQzVCO2FBQ0o7WUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNmLFNBQVMsQ0FBQyxRQUFRLENBQ2QsR0FBRyxNQUFNLENBQUMsa0JBQWtCLHdCQUF3QixNQUFNLENBQUMsTUFBTSxPQUFPLFVBQVUsSUFBSSxDQUN6RixDQUFDO2FBQ0w7WUFDRCxPQUFPLFlBQVksQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQXVCRDs7Ozs7R0FLRztBQUNILFNBQVMsd0JBQXdCLENBQUMsb0JBQTJCO0lBQ3pELElBQUksSUFBSSxHQUFvQixvQkFBNEIsQ0FBQyxJQUFJLENBQUM7SUFDOUQsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDdkQsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzdDLElBQUksR0FBRyxjQUFjLENBQUM7U0FDekI7YUFBTSxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDNUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztTQUNqQjthQUFNLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3RELElBQUksR0FBRyxnQkFBZ0IsQ0FBQztTQUMzQjthQUFNLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQzlELElBQUksR0FBRyx3QkFBd0IsQ0FBQztTQUNuQzthQUFNLElBQ0gsT0FBTyxZQUFZLEtBQUssUUFBUTtZQUNoQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ3hGO1lBQ0UsSUFBSSxHQUFHLFFBQVEsQ0FBQztTQUNuQjthQUFNLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ3pDLElBQUksR0FBRyxRQUFRLENBQUM7U0FDbkI7S0FDSjtTQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUMzQixJQUFJLEdBQUcsaUJBQWlCLENBQUM7S0FDNUI7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3BCLFNBQW9CLEVBQ3BCLGFBQWtCLEVBQ2xCLFdBQW1CLEVBQ25CLGVBQXVCLEVBQ3ZCLGFBQXFCLEVBQ3JCLG9CQUEyQixFQUMzQixTQUFpQjtJQUVqQixNQUFNLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFaEYsUUFBUSx3QkFBd0IsRUFBRTtRQUM5QixLQUFLLGNBQWM7WUFDZixPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUM1QyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsSUFBSSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQ3hGLENBQUM7UUFFTixLQUFLLE1BQU07WUFDUCxtQkFBbUI7WUFDbkIsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDMUMsT0FBTyxhQUFhLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztRQUVQLEtBQUssZ0JBQWdCO1lBQ2pCLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzVDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLElBQUksS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUMxRixDQUFDO1FBRU4sS0FBSyx3QkFBd0I7WUFDekIsT0FBTyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDNUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxHQUFHLFNBQVMsSUFBSSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQ2xHLENBQUM7UUFFTixLQUFLLFFBQVE7WUFDVCxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUM1RCxPQUFPLFdBQVcsQ0FDZCxTQUFTLEVBQ1QsV0FBVyxFQUNYLGFBQWEsRUFDYixlQUFlLEVBQ2YsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixHQUFHLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FDOUIsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBRVAsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxJQUFJLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQztRQUNWLEtBQUssSUFBSSxDQUFDO1FBQ1YsS0FBSyxLQUFLLENBQUM7UUFDWCxLQUFLLEtBQUssQ0FBQztRQUNYLEtBQUssSUFBSTtZQUNMLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxRCxLQUFLLFFBQVE7WUFDVCxPQUFPLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUM1QyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO29CQUM5RCxPQUFPLFdBQVcsQ0FBQztpQkFDdEI7cUJBQU07b0JBQ0gsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO2lCQUM3QjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVA7WUFDSSxJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ25DLE9BQU8sRUFBRSxDQUFDO2FBQ2I7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDM0M7QUFDTCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDM0IsT0FBMEQ7SUFFMUQsT0FBTyxDQUFDLENBQUUsT0FBa0MsQ0FBQyxjQUFjLENBQUM7QUFDaEUsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxNQUFXLEVBQUUsYUFBNEI7O0lBQ3RGLElBQUksVUFBZSxDQUFDO0lBQ3BCLElBQUksYUFBYSxDQUFDLE1BQU0sRUFBRTtRQUN0QixVQUFVLEdBQUcsV0FBVyxDQUNwQixTQUFTLEVBQ1QsYUFBYSxDQUFDLElBQUksRUFDbEIsTUFBTSxFQUNOLEVBQUUsRUFDRCxhQUFxQixDQUFDLFFBQVEsRUFDL0IsYUFBYSxDQUFDLE1BQU0sRUFDbkIsYUFBcUIsQ0FBQyxrQkFBa0IsQ0FDNUMsQ0FBQztLQUNMO1NBQU0sSUFBSSxhQUFhLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtRQUMvQyxVQUFVLEdBQUcsVUFBVSxDQUNuQixTQUFTLEVBQ1QsTUFBTSxFQUNOLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLEVBQUUsRUFDRCxhQUFxQixDQUFDLFFBQVEsRUFDL0IsbUJBQWEsQ0FBQyxLQUFLLG1DQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQ2xELGFBQXFCLENBQUMsa0JBQWtCLENBQzVDLENBQUM7S0FDTDtTQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRTtRQUNqQyxVQUFVLEdBQUcsZUFBZSxDQUN4QixTQUFTLEVBQ1QsTUFBTSxFQUNOLGFBQWEsQ0FBQyxJQUFJLEVBQ2xCLEVBQUUsRUFDRCxhQUFxQixDQUFDLFFBQVEsRUFDL0IsYUFBYSxDQUFDLFVBQVUsRUFDdkIsYUFBcUIsQ0FBQyxrQkFBa0IsQ0FDNUMsQ0FBQztLQUNMO1NBQU07UUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDdkM7SUFFRCxRQUFRLE9BQU8sVUFBVSxFQUFFO1FBQ3ZCLEtBQUssUUFBUTtZQUNULDJDQUEyQztZQUMzQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsTUFBTTtRQUNWLEtBQUssU0FBUztZQUNWLDJDQUEyQztZQUMzQyxVQUFVLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckMsTUFBTTtRQUNWLEtBQUssUUFBUTtZQUNULFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwQyxNQUFNO1FBQ1Y7WUFDSSxhQUFhO1lBQ2IsTUFBTTtLQUNiO0lBRUQsVUFBVSxDQUFDLGtCQUFrQixHQUFJLGFBQXFCLENBQUMsa0JBQWtCLENBQUM7SUFDMUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEUsVUFBVSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxJQUFJLE9BQU8sRUFBRSxFQUFFLDJDQUFvQixDQUFDLENBQUM7SUFDcEYsVUFBVSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQy9DLFVBQVUsQ0FBQyxRQUFRLEdBQUksYUFBcUIsQ0FBQyxRQUFRLENBQUM7SUFFdEQsSUFBSTtRQUNBLGdCQUFJLEVBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSw4QkFBOEIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDekc7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLG1IQUFtSDtLQUN0SDtJQUVELE9BQU8sVUFBd0IsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxTQUFTO0lBR1g7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsTUFBMEI7O1FBQ3JDLElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsRUFBRTtZQUN4QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9FLElBQUksRUFBRSxNQUFNO2dCQUNaLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7YUFDckQsQ0FBQyxDQUFDLENBQUM7WUFFSixJQUFJLENBQUMsbUJBQW1CLEdBQUcsNEJBQWdCLEVBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ2xHO1FBRUQsT0FBTyxVQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLG1DQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFDdkMsc0JBQXNCLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQscUJBQXFCLENBQUMsa0JBQXNDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQscUJBQXFCLENBQUMsa0JBQXNDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsc0JBQXNCLENBQUMsa0JBQXNDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsdUJBQXVCLENBQUMsa0JBQXNDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsMEJBQTBCLENBQUMsa0JBQXNDO1FBQzdELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsd0JBQXdCLENBQUMsa0JBQXNDO1FBQzNELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNmLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztTQUNqRjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxrQkFBc0M7UUFDckQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFVRCxPQUFPLENBQ0gsUUFBcUIsRUFDckIsR0FBa0Q7UUFFbEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sR0FBRyxFQUFFO2dCQUNSLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsRUFBRTtvQkFDaEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQzVDLFVBQWtCLENBQUMsa0JBQWtCLEVBQ3RDLFVBQVUsRUFDVixHQUFHLENBQ04sQ0FBQztvQkFDRixJQUFJLGdCQUFnQixFQUFFO3dCQUNsQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDNUM7b0JBQ0QsT0FBTyxpQkFBaUIsQ0FBQztnQkFDN0IsQ0FBQyxFQUFFLEVBQWlCLENBQUMsQ0FBQztnQkFDdEIseUJBQWEsRUFBQyxTQUFTLEVBQUUsTUFBYSxDQUFDLENBQUM7Z0JBQ3hDLHlCQUFhLEVBQUMsU0FBUyxFQUFFLG9CQUEyQixDQUFDLENBQUM7Z0JBQ3RELE9BQU8sU0FBcUQsQ0FBQztZQUNqRSxDQUFDLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUUsQ0FBQztTQUN0RjtJQUNMLENBQUM7SUFRRCxZQUFZLFdBQXdCLEVBQUUsZUFBa0M7UUFMaEUsc0JBQWlCLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFNaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0lBQzNDLENBQUM7SUFFRCxtQkFBbUIsQ0FDZixrQkFBc0MsRUFDdEMsVUFBbUcsRUFDbkcsR0FBMEQ7UUFFMUQsSUFBSSxTQUFTLEdBQThCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDekIsTUFBTSxXQUFXLEdBQ2IsT0FBTyxVQUFVLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3RHLElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtnQkFDM0IsU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDN0Q7U0FDSjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBZTtRQUNwQixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FBQyxJQUFZO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLGlCQUFLLEVBQUMsMkNBQW9CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEQsT0FBTyx1QkFBVyxFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXlCLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVTs7UUFDdkUsT0FBTyx5QkFBTyxFQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsbUNBQUksRUFBRSxDQUFDO0lBQ3RFLENBQUM7Q0FDSjtBQUlELFNBQVMsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxrQkFBc0M7SUFDbkYsT0FBTyxHQUFHLEVBQUU7UUFDUixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLGtCQUFrQixhQUFhLENBQUMsQ0FBQztZQUNuRSxVQUFVLEdBQUcsRUFBZ0IsQ0FBQztTQUNqQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLGlDQUFpQyxDQUN0QyxTQUFvQixFQUNwQiw2QkFBMkQ7SUFFM0QsT0FBTyxHQUFHLEVBQUUsQ0FDUixNQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDMUYsTUFBTSxnQkFBZ0IsR0FBRyw2QkFBNkIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwRSxnQkFBSSxFQUNBLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsR0FBRyxFQUFFOztZQUNELHdHQUF3RztZQUN4RyxTQUFDLGVBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxtQ0FDOUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQUU7U0FBQSxDQUM5RCxDQUFDO1FBQ0YsT0FBTywwQkFBMEIsQ0FBQztJQUN0QyxDQUFDLEVBQUUsRUFBcUYsQ0FBQyxDQUFDO0FBQ2xHLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsbUJBQXdCO0lBQ3RFLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDO0lBRTFELE9BQU8sR0FBRyxFQUFFLENBQ1IsdUJBQXVCLENBQ25CLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsaUJBQWlCLGFBQWpCLGlCQUFpQixjQUFqQixpQkFBaUIsR0FBSSxTQUFTLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQ3hGLENBQUM7QUFDVixDQUFDO0FBRUQsU0FBUyw4QkFBOEIsQ0FDbkMsU0FBb0IsRUFDcEIsZ0JBQWtELEVBQ2xELGNBQW1CO0lBRW5CLE9BQU8sR0FBRyxFQUFFO1FBQ1IsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1FBRXJELGdIQUFnSDtRQUNoSCwwQ0FBMEM7UUFDMUMsSUFBSSxXQUFXLENBQUM7UUFDaEIsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekUsV0FBVyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztTQUM5QzthQUFNO1lBQ0gsV0FBVyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEQ7UUFFRCxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUUsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7WUFDckMsVUFBVSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7WUFDL0IsVUFBVSxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xFLFVBQVUsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsV0FBVyxhQUFYLFdBQVcsY0FBWCxXQUFXLEdBQUksRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsU0FBb0IsRUFBRSxNQUFXLEVBQUUsY0FBK0I7SUFDL0YsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUVuRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUMzQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDbkUsZ0JBQUksRUFBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsQ0FDekQsU0FBUyxDQUFDLG1CQUFtQixDQUN4QixVQUF5QixDQUFDLGtCQUFrQixFQUM3QyxVQUFVLEVBQ1YsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUNwRixDQUNKLENBQUM7U0FDTDtRQUNELE9BQU8saUJBQWlCLENBQUM7SUFDN0IsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHNCQUFzQixDQUFDLFNBQW9CLEVBQUUsa0JBQXNDO0lBQ3hGLE1BQU0sd0JBQXdCLEdBQUcsa0JBQXFDLENBQUM7SUFFdkUsZ0JBQUksRUFBQyx3QkFBd0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUVqRyxnQkFBSSxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVsSCxnQkFBSSxFQUFDLHdCQUF3QixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUVsSCxnQkFBSSxFQUNBLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUM1RSxDQUFDO0lBRUYsT0FBTyx3QkFBd0IsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFvQixFQUFFLFlBQTBCO0lBQ3RFLE1BQU0sa0JBQWtCLEdBQUcsWUFBb0MsQ0FBQztJQUVoRSxnQkFBSSxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsZ0JBQUksRUFBQyxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUUzRixNQUFNLDhCQUE4QixHQUFHLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztJQUM5RSxnQkFBSSxFQUNBLGtCQUFrQixFQUNsQiwyQkFBMkIsRUFDM0IsaUNBQWlDLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLENBQy9FLENBQUM7SUFFRixPQUFPLGtCQUFrQixDQUFDO0FBQzlCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQW9CLEVBQUUsWUFBMEI7SUFDdEUsTUFBTSxrQkFBa0IsR0FBRyxZQUFvQyxDQUFDO0lBRWhFLGdCQUFJLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUNsRyxnQkFBSSxFQUFDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBRTNGLE1BQU0sOEJBQThCLEdBQUcsWUFBWSxDQUFDLHlCQUF5QixDQUFDO0lBQzlFLGdCQUFJLEVBQ0Esa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixpQ0FBaUMsQ0FBQyxTQUFTLEVBQUUsOEJBQThCLENBQUMsQ0FDL0UsQ0FBQztJQUVGLE9BQU8sa0JBQWtCLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsaUJBQWlCLENBQUMsU0FBb0IsRUFBRSxhQUE0QjtJQUN6RSxNQUFNLG1CQUFtQixHQUFHLGFBQTJCLENBQUM7SUFFeEQsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtRQUN4QyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztJQUVILGdCQUFJLEVBQUMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRXZGLGdCQUFJLEVBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQzFGLGdCQUFJLEVBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNsSCxnQkFBSSxFQUNBLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsb0JBQTZCLEVBQUUseUJBQXlCLENBQUMsQ0FDNUYsQ0FBQztJQUVGLGdCQUFJLEVBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUN0QyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU87U0FDdEIsTUFBTSxDQUNILENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDVixTQUFTLENBQUMsT0FBTztRQUNqQixDQUFDLFNBQVMsQ0FBQyxVQUFVLEtBQUssYUFBYSxDQUFDLGtCQUFrQjtZQUN0RCxTQUFTLENBQUMsVUFBVSxLQUFLLGNBQWMsYUFBYSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FDdEY7U0FDQSxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUUsQ0FBQztRQUM1RSxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLEVBQUUsRUFBMkIsQ0FBQyxDQUN0QyxDQUFDO0lBRUYsbUJBQW1CLENBQUMsV0FBVyxHQUFHLENBQUMsWUFBb0IsRUFBRSxxQkFBK0IsRUFBRSxFQUFFO1FBQ3hGLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3ZFLElBQUkscUJBQXFCLEVBQUU7WUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDeEc7YUFBTTtZQUNILE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUMxQjtJQUNMLENBQUMsQ0FBQztJQUVGLE9BQU8sbUJBQW1CLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsZUFBZSxDQUFDLFNBQW9CLEVBQUUsV0FBd0I7SUFDbkUsTUFBTSxpQkFBaUIsR0FBRyxXQUF1QixDQUFDO0lBRWxELGdCQUFJLEVBQUMsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRW5GLGdCQUFJLEVBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRTs7UUFDdkMsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFNUYsT0FBTyxlQUFTLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLG1DQUFJLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN6RyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8saUJBQWlCLENBQUM7QUFDN0IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMseUJBQXlCLENBQzlCLFNBQW9CLEVBQ3BCLHFCQUF3RTs7SUFFeEUsTUFBTSwyQkFBMkIsR0FBRyxxQkFBMkMsQ0FBQztJQUVoRiwyQkFBMkIsQ0FBQyxxQkFBcUIsR0FBRyxpQ0FBMkIsQ0FBQyxxQkFBcUIsbUNBQUksRUFBRSxDQUFDO0lBRTVHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQ2hELE1BQU0sY0FBYyxHQUFHLGVBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWTthQUNsRCxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsS0FBSyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsMENBQzNGLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUUsMkJBQTJCLENBQUMsWUFBWSxHQUFHLGVBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxZQUFZLE1BQUssR0FBRyxDQUFDO1FBQ2hGLDJCQUEyQixDQUFDLGNBQWMsR0FBRyxvQkFBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLElBQUksbUNBQUksRUFBRSxDQUFDO0tBQzNFO0lBRUQsZ0JBQUksRUFDQSwyQkFBMkIsRUFDM0IsWUFBWSxFQUNaLGlCQUFpQixDQUFDLFNBQVMsRUFBRyxxQkFBNEMsQ0FBQyxjQUFjLENBQUMsQ0FDN0YsQ0FBQztJQUVGLGdCQUFJLEVBQUMsMkJBQTJCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFFdkcsT0FBTywyQkFBMkIsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxTQUFvQixFQUFFLGVBQWdDO0lBQy9FLE1BQU0scUJBQXFCLEdBQUcsZUFBK0IsQ0FBQztJQUU5RCxnQkFBSSxFQUFDLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUUzRixnQkFBSSxFQUFDLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNqRCxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUMzRyxDQUFDO1FBRUYseUdBQXlHO1FBQ3pHLDRFQUE0RTtRQUM1RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxRQUFRLENBQUMseUNBQXlDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7U0FDckc7UUFFRCwrQ0FBK0M7UUFDL0MsT0FBTyxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFFLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLHFCQUFxQixDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxTQUFvQixFQUFFLFNBQW9CO0lBQzdELE1BQU0sZUFBZSxHQUFHLFNBQW1CLENBQUM7SUFFNUMsSUFBSSxlQUFlLENBQUMsVUFBVSxFQUFFO1FBQzVCLGdCQUFJLEVBQUMsZUFBZSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUNqRztJQUVELElBQUksZUFBZSxDQUFDLFVBQVUsRUFBRTtRQUM1QixnQkFBSSxFQUFDLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDakc7SUFFRCxnQkFBSSxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztJQUVyRyxnQkFBSSxFQUFDLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQ3RDOzs7Ozs7Ozs7Ozs7VUFZRTtRQUVGLE1BQU0sd0JBQXdCLEdBQUcsZ0NBQW9CLEVBQUMsU0FBUyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO1FBRTVELE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlFLE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWpGLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxxQkFBcUIsRUFBRTtZQUN0RCxJQUNJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUN0QixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ1gsVUFBVSxDQUFDLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJO2dCQUM3QyxVQUFVLENBQUMsU0FBUyxLQUFLLG9CQUFvQixDQUFDLFNBQVMsQ0FDOUQsRUFDSDtnQkFDRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQzthQUNuRDtTQUNKO1FBRUQsT0FBTyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxzQkFBc0IsQ0FDM0IsU0FBb0IsRUFDcEIsa0JBQW1EO0lBRW5ELE1BQU0sd0JBQXdCLEdBQUcsa0JBQXFDLENBQUM7SUFFdkUsZ0JBQUksRUFDQSx3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLEdBQUcsRUFBRTs7UUFDRCw0QkFBUyxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQ0FDekQsU0FBUyxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQ0FDMUQsU0FBUyxDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQztLQUFBLENBQ3BFLENBQUM7SUFFRixnQkFBSSxFQUFDLHdCQUF3QixFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDL0MsZ0ZBQWdGO1FBQ2hGLE1BQU0sd0JBQXdCLEdBQzFCLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RHLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUcsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQztRQUVyRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RSxNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUVqRixLQUFLLE1BQU0sb0JBQW9CLElBQUkscUJBQXFCLEVBQUU7WUFDdEQsSUFDSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDdEIsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUNYLFVBQVUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLENBQUMsSUFBSTtnQkFDN0MsVUFBVSxDQUFDLFNBQVMsS0FBSyxvQkFBb0IsQ0FBQyxTQUFTLENBQzlELEVBQ0g7Z0JBQ0Usb0JBQW9CLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDbkQ7U0FDSjtRQUVELE9BQU8sdUJBQXVCLENBQUMsU0FBUyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDeEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLHdCQUF3QixDQUFDO0FBQ3BDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsY0FBOEI7SUFDNUUsTUFBTSxvQkFBb0IsR0FBRyxjQUE2QixDQUFDO0lBRTNELGdCQUFJLEVBQUMsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLGdCQUFJLEVBQ0Esb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixTQUFTLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxvQkFBNkIsRUFBRSx5QkFBeUIsQ0FBQyxDQUM3RixDQUFDO0lBQ0YsZ0JBQUksRUFBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFekYsT0FBTyxvQkFBb0IsQ0FBQztBQUNoQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxTQUFvQixFQUFFLGlCQUFvQztJQUNyRixNQUFNLHVCQUF1QixHQUFHLGlCQUFtQyxDQUFDO0lBRXBFLGdCQUFJLEVBQUMsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFFL0YsT0FBTyx1QkFBdUIsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixPQUFPLENBQUMsV0FBd0I7SUFDNUMsbUJBQW1CO0lBQ25CLE1BQU0sZUFBZSxHQUFzQjtRQUN2QyxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsU0FBUztRQUN2QyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1FBQzNDLFVBQVUsRUFBRSwyQ0FBb0I7UUFDaEMsV0FBVyxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRVQseUVBQXlFO0lBQ3pFLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsMkNBQW9CLENBQUM7S0FDakQ7SUFFRCxZQUFZO0lBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRTlELGdCQUFJLEVBQ0EsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLHNCQUFzQixDQUFDLENBQ2pGLENBQUM7SUFDRixnQkFBSSxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDekcsZ0JBQUksRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLGdCQUFJLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUM1RyxnQkFBSSxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLGdCQUFJLEVBQUMsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztJQUMvRyxnQkFBSSxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDbEgsZ0JBQUksRUFDQSxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUscUJBQXFCLENBQUMsQ0FDaEYsQ0FBQztJQUVGLGVBQWUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxXQUFXLENBQUksSUFBWTtRQUM5RCxNQUFNLGdCQUFnQixHQUFHLGFBQWEsQ0FBSSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQ3pCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxRTtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQTVDRCwwQkE0Q0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JqREQsZ0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qiw4Q0FBNEI7Ozs7Ozs7Ozs7O0FDUTVCLDRDQUFnRjtBQUF2RSxtSEFBVTtBQUNuQiw2Q0FBa0Y7QUFBekUsc0hBQVc7QUFDcEIsc0RBQXlIO0FBQWhILDhJQUFvQixRQUFxQjtBQU9sRCxTQUFTLE9BQU8sQ0FBQyxNQUFjLEVBQUUsS0FBYTtJQUMxQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEcsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFhO0lBQzlDLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWMsRUFBRSxTQUFpQjtJQUMxRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFGRCxvQ0FFQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDekQsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDbEUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRkQsb0RBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDakUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRkQsa0RBRUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixLQUFLLENBQUMsVUFBNkIsRUFBRSxjQUFzQjtJQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFO1FBQ2pDLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBOEIsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUN2RixHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6QixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNWO0lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNqQixPQUFPLGNBQWMsQ0FBQztLQUN6QjtJQUNELE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsSUFBSSxTQUFTLEVBQUU7UUFDWCxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztLQUN4QztTQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQyx3RUFBd0U7UUFDeEUsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsR0FBRyxZQUFZLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQ3hEO1NBQU07UUFDSCxPQUFPLGNBQWMsQ0FBQztLQUN6QjtBQUNMLENBQUM7QUFyQkQsc0JBcUJDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLE9BQU8sQ0FDbkIsVUFBNkIsRUFDN0IsWUFBZ0MsRUFDaEMsU0FBa0I7O0lBRWxCLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7UUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDMUIsVUFBVSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0Y7UUFFRCxtRUFBbUU7UUFDbkUsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QixrRkFBa0Y7WUFDbEYsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQzNFLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0QsSUFBSSxjQUFjLEVBQUU7WUFDaEIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQ3hHO1FBRUQsc0dBQXNHO1FBQ3RHLE9BQU8sU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQztJQUVGLE9BQU8sa0JBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FDYixLQUFLLENBQUMsR0FBRyxFQUNWLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMxQiw4REFBOEQ7UUFDOUQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sVUFBVSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFckMsSUFBSSxJQUFJLEVBQUU7WUFDTixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1lBQzNELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQyxFQUFFLEVBQWMsQ0FBQywwQ0FDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUE3Q0QsMEJBNkNDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix1QkFBdUIsQ0FDbkMscUJBQW9EO0lBRXBELE9BQU8sQ0FDSCxDQUFDLENBQUMscUJBQXFCLElBQUkscUJBQXFCLENBQUMsS0FBSyxLQUFLLGFBQWEsSUFBSSxDQUFDLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUNqSCxDQUFDO0FBQ04sQ0FBQztBQU5ELDBEQU1DO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLEtBQWE7SUFDakMsT0FBTztRQUNILFNBQVM7WUFDTCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTztZQUNILE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxRQUFRO1lBQ0osT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQztLQUNKLENBQUM7QUFDTixDQUFDO0FBWkQsMEJBWUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLElBQUksQ0FBK0IsTUFBWSxFQUFFLFFBQWEsRUFBRSxJQUFxQjtJQUNqRyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsSUFBSSxNQUFNLEdBQStCLE9BQU8sQ0FBQztJQUVqRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7UUFDcEMsVUFBVSxFQUFFLElBQUk7UUFFaEIsR0FBRztZQUNDLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtnQkFDcEIsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO2FBQ25CO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztRQUVELEdBQUcsQ0FBQyxLQUFnQjtZQUNoQixNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLENBQUM7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDO0FBbEJELG9CQWtCQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGlCQUFpQixDQUFJLEtBQWUsRUFBRSxRQUFpQjtJQUNuRSxNQUFNLEtBQUssR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUV4RCxPQUFPLFNBQVMsSUFBSSxDQUFDLEtBQWlCO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakMsSUFBSSxRQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUcsUUFBUSxDQUFDLE1BQUssS0FBSyxFQUFFO1lBQy9CLE9BQU8sT0FBTyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFFBQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUU7Z0JBQ3BDLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sYUFBYSxLQUFLLEtBQUssQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztBQUNOLENBQUM7QUFwQkQsOENBb0JDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsYUFBYSxDQUF3QyxLQUFlLEVBQUUsUUFBVztJQUM3RixNQUFNLFNBQVMsR0FBc0IsTUFBTSxRQUFRLEVBQUUsQ0FBQztJQUV0RCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUNsQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzNHO1NBQU07UUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO0tBQzdEO0lBQ0QsT0FBTyxLQUE2QixDQUFDO0FBQ3pDLENBQUM7QUFURCxzQ0FTQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdCQUFnQixDQUM1QixVQUF1QixFQUN2QixHQUFHLGlCQUF1RTtJQUUxRSxPQUFPLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFOztRQUN0RSxLQUFLLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksY0FBYyxFQUFFO1lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsYUFBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsbUNBQUksTUFBTSxDQUFDO1lBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ2pDO1lBRUQsTUFBTSxtQkFBbUIsR0FBRyxXQUFXO2lCQUNsQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQWMsRUFBRTs7Z0JBQy9CLGFBQWEsQ0FBQyxJQUFJLEdBQUcsYUFBTyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLG1DQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBRWxGLGFBQXFCLENBQUMsa0JBQWtCLEdBQUcsYUFBYSxDQUFDLFNBQVM7b0JBQy9ELENBQUMsQ0FBQyxHQUFHLGdCQUFnQixJQUFJLGFBQWEsQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLFNBQVMsRUFBRTtvQkFDeEUsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVqRCxhQUFxQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBRXZDLE9BQU8sYUFBMkIsQ0FBQztZQUN2QyxDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUNILENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDWCxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDMUIsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQ25CLGtCQUFrQixDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSTtnQkFDM0Msa0JBQWtCLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxTQUFTLENBQzVELENBQ1IsQ0FBQztZQUVOLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUM7U0FDekQ7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDLEVBQUUsRUFBa0MsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFyQ0QsNENBcUNDOzs7Ozs7Ozs7OztBQ3hTRCx5Q0FBa0M7QUFFbEM7Ozs7OztHQU1HO0FBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxVQUF1QixFQUFFLEtBQVU7O0lBQzlELElBQUksTUFBOEIsQ0FBQztJQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLFlBQVk7WUFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBVTtTQUM1RixDQUFDO0tBQ0w7U0FBTSxJQUFJLFdBQUssQ0FBQyxTQUFTLHFEQUFJLEVBQUU7UUFDNUIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTtTQUMzQixDQUFDO0tBQ0w7U0FBTSxJQUFJLFdBQUssQ0FBQyxRQUFRLHFEQUFJLEVBQUU7UUFDM0IsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEYsTUFBTSxHQUFHO2dCQUNMLElBQUksRUFBRSxZQUFZO2dCQUNsQixVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTthQUM5QixDQUFDO1NBQ0w7YUFBTTtZQUNILE1BQU0sR0FBRztnQkFDTCxJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRTthQUMxQixDQUFDO1NBQ0w7S0FDSjtTQUFNLElBQUksV0FBSyxDQUFDLEtBQUsscURBQUksRUFBRTtRQUN4QixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsS0FBSztZQUNYLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO1NBQ3ZCLENBQUM7S0FDTDtTQUFNLElBQUksV0FBSyxDQUFDLE9BQU8scURBQUksRUFBRTtRQUMxQixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO1NBQ3pCLENBQUM7S0FDTDtTQUFNLElBQUksV0FBSyxDQUFDLE1BQU0scURBQUksRUFBRTtRQUN6QixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO1NBQ3hCLENBQUM7S0FDTDtTQUFNLElBQUksV0FBSyxDQUFDLFNBQVMscURBQUksRUFBRTtRQUM1QixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO1NBQ3hCLENBQUM7S0FDTDtTQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDOUIsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDbkIsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQ3hDLE1BQU0sR0FBRztZQUNMLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsY0FBYyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQzlCLENBQUM7S0FDTDtTQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7UUFDL0IsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDckIsQ0FBQztLQUNMO1NBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUM5QixNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsTUFBTTtTQUNmLENBQUM7S0FDTDtTQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7UUFDdEMsTUFBTSxHQUFHO1lBQ0wsSUFBSSxFQUFFLGNBQWM7WUFDcEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQzVCLENBQUM7S0FDTDtTQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyx3QkFBd0IsRUFBRTtRQUNoRCxNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsd0JBQXdCO1lBQzlCLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ3RDLENBQUM7S0FDTDtTQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTtRQUM3RCxNQUFNLEdBQUc7WUFDTCxJQUFJLEVBQUUsUUFBUTtZQUNkLE1BQU0sRUFBRSw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFxQjtTQUMvRSxDQUFDO0tBQ0w7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxVQUF1QixFQUFFLEtBQVU7SUFDN0QsSUFBSSxNQUE4QixDQUFDO0lBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakQsUUFBUSxnQkFBZ0IsRUFBRTtRQUN0QixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssUUFBUTtZQUNULE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwRixNQUFNLEdBQUc7b0JBQ0wsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO2lCQUMvQixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsTUFBTSxHQUFHO29CQUNMLElBQUksRUFBRSxRQUFRO29CQUNkLE1BQU0sRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFO2lCQUMzQixDQUFDO2FBQ0w7WUFDRCxNQUFNO1FBQ1YsS0FBSyxTQUFTLENBQUM7UUFDZixLQUFLLFNBQVM7WUFDVixNQUFNLEdBQUc7Z0JBQ0wsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7YUFDeEIsQ0FBQztZQUNGLE1BQU07UUFFVixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssUUFBUTtZQUNULElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEMsTUFBTSxHQUFHO29CQUNMLElBQUksRUFBRSxLQUFLO29CQUNYLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO2lCQUN2QixDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsTUFBTSxHQUFHO29CQUNMLElBQUksRUFBRSxTQUFTO29CQUNmLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFO2lCQUMzQixDQUFDO2FBQ0w7WUFDRCxNQUFNO1FBQ1YsS0FBSyxRQUFRLENBQUM7UUFDZDtZQUNJLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTTtLQUNiO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUV2SDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDBCQUEwQixDQUMvQixVQUF1QixFQUN2QixrQkFBdUIsRUFDdkIsaUJBQWtDO0lBRWxDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7U0FDMUIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDO1NBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtnQkFDeEIsTUFBTSxhQUFhLEdBQUcsbUJBQU8sRUFBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxhQUFhLEVBQUU7b0JBQ2YsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDM0IsbUZBQW1GO3dCQUNuRixnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNsRDtpQkFDSjthQUNKO1lBQ0QsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDZCQUE2QixDQUNsQyxVQUF1QixFQUN2QixjQUFtQjtJQVNuQixJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVEsRUFBRTtRQUNwQyxPQUFPLGNBQWMsQ0FBQztLQUN6QjtTQUFNLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQzNDLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxvQkFBb0I7WUFDcEIsTUFBTSxPQUFPLEdBQXFCO2dCQUM5QixJQUFJLEVBQUUsY0FBYyxDQUFDLEtBQUs7Z0JBQzFCLGNBQWMsRUFBRSxFQUFXO2FBQzlCLENBQUM7WUFDRiw4Q0FBOEM7WUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUM5QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzVDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO3dCQUN4QixJQUFJLEVBQUUsYUFBYTt3QkFDbkIsS0FBSyxFQUFFLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQWU7cUJBQy9ELENBQUMsQ0FBQztpQkFDTjtxQkFBTSxJQUFJLGFBQWEsS0FBSyxhQUFhLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNqRyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsMEJBQTBCLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzlGO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQztTQUNsQjthQUFNLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7WUFDL0MsT0FBTztnQkFDSCxJQUFJLEVBQUUsY0FBYztnQkFDcEIsWUFBWSxFQUFFLGNBQWMsQ0FBQyxLQUFLO2FBQ3JDLENBQUM7U0FDTDthQUFNLElBQUksY0FBYyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtZQUNqRCxPQUFPO2dCQUNILElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLGNBQWMsRUFBRSxjQUFjLENBQUMsS0FBSzthQUN2QyxDQUFDO1NBQ0w7YUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssd0JBQXdCLEVBQUU7WUFDekQsT0FBTztnQkFDSCxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixzQkFBc0IsRUFBRSxjQUFjLENBQUMsS0FBSzthQUMvQyxDQUFDO1NBQ0w7S0FDSjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxVQUF1QixFQUFFLFVBQStCO0lBQzVGLE1BQU0sY0FBYyxHQUFrQjtRQUNsQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7UUFDckIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO0tBQ2xDLENBQUM7SUFDRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDM0IsYUFBYTtRQUNiLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFFLFVBQWtCLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyRywwRUFBMEU7WUFDMUUsY0FBYyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDaEMsMEJBQTBCLENBQUMsVUFBVSxFQUFHLFVBQWtCLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN2RztRQUNELE9BQU87WUFDSCxHQUFHLGNBQWM7WUFDakIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBVTtTQUNqRyxDQUFDO0tBQ0w7U0FBTSxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0MsT0FBTyxFQUFFLEdBQUcsY0FBYyxFQUFFLE1BQU0sRUFBRSw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFRLEVBQUUsQ0FBQztLQUN0RztTQUFNO1FBQ0gsT0FBTyxFQUFFLEdBQUcsY0FBYyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztLQUNyRjtBQUNMLENBQUM7QUFyQkQsMERBcUJDOzs7Ozs7OztBQzNSWTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQ3JDYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QyxtQkFBbUIsS0FBSzs7Ozs7Ozs7QUN6UXBEO0FBQ2IsOENBQTZDLEVBQUUsYUFBYSxFQUFDO0FBQzdELDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsTUFBTSxvS0FBb0s7QUFDMUssTUFBTSx5SUFBeUk7QUFDL0ksTUFBTSxpS0FBaUs7QUFDdkssTUFBTSw4SkFBOEo7QUFDcEssTUFBTSwySkFBMko7QUFDakssTUFBTSxxSkFBcUo7QUFDM0osTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx1SUFBdUk7QUFDN0ksTUFBTSw2SUFBNkk7QUFDbkosTUFBTSw0SkFBNEo7QUFDbEssTUFBTSxnSkFBZ0o7QUFDdEosTUFBTSx5SkFBeUo7QUFDL0osTUFBTSwwSUFBMEk7QUFDaEosTUFBTSwySEFBMkg7QUFDakksTUFBTTtBQUNOOzs7Ozs7O1VDdEJBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoiQW5ub3RhdGlvbkNvbnZlcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gICAgQWN0aW9uLFxuICAgIEFjdGlvbkltcG9ydCxcbiAgICBBY3Rpb25QYXJhbWV0ZXIsXG4gICAgQW5ub3RhdGlvbixcbiAgICBBbm5vdGF0aW9uUGF0aCxcbiAgICBBbm5vdGF0aW9uUmVjb3JkLFxuICAgIEFycmF5V2l0aEluZGV4LFxuICAgIEJhc2VOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgQ29tcGxleFR5cGUsXG4gICAgQ29udmVydGVkTWV0YWRhdGEsXG4gICAgRW50aXR5Q29udGFpbmVyLFxuICAgIEVudGl0eVNldCxcbiAgICBFbnRpdHlUeXBlLFxuICAgIEV4cHJlc3Npb24sXG4gICAgRnVsbHlRdWFsaWZpZWROYW1lLFxuICAgIE5hdmlnYXRpb25Qcm9wZXJ0eSxcbiAgICBOYXZpZ2F0aW9uUHJvcGVydHlQYXRoLFxuICAgIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbixcbiAgICBQcm9wZXJ0eSxcbiAgICBQcm9wZXJ0eVBhdGgsXG4gICAgUmF3QWN0aW9uLFxuICAgIFJhd0FjdGlvbkltcG9ydCxcbiAgICBSYXdBbm5vdGF0aW9uLFxuICAgIFJhd0NvbXBsZXhUeXBlLFxuICAgIFJhd0VudGl0eUNvbnRhaW5lcixcbiAgICBSYXdFbnRpdHlTZXQsXG4gICAgUmF3RW50aXR5VHlwZSxcbiAgICBSYXdNZXRhZGF0YSxcbiAgICBSYXdOYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLFxuICAgIFJhd1Byb3BlcnR5LFxuICAgIFJhd1NjaGVtYSxcbiAgICBSYXdTaW5nbGV0b24sXG4gICAgUmF3VHlwZURlZmluaXRpb24sXG4gICAgUmF3VjJOYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmF3VjROYXZpZ2F0aW9uUHJvcGVydHksXG4gICAgUmVtb3ZlQW5ub3RhdGlvbkFuZFR5cGUsXG4gICAgUmVzb2x1dGlvblRhcmdldCxcbiAgICBTaW5nbGV0b24sXG4gICAgVHlwZURlZmluaXRpb25cbn0gZnJvbSAnQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMnO1xuaW1wb3J0IHsgVm9jYWJ1bGFyeVJlZmVyZW5jZXMgfSBmcm9tICdAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVm9jYWJ1bGFyeVJlZmVyZW5jZXMnO1xuaW1wb3J0IHtcbiAgICBhZGRHZXRCeVZhbHVlLFxuICAgIGFsaWFzLFxuICAgIERlY2ltYWwsXG4gICAgRW51bUlzRmxhZyxcbiAgICBsYXp5LFxuICAgIG1lcmdlQW5ub3RhdGlvbnMsXG4gICAgc3BsaXRBdEZpcnN0LFxuICAgIHNwbGl0QXRMYXN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUZpcnN0LFxuICAgIHN1YnN0cmluZ0JlZm9yZUxhc3QsXG4gICAgVGVybVRvVHlwZXMsXG4gICAgdW5hbGlhc1xufSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBTeW1ib2wgdG8gZXh0ZW5kIGFuIGFubm90YXRpb24gd2l0aCB0aGUgcmVmZXJlbmNlIHRvIGl0cyB0YXJnZXQuXG4gKi9cbmNvbnN0IEFOTk9UQVRJT05fVEFSR0VUID0gU3ltYm9sKCdBbm5vdGF0aW9uIFRhcmdldCcpO1xuXG4vKipcbiAqIEFwcGVuZCBhbiBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgdmlzaXRlZCBvYmplY3RzIGlmIGl0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdC5cbiAqXG4gKiBAcGFyYW0gb2JqZWN0UGF0aCAgICBUaGUgbGlzdCBvZiB2aXNpdGVkIG9iamVjdHNcbiAqIEBwYXJhbSB2aXNpdGVkT2JqZWN0IFRoZSBvYmplY3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHZpc2l0ZWQgb2JqZWN0c1xuICovXG5mdW5jdGlvbiBhcHBlbmRPYmplY3RQYXRoKG9iamVjdFBhdGg6IGFueVtdLCB2aXNpdGVkT2JqZWN0OiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKG9iamVjdFBhdGhbb2JqZWN0UGF0aC5sZW5ndGggLSAxXSAhPT0gdmlzaXRlZE9iamVjdCkge1xuICAgICAgICBvYmplY3RQYXRoLnB1c2godmlzaXRlZE9iamVjdCk7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3RQYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgKHBvc3NpYmx5IHJlbGF0aXZlKSBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXIgICAgICAgICBDb252ZXJ0ZXJcbiAqIEBwYXJhbSBzdGFydEVsZW1lbnQgICAgICBUaGUgc3RhcnRpbmcgcG9pbnQgaW4gY2FzZSBvZiByZWxhdGl2ZSBwYXRoIHJlc29sdXRpb25cbiAqIEBwYXJhbSBwYXRoICAgICAgICAgICAgICBUaGUgcGF0aCB0byByZXNvbHZlXG4gKiBAcGFyYW0gYW5ub3RhdGlvbnNUZXJtICAgT25seSBmb3IgZXJyb3IgcmVwb3J0aW5nOiBUaGUgYW5ub3RhdGlvbiB0ZXJtXG4gKiBAcmV0dXJucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb2x2ZWQgdGFyZ2V0IGFuZCB0aGUgZWxlbWVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgd2hpbGUgZ2V0dGluZyB0byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0PFQ+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
|