@sapui5/sap.fe.core 1.131.0 → 1.133.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +17 -23
- package/src/sap/fe/core/AppComponent.js +74 -36
- package/src/sap/fe/core/AppComponent.ts +70 -3
- package/src/sap/fe/core/AppStateHandler.js +44 -13
- package/src/sap/fe/core/AppStateHandler.ts +38 -0
- package/src/sap/fe/core/BaseController.js +3 -3
- package/src/sap/fe/core/CommonUtils.js +30 -37
- package/src/sap/fe/core/CommonUtils.ts +15 -13
- package/src/sap/fe/core/ExtensionAPI.js +29 -34
- package/src/sap/fe/core/ExtensionAPI.ts +3 -0
- package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
- package/src/sap/fe/core/PageController.js +40 -31
- package/src/sap/fe/core/PageController.ts +14 -1
- package/src/sap/fe/core/ResourceModel.js +4 -4
- package/src/sap/fe/core/ReuseComponent.js +27 -13
- package/src/sap/fe/core/ReuseComponent.ts +18 -0
- package/src/sap/fe/core/TemplateComponent.js +102 -89
- package/src/sap/fe/core/TemplateComponent.ts +20 -1
- package/src/sap/fe/core/TemplateModel.js +6 -7
- package/src/sap/fe/core/UIProvider.js +1 -1
- package/src/sap/fe/core/UIProvider.ts +2 -9
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
- package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
- package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
- package/src/sap/fe/core/controllerextensions/Share.js +19 -28
- package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
- package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
- package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
- package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
- package/src/sap/fe/core/controls/CommandExecution.js +2 -2
- package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
- package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
- package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
- package/src/sap/fe/core/converters/ConverterContext.js +17 -18
- package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
- package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
- package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
- package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
- package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
- package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
- package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
- package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
- package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
- package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
- package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
- package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
- package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
- package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
- package/src/sap/fe/core/definition/FEDefinition.js +104 -44
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
- package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
- package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
- package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
- package/src/sap/fe/core/fpm/Component.js +12 -14
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
- package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
- package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
- package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
- package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
- package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
- package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
- package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
- package/src/sap/fe/core/helpers/MetaPath.js +9 -7
- package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
- package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
- package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
- package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
- package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
- package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
- package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
- package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
- package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
- package/src/sap/fe/core/helpers/WebSocket.js +4 -4
- package/src/sap/fe/core/library.js +8 -7
- package/src/sap/fe/core/library.ts +2 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
- package/src/sap/fe/core/messagebundle.properties +21 -0
- package/src/sap/fe/core/messagebundle_ar.properties +5 -1
- package/src/sap/fe/core/messagebundle_bg.properties +4 -0
- package/src/sap/fe/core/messagebundle_ca.properties +4 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
- package/src/sap/fe/core/messagebundle_cs.properties +8 -4
- package/src/sap/fe/core/messagebundle_cy.properties +4 -0
- package/src/sap/fe/core/messagebundle_da.properties +4 -0
- package/src/sap/fe/core/messagebundle_de.properties +4 -0
- package/src/sap/fe/core/messagebundle_el.properties +4 -0
- package/src/sap/fe/core/messagebundle_en.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
- package/src/sap/fe/core/messagebundle_es.properties +5 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
- package/src/sap/fe/core/messagebundle_et.properties +4 -0
- package/src/sap/fe/core/messagebundle_fi.properties +4 -0
- package/src/sap/fe/core/messagebundle_fr.properties +6 -2
- package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
- package/src/sap/fe/core/messagebundle_hi.properties +4 -0
- package/src/sap/fe/core/messagebundle_hr.properties +4 -0
- package/src/sap/fe/core/messagebundle_hu.properties +4 -0
- package/src/sap/fe/core/messagebundle_id.properties +4 -0
- package/src/sap/fe/core/messagebundle_it.properties +4 -0
- package/src/sap/fe/core/messagebundle_iw.properties +4 -0
- package/src/sap/fe/core/messagebundle_ja.properties +4 -0
- package/src/sap/fe/core/messagebundle_kk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ko.properties +4 -0
- package/src/sap/fe/core/messagebundle_lt.properties +4 -0
- package/src/sap/fe/core/messagebundle_lv.properties +4 -0
- package/src/sap/fe/core/messagebundle_mk.properties +4 -0
- package/src/sap/fe/core/messagebundle_ms.properties +4 -0
- package/src/sap/fe/core/messagebundle_nl.properties +4 -0
- package/src/sap/fe/core/messagebundle_no.properties +4 -0
- package/src/sap/fe/core/messagebundle_pl.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt.properties +4 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
- package/src/sap/fe/core/messagebundle_ro.properties +4 -0
- package/src/sap/fe/core/messagebundle_ru.properties +4 -0
- package/src/sap/fe/core/messagebundle_sh.properties +4 -0
- package/src/sap/fe/core/messagebundle_sk.properties +4 -0
- package/src/sap/fe/core/messagebundle_sl.properties +4 -0
- package/src/sap/fe/core/messagebundle_sr.properties +4 -0
- package/src/sap/fe/core/messagebundle_sv.properties +4 -0
- package/src/sap/fe/core/messagebundle_th.properties +4 -0
- package/src/sap/fe/core/messagebundle_tr.properties +5 -1
- package/src/sap/fe/core/messagebundle_uk.properties +4 -0
- package/src/sap/fe/core/messagebundle_vi.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
- package/src/sap/fe/core/operationsHelper.js +23 -27
- package/src/sap/fe/core/operationsHelper.ts +6 -7
- package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
- package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
- package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
- package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
- package/src/sap/fe/core/support/CommonHelper.js +2 -3
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +3 -4
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
- package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
- package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
- package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
- package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
- package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
- package/src/sap/fe/core/templating/UIFormatters.js +57 -78
- package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
- package/src/sap/fe/core/type/Date.js +2 -2
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
- package/src/sap/fe/core/type/EDM.js +3 -5
- package/src/sap/fe/core/type/Email.js +17 -6
- package/src/sap/fe/core/type/Email.ts +23 -4
- package/src/sap/fe/core/type/FiscalDate.js +8 -9
- package/src/sap/fe/core/type/InputMask.js +3 -4
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
|
@@ -29,21 +29,18 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
29
29
|
if (!sSearchTerm) {
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return sNormalized;
|
|
38
|
-
}, undefined);
|
|
32
|
+
const convertedSearchTerm = sSearchTerm.replace(/["();]/g, " "); // these are the specific characters that fail on both, CAP and RAP: "();
|
|
33
|
+
if (convertedSearchTerm === "" || convertedSearchTerm === " ") {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
return convertedSearchTerm;
|
|
39
37
|
}
|
|
40
38
|
async function waitForContextRequested(bindingContext) {
|
|
41
|
-
var _dataModel$targetEnti;
|
|
42
39
|
const model = bindingContext.getModel();
|
|
43
40
|
const metaModel = model.getMetaModel();
|
|
44
41
|
const entityPath = metaModel.getMetaPath(bindingContext.getPath());
|
|
45
42
|
const dataModel = MetaModelConverter.getInvolvedDataModelObjects(metaModel.getContext(entityPath));
|
|
46
|
-
await bindingContext.requestProperty(
|
|
43
|
+
await bindingContext.requestProperty(dataModel.targetEntityType.keys[0]?.name);
|
|
47
44
|
}
|
|
48
45
|
function fnHasTransientContexts(oListBinding) {
|
|
49
46
|
let bHasTransientContexts = false;
|
|
@@ -222,11 +219,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
222
219
|
oTargetParams.semanticObjectMapping = oSemanticObjectAnnotations.aMappings;
|
|
223
220
|
_getRelatedAppsMenuItems(aLinks, aExcludedActions, oTargetParams, aAnnotationsSOItems);
|
|
224
221
|
aManifestSOItems.forEach(function (_ref) {
|
|
225
|
-
var _aAnnotationsSOItems$;
|
|
226
222
|
let {
|
|
227
223
|
targetSemObject
|
|
228
224
|
} = _ref;
|
|
229
|
-
if (
|
|
225
|
+
if (aAnnotationsSOItems[0]?.targetSemObject === targetSemObject) {
|
|
230
226
|
isSemanticObjectHasSameTargetInManifest = true;
|
|
231
227
|
}
|
|
232
228
|
});
|
|
@@ -291,7 +287,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
291
287
|
//Semantic Keys
|
|
292
288
|
const aSemKeys = oMetaModel.getObject(sSemanticKeyVocabulary);
|
|
293
289
|
// Unavailable Actions
|
|
294
|
-
const oEntry = oBindingContext
|
|
290
|
+
const oEntry = oBindingContext?.getObject();
|
|
295
291
|
if (!oEntry && oBindingContext) {
|
|
296
292
|
oBindingContext.requestObject().then(async function (requestedObject) {
|
|
297
293
|
return CommonUtils.updateRelateAppsModel(oBindingContext, requestedObject, oObjectPageLayout, aSemKeys, oMetaModel, oMetaPath, appComponent);
|
|
@@ -418,8 +414,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
418
414
|
}
|
|
419
415
|
};
|
|
420
416
|
if (oView && oView.getBindingContext()) {
|
|
421
|
-
|
|
422
|
-
return (_oView$getBindingCont = oView.getBindingContext()) === null || _oView$getBindingCont === void 0 ? void 0 : _oView$getBindingCont.requestObject().then(function (oData) {
|
|
417
|
+
return oView.getBindingContext()?.requestObject().then(function (oData) {
|
|
423
418
|
return fnGetLinks(oData);
|
|
424
419
|
}).catch(function (oError) {
|
|
425
420
|
Log.error("Cannot retrieve the links from the shell service", oError);
|
|
@@ -437,8 +432,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
437
432
|
const menuButtonWithIBNAction = [];
|
|
438
433
|
IBNActions.forEach(function (IBNAction) {
|
|
439
434
|
if (IBNAction.isA("sap.m.MenuItem")) {
|
|
440
|
-
|
|
441
|
-
menuButtonWithIBNAction.push((_IBNAction$getParent = IBNAction.getParent()) === null || _IBNAction$getParent === void 0 ? void 0 : _IBNAction$getParent.getParent());
|
|
435
|
+
menuButtonWithIBNAction.push(IBNAction.getParent()?.getParent());
|
|
442
436
|
}
|
|
443
437
|
});
|
|
444
438
|
menuButtonWithIBNAction.forEach(function (menuAction) {
|
|
@@ -622,11 +616,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
622
616
|
startupParameters = componentData && componentData.startupParameters || {},
|
|
623
617
|
shellServices = appComponent.getShellServices();
|
|
624
618
|
const startupAppState = await shellServices.getStartupAppState(appComponent);
|
|
625
|
-
const startupAppStateData =
|
|
619
|
+
const startupAppStateData = startupAppState?.getData() || {},
|
|
626
620
|
extendedParameters = startupAppStateData.selectionVariant && startupAppStateData.selectionVariant.SelectOptions || [];
|
|
627
621
|
parameters.forEach(function (oParameter) {
|
|
628
|
-
|
|
629
|
-
const sPropertyName = isAction ? `/${oParameter.name}` : (_getPath = (_ref2 = oParameter).getPath) === null || _getPath === void 0 ? void 0 : _getPath.call(_ref2).slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
622
|
+
const sPropertyName = isAction ? `/${oParameter.name}` : oParameter.getPath?.().slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
630
623
|
const sParameterName = isAction ? sPropertyName.slice(1) : sPropertyName;
|
|
631
624
|
if (actionDefaultValues && isCreate) {
|
|
632
625
|
if (actionDefaultValues[sParameterName]) {
|
|
@@ -683,8 +676,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
683
676
|
if (aSemanticObjectMapping.length > 0) {
|
|
684
677
|
// To check if the semanticObject Mapping is done for the same local property more that once then first one will be considered
|
|
685
678
|
for (const element of aSemanticObjectMapping) {
|
|
686
|
-
|
|
687
|
-
if (((_element$LocalPropert = element.LocalProperty) === null || _element$LocalPropert === void 0 ? void 0 : _element$LocalPropert.$PropertyPath) !== oSemanticMapping.LocalProperty.$PropertyPath) {
|
|
679
|
+
if (element.LocalProperty?.$PropertyPath !== oSemanticMapping.LocalProperty.$PropertyPath) {
|
|
688
680
|
aSemanticObjectMapping.push(oSemanticMapping);
|
|
689
681
|
}
|
|
690
682
|
}
|
|
@@ -703,8 +695,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
703
695
|
const oControlConfig = oViewData.controlConfiguration;
|
|
704
696
|
for (const config in oControlConfig) {
|
|
705
697
|
if (config.includes("@com.sap.vocabularies.UI.v1.DataPoint") || config.includes("@com.sap.vocabularies.UI.v1.Chart")) {
|
|
706
|
-
|
|
707
|
-
const sOutbound = (_oControlConfig$confi = oControlConfig[config].navigation) === null || _oControlConfig$confi === void 0 ? void 0 : (_oControlConfig$confi2 = _oControlConfig$confi.targetOutbound) === null || _oControlConfig$confi2 === void 0 ? void 0 : _oControlConfig$confi2.outbound;
|
|
698
|
+
const sOutbound = oControlConfig[config].navigation?.targetOutbound?.outbound;
|
|
708
699
|
if (sOutbound !== undefined) {
|
|
709
700
|
const oOutbound = oCrossNav[sOutbound];
|
|
710
701
|
if (oOutbound.semanticObject && oOutbound.action) {
|
|
@@ -931,7 +922,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
931
922
|
propertyName = parts.pop(),
|
|
932
923
|
navigationPath = parts.join("/"),
|
|
933
924
|
entitySet = navigationPath && metaModel.getObject(`/${navigationPath}`);
|
|
934
|
-
if (
|
|
925
|
+
if (entitySet?.$kind === "Singleton") {
|
|
935
926
|
const singletonName = parts[parts.length - 1];
|
|
936
927
|
return `/${singletonName}/${propertyName}`;
|
|
937
928
|
}
|
|
@@ -1010,8 +1001,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1010
1001
|
return [];
|
|
1011
1002
|
}
|
|
1012
1003
|
(annotation.SelectOptions || []).forEach(selectOption => {
|
|
1013
|
-
|
|
1014
|
-
if ((_selectOption$Propert = selectOption.PropertyName) !== null && _selectOption$Propert !== void 0 && _selectOption$Propert.$target && ((_selectOption$Ranges = selectOption.Ranges) === null || _selectOption$Ranges === void 0 ? void 0 : _selectOption$Ranges.length) > 0) {
|
|
1004
|
+
if (selectOption.PropertyName?.$target && selectOption.Ranges?.length > 0) {
|
|
1015
1005
|
const propertyType = selectOption.PropertyName.$target.type;
|
|
1016
1006
|
const propertyPath = selectOption.PropertyName.value;
|
|
1017
1007
|
for (const j in selectOption.Ranges) {
|
|
@@ -1031,7 +1021,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1031
1021
|
}
|
|
1032
1022
|
function getConverterContextForPath(sMetaPath, oMetaModel, sEntitySet, oDiagnostics) {
|
|
1033
1023
|
const oContext = oMetaModel.createBindingContext(sMetaPath);
|
|
1034
|
-
return ConverterContext
|
|
1024
|
+
return ConverterContext?.createConverterContextForMacro(sEntitySet, oContext || oMetaModel, oDiagnostics, mergeObjects);
|
|
1035
1025
|
}
|
|
1036
1026
|
|
|
1037
1027
|
/**
|
|
@@ -1050,18 +1040,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1050
1040
|
const rootContextPath = programmingModel === "Draft" ? ModelHelper.getDraftRootPath(context) : ModelHelper.getStickyRootPath(context);
|
|
1051
1041
|
let simpleRootContext;
|
|
1052
1042
|
if (rootContextPath) {
|
|
1053
|
-
var _appComponent$getRoot, _simpleRootContext;
|
|
1054
1043
|
// Check if a view matches with the draft root path
|
|
1055
|
-
const existingBindingContextOnPage =
|
|
1056
|
-
var _pageView$getBindingC;
|
|
1057
|
-
return ((_pageView$getBindingC = pageView.getBindingContext()) === null || _pageView$getBindingC === void 0 ? void 0 : _pageView$getBindingC.getPath()) === rootContextPath;
|
|
1058
|
-
})) === null || _appComponent$getRoot === void 0 ? void 0 : _appComponent$getRoot.getBindingContext();
|
|
1044
|
+
const existingBindingContextOnPage = appComponent.getRootViewController().getInstancedViews().find(pageView => pageView.getBindingContext()?.getPath() === rootContextPath)?.getBindingContext();
|
|
1059
1045
|
if (existingBindingContextOnPage) {
|
|
1060
1046
|
return existingBindingContextOnPage;
|
|
1061
1047
|
}
|
|
1062
1048
|
const internalModel = view.getModel("internal");
|
|
1063
1049
|
simpleRootContext = internalModel.getProperty("/simpleRootContext");
|
|
1064
|
-
if (
|
|
1050
|
+
if (simpleRootContext?.getPath() === rootContextPath) {
|
|
1065
1051
|
return simpleRootContext;
|
|
1066
1052
|
}
|
|
1067
1053
|
const model = context.getModel();
|
|
@@ -1073,11 +1059,18 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1073
1059
|
}
|
|
1074
1060
|
}
|
|
1075
1061
|
}
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1062
|
+
|
|
1063
|
+
/**
|
|
1064
|
+
* Helper method to determine if the source is to be display for the editmode or not.
|
|
1065
|
+
* @param source
|
|
1066
|
+
* @returns If the source is to be displayed in edit mode
|
|
1067
|
+
*/
|
|
1068
|
+
function getIsEditable(source) {
|
|
1069
|
+
const managedObject = source.isA("sap.fe.core.PageController") ? source.getView() : source;
|
|
1070
|
+
return managedObject.getBindingContext("ui")?.getProperty("/isEditable");
|
|
1079
1071
|
}
|
|
1080
1072
|
const CommonUtils = {
|
|
1073
|
+
INLINEEDIT_UPDATEGROUPID: "inline",
|
|
1081
1074
|
fireButtonPress: fnFireButtonPress,
|
|
1082
1075
|
getTargetView: getTargetView,
|
|
1083
1076
|
getCurrentPageView: getCurrentPageView,
|
|
@@ -1130,4 +1123,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/array/uniqueSort", "sap/base/util/
|
|
|
1130
1123
|
};
|
|
1131
1124
|
return CommonUtils;
|
|
1132
1125
|
}, false);
|
|
1133
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwic3BsaXQiLCJyZWR1Y2UiLCJzTm9ybWFsaXplZCIsInNDdXJyZW50V29yZCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJfZGF0YU1vZGVsJHRhcmdldEVudGkiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsImluY2x1ZGVzIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsImFMaW5rcyIsImxlbmd0aCIsImFsbG93ZWRBY3Rpb25zIiwidW5hdmFpbGFibGVBY3Rpb25zIiwibWFwcGluZyIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIl9nZXRSZWxhdGVkSW50ZW50c1dpdGhTZW1hbnRpY09iamVjdHNBbmRBY3Rpb24iLCJzZW1hbnRpY09iamVjdEFuZEFjdGlvbiIsImFwcENvbXBvbmVudFNPSXRlbXMiLCJhY3Rpb25zIiwiYWN0aW9uIiwiZXhjbHVkZWRBY3Rpb25zIiwic29NYXBwaW5ncyIsInVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCIsIm9FbnRyeSIsImFTZW1LZXlzIiwib01ldGFNb2RlbCIsIm9NZXRhUGF0aCIsImFwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzQ3VycmVudFNlbU9iaiIsInNDdXJyZW50QWN0aW9uIiwib1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJhUmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTWFuaWZlc3RTT0tleXMiLCJmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MiLCJvUGFyc2VkVXJsIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwiZ2V0T2JqZWN0Iiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJzZW1hbnRpY09iamVjdEludGVudHMiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjb21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsImZlRW52aXJvbm1lbnQiLCJnZXRJbnRlbnQiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0IiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlTZXRQYXRoIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJfcmVmIiwiX2FBbm5vdGF0aW9uc1NPSXRlbXMkIiwic29JdGVtcyIsImNvbmNhdCIsInNldFByb3BlcnR5IiwiZXJyb3IiLCJMb2ciLCJfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsIm9FbnRpdHlBbm5vdGF0aW9ucyIsInNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0iLCJzQW5ub3RhdGlvbkFjdGlvblRlcm0iLCJzUXVhbGlmaWVyIiwiZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJwYXRoIiwic1NlbWFudGljS2V5Vm9jYWJ1bGFyeSIsInJlcXVlc3RPYmplY3QiLCJ0aGVuIiwicmVxdWVzdGVkT2JqZWN0IiwiY2F0Y2giLCJvRXJyb3IiLCJmbkZpcmVCdXR0b25QcmVzcyIsIm9CdXR0b24iLCJpc0EiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImdldEFwcENvbXBvbmVudCIsIm9Db250cm9sIiwib093bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJFcnJvciIsImdldEN1cnJlbnRQYWdlVmlldyIsIm9BcHBDb21wb25lbnQiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJnZXRSaWdodG1vc3RWaWV3IiwiZ2V0Um9vdENvbnRhaW5lciIsImdldEN1cnJlbnRQYWdlIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRQYXJlbnQiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwibWV0YU1vZGVsQ29udGV4dCIsInNDb250ZXh0UGF0aCIsIm9GaWx0ZXIiLCJvRW50aXR5VHlwZSIsIm9Qcm9wZXJ0aWVzIiwiaGFzT3duUHJvcGVydHkiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJvTWVudSIsImdldE1lbnUiLCJnZXRJdGVtcyIsIm9JdGVtIiwiZGF0YSIsImZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvVmlldyIsIm9QYXJhbXMiLCJpc1N0aWNreSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJpbmRleE9mIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldElkIiwic2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlIiwiX29WaWV3JGdldEJpbmRpbmdDb250IiwidXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSIsIklCTkFjdGlvbnMiLCJtZW51QnV0dG9uV2l0aElCTkFjdGlvbiIsIklCTkFjdGlvbiIsIl9JQk5BY3Rpb24kZ2V0UGFyZW50IiwibWVudUFjdGlvbiIsIm1lbnVJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJmaWx0ZXIiLCJtZW51SXRlbSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhcHBsaWNhYmxlIiwibm90QXBwbGljYWJsZSIsImR5bmFtaWNBY3Rpb25QYXRoUHJlZml4IiwiaW50ZXJuYWxNb2RlbCIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5IiwiYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJfZ2V0UGF0aCIsIl9yZWYyIiwic1Byb3BlcnR5TmFtZSIsImNhbGwiLCJzUGFyYW1ldGVyTmFtZSIsInBhcmFtZXRlcnRUeXBlIiwidHlwZSIsImdldEJhc2VUeXBlIiwiU3RyaW5nIiwidHlwZUluc3RhbmNlIiwiZ2V0RGF0YVR5cGVJbnN0YW5jZSIsInBhcnNlVmFsdWUiLCJvRXh0ZW5kZWRQYXJhbWV0ZXIiLCJQcm9wZXJ0eU5hbWUiLCJvUmFuZ2UiLCJSYW5nZXMiLCJTaWduIiwiT3B0aW9uIiwiTG93IiwiZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSIsIm9TdGFydHVwUGFyYW1ldGVycyIsIm9JbmJvdW5kUGFyYW1ldGVycyIsIm9JbmJvdW5kcyIsImFDcmVhdGVQYXJhbWV0ZXJzIiwic1BhcmFtZXRlciIsInVzZUZvckNyZWF0ZSIsIm9SZXQiLCJzQ3JlYXRlUGFyYW1ldGVyIiwiYVZhbHVlcyIsImNyZWF0ZSIsImdldFNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9PdXRib3VuZCIsImFTZW1hbnRpY09iamVjdE1hcHBpbmciLCJhUGFyYW1ldGVycyIsInNQYXJhbSIsImZvcm1hdCIsIl9lbGVtZW50JExvY2FsUHJvcGVydCIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm9WaWV3RGF0YSIsIm9Dcm9zc05hdiIsIm9IZWFkZXJGYWNldEl0ZW1zIiwic0lkIiwib0NvbnRyb2xDb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsIl9vQ29udHJvbENvbmZpZyRjb25maSIsIl9vQ29udHJvbENvbmZpZyRjb25maTIiLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4Iiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIl9zZWxlY3RPcHRpb24kUHJvcGVydCIsIl9zZWxlY3RPcHRpb24kUmFuZ2VzIiwiJHRhcmdldCIsInByb3BlcnR5VHlwZSIsInByb3BlcnR5UGF0aCIsImoiLCJyYW5nZSIsImdldFJhbmdlRGVmaW5pdGlvbiIsIkZpbHRlciIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgiLCJzTWV0YVBhdGgiLCJzRW50aXR5U2V0Iiwib0RpYWdub3N0aWNzIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwiY3JlYXRlUm9vdENvbnRleHQiLCJwcm9ncmFtbWluZ01vZGVsIiwiY29udGV4dCIsInJvb3RDb250ZXh0UGF0aCIsImdldERyYWZ0Um9vdFBhdGgiLCJnZXRTdGlja3lSb290UGF0aCIsInNpbXBsZVJvb3RDb250ZXh0IiwiX2FwcENvbXBvbmVudCRnZXRSb290IiwiX3NpbXBsZVJvb3RDb250ZXh0IiwiZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSIsImdldEluc3RhbmNlZFZpZXdzIiwiZmluZCIsInBhZ2VWaWV3IiwiX3BhZ2VWaWV3JGdldEJpbmRpbmdDIiwiZ2V0UHJvcGVydHkiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIl9jb250cm9sJGdldE1vZGVsIiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5IiwiZ2V0SUJOQWN0aW9ucyIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsImdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29tbW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzLFxuXHRTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXMsXG5cdFNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgeyBDb21tb25Bbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50VHlwZSwgVGV4dEFycmFuZ2VtZW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1bmlxdWVTb3J0IGZyb20gXCJzYXAvYmFzZS91dGlsL2FycmF5L3VuaXF1ZVNvcnRcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudERhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSBOYXZDb250YWluZXIgZnJvbSBcInNhcC9tL05hdkNvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgT3ZlcmZsb3dUb29sYmFyQnV0dG9uIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxUZW1wbGF0ZVByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvWE1MVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE1EQ0NoYXJ0IH0gZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTURDVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgTGluayB9IGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRFeHBhbmRQYXRoVHlwZSxcblx0TWV0YU1vZGVsRW50aXR5VHlwZSxcblx0TWV0YU1vZGVsRW51bSxcblx0TWV0YU1vZGVsTmF2UHJvcGVydHksXG5cdE1ldGFNb2RlbFByb3BlcnR5LFxuXHRNZXRhTW9kZWxUeXBlXG59IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCBBbnlFbGVtZW50IGZyb20gXCIuL2NvbnRyb2xzL0FueUVsZW1lbnRcIjtcbmltcG9ydCB7IGdldFJhbmdlRGVmaW5pdGlvbiB9IGZyb20gXCIuL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxGdW5jdGlvbiBmcm9tIFwiLi9oZWxwZXJzL01ldGFNb2RlbEZ1bmN0aW9uXCI7XG5cbnR5cGUgTXlJbmJveEludGVudCA9IHtcblx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0YWN0aW9uOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVTZWFyY2hUZXJtKHNTZWFyY2hUZXJtOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpIC8vZXNjYXBlIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLiBDYW4gYmUgcmVtb3ZlZCBpZiBvZGF0YS9iaW5kaW5nIGhhbmRsZXMgYmFja2VuZCBlcnJvcnMgcmVzcG9uZHMuXG5cdFx0LnNwbGl0KC9cXHMrLylcblx0XHQucmVkdWNlKGZ1bmN0aW9uIChzTm9ybWFsaXplZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzQ3VycmVudFdvcmQ6IHN0cmluZykge1xuXHRcdFx0aWYgKHNDdXJyZW50V29yZCAhPT0gXCJcIikge1xuXHRcdFx0XHRzTm9ybWFsaXplZCA9IGAke3NOb3JtYWxpemVkID8gYCR7c05vcm1hbGl6ZWR9IGAgOiBcIlwifVwiJHtzQ3VycmVudFdvcmR9XCJgO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNOb3JtYWxpemVkO1xuXHRcdH0sIHVuZGVmaW5lZCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkKGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5UGF0aCkpO1xuXHRhd2FpdCBiaW5kaW5nQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGZuSGFzVHJhbnNpZW50Q29udGV4dHMob0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdGxldCBiSGFzVHJhbnNpZW50Q29udGV4dHMgPSBmYWxzZTtcblx0aWYgKG9MaXN0QmluZGluZykge1xuXHRcdG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRcdGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJIYXNUcmFuc2llbnRDb250ZXh0cztcbn1cblxuLy8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0U09JbnRlbnRzKFxuXHRvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdG9TZW1hbnRpY09iamVjdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvUGFyYW06IG9iamVjdCB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRyZXR1cm4gb1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rcyhbXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHBhcmFtczogb1BhcmFtXG5cdFx0fVxuXHRdKTtcbn1cblxudHlwZSBTT01hcHBpbmcgPSB7IExvY2FsUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH07IFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHVua25vd24gfTtcbi8vIFRPLURPIGFkZCB0aGlzIGFzIHBhcnQgb2YgYXBwbHlTZW1hbnRpY09iamVjdG1hcHBpbmdzIGxvZ2ljIGluIEludGVudEJhc2VkbmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuZnVuY3Rpb24gX2NyZWF0ZU1hcHBpbmdzKG9NYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNPTWFwcGluZ1tdIHtcblx0Y29uc3QgYVNPTWFwcGluZ3M6IFNPTWFwcGluZ1tdID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc6IFNPTWFwcGluZztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFNYXBwaW5nS2V5cykge1xuXHRcdG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IGVsZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBvTWFwcGluZ1tlbGVtZW50XVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbnR5cGUgU2VtYW50aWNJdGVtID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcblx0dGFyZ2V0UGFyYW1zOiB1bmtub3duO1xufTtcbi8qKlxuICogQHBhcmFtIGxpbmtHcm91cFxuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKiBAcGFyYW0gYUFsbG93ZWRBY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhcblx0bGlua0dyb3VwOiBMaW5rW11bXSxcblx0YUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdLFxuXHRvVGFyZ2V0UGFyYW1zOiB1bmtub3duLFxuXHRhSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhQWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW11cbik6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGxpbmtzIG9mIGxpbmtHcm91cCkge1xuXHRcdGZvciAoY29uc3Qgb0xpbmsgb2YgbGlua3MpIHtcblx0XHRcdGNvbnN0IHNJbnRlbnQgPSBvTGluay5pbnRlbnQ7XG5cdFx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYUFsbG93ZWRBY3Rpb25zICYmIGFBbGxvd2VkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSkgfHxcblx0XHRcdFx0KCFhQWxsb3dlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucyAmJiAhYUV4Y2x1ZGVkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhSXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRBY3Rpb246IHNBY3Rpb24uc3BsaXQoXCJ+XCIpWzBdLFxuXHRcdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3QgPSB7XG5cdGFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdO1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM/OiB1bmtub3duW107XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0bWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHMoXG5cdG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBTZW1hbnRpY09iamVjdCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhQWxsb3dlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5hbGxvd2VkQWN0aW9ucyB8fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA/IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA6IFtdO1xuXHRcdGNvbnN0IGFTT01hcHBpbmdzID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZyA/IF9jcmVhdGVNYXBwaW5ncyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nKSA6IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTT01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYU1hbmlmZXN0U09JdGVtcywgYUFsbG93ZWRBY3Rpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgcmVsYXRlZCBpbnRlbnRzIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgb25seSBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0QW5kQWN0aW9uIFRoaXMgc3BlY2lmaWVzIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgZmV0Y2hpbmcgdGhlIGludGVudHNcbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhpcyBzZXBjaWZpZXMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdXBkYXRpbmcgcmVsYXRlZCBhcHBzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50U09JdGVtcyBUaGlzIGlzIGEgbGlzdCBvZiBzZW1hbnRpYyBpdGVtcyB1c2VkIGZvciB1cGRhdGluZyB0aGUgcmVsYXRlZCBhcHBzIGJ1dHRvblxuICogQHBhcmFtIGFMaW5rcyBUaGlzIGlzIGFuIGFycmF5IGNvbXByaXNpbmcgb2YgcmVsYXRlZCBpbnRlbnRzXG4gKi9cblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbihcblx0c2VtYW50aWNPYmplY3RBbmRBY3Rpb246IE15SW5ib3hJbnRlbnQsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW3NlbWFudGljT2JqZWN0QW5kQWN0aW9uLmFjdGlvbl07XG5cdFx0Y29uc3QgZXhjbHVkZWRBY3Rpb25zOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHNvTWFwcGluZ3M6IFtdID0gW107XG5cdFx0Y29uc3QgdGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBzb01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgZXhjbHVkZWRBY3Rpb25zLCB0YXJnZXRQYXJhbXMsIGFwcENvbXBvbmVudFNPSXRlbXMsIGFjdGlvbnMpO1xuXHR9XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RDb25maWcgPSB7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0Pjtcbn07XG50eXBlIFJlbGF0ZWRBcHBzQ29uZmlnID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0b0VudHJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdGFTZW1LZXlzOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWV0YVBhdGg6IHN0cmluZyxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IFByb21pc2U8UmVsYXRlZEFwcHNDb25maWdbXT4ge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IG9QYXJhbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogUmVsYXRlZEFwcHNDb25maWdbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdID0gW107XG5cdGxldCBhTWFuaWZlc3RTT0tleXM6IHN0cmluZ1tdO1xuXG5cdGFzeW5jIGZ1bmN0aW9uIGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRpZiAob0VudHJ5KSB7XG5cdFx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbUtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gZWxlbWVudC4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NTZW1LZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc1NlbUtleV0gPSB7IHZhbHVlOiBvRW50cnlbc1NlbUtleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFQYXRofS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFUZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzT2JqS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzT2JqS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0RGF0YSA9IGdldFRhcmdldFZpZXcob09iamVjdFBhZ2VMYXlvdXQpLmdldFZpZXdEYXRhKCkgYXMgU2VtYW50aWNPYmplY3RDb25maWc7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRsZXQgc2VtYW50aWNPYmplY3RJbnRlbnRzO1xuXHRcdGlmIChvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpIHtcblx0XHRcdGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYU1hbmlmZXN0U09LZXlzKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBlbGVtZW50LCBvUGFyYW0pKTtcblx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1tlbGVtZW50XSxcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcyxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcHBDb21wb25lbnRTT0l0ZW1zIGlzIHVwZGF0ZWQgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbiB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG1ldGhvZFxuXHRcdC8vIEluIG90aGVyIGNhc2VzIGl0IHJlbWFpbnMgYXMgYW4gZW1wdHkgbGlzdFxuXHRcdC8vIFdlIGNvbmNhdCB0aGlzIGxpc3QgdG93YXJkcyB0aGUgZW5kIHdpdGggYU1hbmlmZXN0U09JdGVtc1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhOiBDb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRpZiAoY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50ICYmIGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSkge1xuXHRcdFx0Y29uc3QgaW50ZW50OiBNeUluYm94SW50ZW50ID0gY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpO1xuXHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBpbnRlbnQuc2VtYW50aWNPYmplY3QsIG9QYXJhbSlcblx0XHRcdCk7XG5cdFx0XHRfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKGludGVudCwgb0JpbmRpbmdDb250ZXh0LCBhcHBDb21wb25lbnRTT0l0ZW1zLCBzZW1hbnRpY09iamVjdEludGVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTtcblx0XHRpZiAoYUxpbmtzKSB7XG5cdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGV0IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogQ29udGV4dDtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG5cdFx0XHRcdH0gPSB7fTtcblx0XHRcdFx0Y29uc3QgYUFubm90YXRpb25zU09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgJHtvTWV0YVBhdGh9QGA7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGAke29NZXRhUGF0aH0vQGA7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cblx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh7IHRhcmdldFNlbU9iamVjdCB9KSB7XG5cdFx0XHRcdFx0aWYgKGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0/LnRhcmdldFNlbU9iamVjdCA9PT0gdGFyZ2V0U2VtT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBhY3Rpb25zIGZyb20gY3VycmVudCBoYXNoIGFwcGxpY2F0aW9uIGlmIG1hbmlmZXN0IGNvbnRhaW5zIGVtcHR5IGFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdFx0XHRhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XSAmJlxuXHRcdFx0XHRcdCEhb01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XS5hbGxvd2VkQWN0aW9uc1xuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvSXRlbXMgPSBhTWFuaWZlc3RTT0l0ZW1zLmNvbmNhdChhcHBDb21wb25lbnRTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID8gc29JdGVtcyA6IHNvSXRlbXMuY29uY2F0KGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKFxuXHRvRW50aXR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzQ3VycmVudFNlbU9iajogc3RyaW5nXG4pOiB7XG5cdGJIYXNFbnRpdHlTZXRTTzogYm9vbGVhbjtcblx0YUFsbG93ZWRBY3Rpb25zOiBzdHJpbmdbXTtcblx0YVVuYXZhaWxhYmxlQWN0aW9uczogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXTtcblx0YU1hcHBpbmdzOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG59IHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhQWxsb3dlZEFjdGlvbnM6IFtdLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W10sXG5cdFx0YU1hcHBpbmdzOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5jbHVkZXMoQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0KSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmd9YDtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YDtcblxuXHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcIiNcIikpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgJHtzQW5ub3RhdGlvbk1hcHBpbmdUZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYCR7c0Fubm90YXRpb25BY3Rpb25UZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdH1cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gKG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGNvbnN0IHBhdGggPSAob0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdC8vIFNlbWFudGljIEtleSBWb2NhYnVsYXJ5XG5cdGNvbnN0IHNTZW1hbnRpY0tleVZvY2FidWxhcnkgPSBgJHtvTWV0YVBhdGh9L2AgKyBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWA7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5ICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlcXVlc3RlZE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0cmVxdWVzdGVkT2JqZWN0LFxuXHRcdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LFxuXHRcdFx0XHRcdGFTZW1LZXlzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b01ldGFQYXRoLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b24/OiBDb250cm9sKTogdm9pZCB7XG5cdGlmIChcblx0XHRvQnV0dG9uICYmXG5cdFx0b0J1dHRvbi5pc0E8QnV0dG9uIHwgT3ZlcmZsb3dUb29sYmFyQnV0dG9uPihbXCJzYXAubS5CdXR0b25cIiwgXCJzYXAubS5PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIl0pICYmXG5cdFx0b0J1dHRvbi5nZXRWaXNpYmxlKCkgJiZcblx0XHRvQnV0dG9uLmdldEVuYWJsZWQoKVxuXHQpIHtcblx0XHRvQnV0dG9uLmZpcmVQcmVzcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogQ29udHJvbCB8IENvbXBvbmVudCk6IEFwcENvbXBvbmVudCB7XG5cdGlmIChvQ29udHJvbC5pc0E8QXBwQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIHNob3VsZCBiZSBhIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyBvd25lciBvZiB0aGUgY29udHJvbFwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBhZ2VWaWV3KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IEZFVmlldyB7XG5cdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdHJldHVybiByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHQ6IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoKG9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogRkVWaWV3IHtcblx0aWYgKG9Db250cm9sICYmIG9Db250cm9sLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29tcG9uZW50ICYmIG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxGRVZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbCE7XG59XG5cbmZ1bmN0aW9uIF9mbkNoZWNrSXNNYXRjaChvT2JqZWN0OiBvYmplY3QsIG9LZXlzVG9DaGVjazogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleSBhcyBrZXlvZiB0eXBlb2Ygb09iamVjdF0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0c0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdG9GaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+IHtcblx0Y29uc3Qgb0VudGl0eVR5cGU6IE1ldGFNb2RlbEVudGl0eVR5cGUgPSAobWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9gKSB8fCB7fSkgYXMgTWV0YU1vZGVsRW50aXR5VHlwZSxcblx0XHRvUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGZuR2V0SUJOQWN0aW9ucyhvQ29udHJvbDogVGFibGUgfCBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIHwgT2JqZWN0UGFnZVN1YlNlY3Rpb24sIGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0FjdGlvbikge1xuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPEFjdGlvblRvb2xiYXJBY3Rpb24+KFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyLkFjdGlvblRvb2xiYXJBY3Rpb25cIikpIHtcblx0XHRcdFx0b0FjdGlvbiA9IG9BY3Rpb24uZ2V0QWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0FjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG9NZW51ID0gb0FjdGlvbi5nZXRNZW51KCk7XG5cdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NZW51LmdldEl0ZW1zKCk7XG5cdFx0XHRcdGFJdGVtcy5mb3JFYWNoKChvSXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob0FjdGlvbi5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhSUJOQWN0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdLCBvVmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duIH0+ID0ge307XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob1ZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvSUJOQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuc2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLmFjdGlvbjtcblx0XHRcdFx0b0FwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0XHQuZ2V0TGlua3MoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRpZiAob0lCTkFjdGlvbi5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpIHx8IG9JQk5BY3Rpb24uaXNBPE1lbnVJdGVtPihcInNhcC5tLk1lbnVJdGVtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShcblx0XHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlja3kpIHtcblx0XHRcdFx0XHRcdFx0KG9JQk5BY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRJZCgpLnNwbGl0KFwiLS1cIilbMV0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlOiAhKGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSAmJiBhTGlua1swXSAmJiBhTGlua1swXS5sZW5ndGggPT09IDEpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRyZXR1cm4gKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZuR2V0TGlua3MoKTtcblx0fVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG1lbnUgYnV0dG9uIHZpc2liaWxpdHkgaWYgYWxsIHRoZSB1bmRlcmx5aW5nIHNlbGVjdGlvbiBidXR0b25zIGFyZSBoaWRkZW4uXG4gKiBAcGFyYW0gSUJOQWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KElCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSk6IHZvaWQge1xuXHRjb25zdCBtZW51QnV0dG9uV2l0aElCTkFjdGlvbjogTWVudUJ1dHRvbltdID0gW107XG5cdElCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoSUJOQWN0aW9uKSB7XG5cdFx0aWYgKElCTkFjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0bWVudUJ1dHRvbldpdGhJQk5BY3Rpb24ucHVzaChJQk5BY3Rpb24uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1lbnVCdXR0b24pO1xuXHRcdH1cblx0fSk7XG5cdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKG1lbnVBY3Rpb24pIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51QWN0aW9uLmdldE1lbnUoKS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IHZpc2libGVNZW51SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChtZW51SXRlbSkge1xuXHRcdFx0cmV0dXJuIG1lbnVJdGVtLmdldFZpc2libGUoKTtcblx0XHR9KTtcblx0XHRpZiAodmlzaWJsZU1lbnVJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG1lbnVBY3Rpb24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0YlJldHVybk9ubHlQYXRoOiBib29sZWFuLFxuXHRpbkFjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhblxuKTpcblx0fCBzdHJpbmdcblx0fCB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHN0cmluZztcblx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZztcblx0ICB9IHtcblx0Y29uc3Qgc0FjdGlvbk5hbWU6IHN0cmluZyA9ICFpbkFjdGlvbk5hbWUgPyBhY3Rpb25Db250ZXh0LmdldE9iamVjdChhY3Rpb25Db250ZXh0LmdldFBhdGgoKSkudG9TdHJpbmcoKSA6IGluQWN0aW9uTmFtZTtcblx0bGV0IHNDb250ZXh0UGF0aCA9IGFjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IChhY3Rpb25Db250ZXh0LmdldE9iamVjdChzQ29udGV4dFBhdGgpIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUoYWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdHNQcm9wZXJ0eTogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhgKSxcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBhY3Rpb25Db250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZURpc3BsYXlNb2RlKFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogXCJEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCIgfCBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIiB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLFxuXHRcdG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gKG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0b0NvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pKSkgYXMgTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gX2dldEVudGl0eVR5cGUob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSl9LyRUeXBlYCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IHN0cmluZywgb1NlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQsIHNQcm9wZXJ0eTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGxldCBvQ29udGV4dCA9IG9TZWxlY3RlZENvbnRleHQ7XG5cdGNvbnN0IG5CcmFja2V0SW5kZXggPSBzQWN0aW9uLmluZGV4T2YoXCIoXCIpO1xuXG5cdGlmIChuQnJhY2tldEluZGV4ID4gLTEpIHtcblx0XHRjb25zdCBzVGFyZ2V0VHlwZSA9IHNBY3Rpb24uc2xpY2UobkJyYWNrZXRJbmRleCArIDEsIC0xKTtcblx0XHRsZXQgc0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXG5cdFx0d2hpbGUgKHNDdXJyZW50VHlwZSAhPT0gc1RhcmdldFR5cGUpIHtcblx0XHRcdC8vIEZpbmQgcGFyZW50IGJpbmRpbmcgY29udGV4dCBhbmQgcmV0cmlldmUgZW50aXR5IHR5cGVcblx0XHRcdG9Db250ZXh0ID0gb0NvbnRleHQuZ2V0QmluZGluZygpLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUgdG8gcmVxdWVzdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYm91bmQgYWN0aW9uIGludm9jYXRpb25cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdE9iamVjdChzUHJvcGVydHkpO1xufVxuXG5leHBvcnQgdHlwZSBfUmVxdWVzdGVkUHJvcGVydHkgPSB7XG5cdHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duO1xuXHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0O1xuXHRzQWN0aW9uOiBzdHJpbmc7XG5cdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0UHJvcGVydHkoXG5cdG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRzQWN0aW9uOiBzdHJpbmcsXG5cdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PiB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IHVua25vd24pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShcblx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVJlc3VsdHMpOiB2b2lkIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW107XG5cdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdGFSZXN1bHRzWzBdLnNBY3Rpb24sXG5cdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLnRyYWNlKFwiQ2Fubm90IHJldHJpZXZlIHByb3BlcnR5IHZhbHVlIGZyb20gcGF0aFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhcHBsaWNhYmxlXG4gKiBAcGFyYW0gbm90QXBwbGljYWJsZVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKi9cbmZ1bmN0aW9uIHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRhY3Rpb246IHN0cmluZyxcblx0YXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRub3RBcHBsaWNhYmxlOiB1bmtub3duW10sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IHZvaWQge1xuXHRjb25zdCBkeW5hbWljQWN0aW9uUGF0aFByZWZpeCA9IGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHthY3Rpb259YCxcblx0XHRpbnRlcm5hbE1vZGVsID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgJHtkeW5hbWljQWN0aW9uUGF0aFByZWZpeH0vJHthcHBsaWNhYmxlUHJvcGVydHl9YCwgYXBwbGljYWJsZSk7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fWAsIG5vdEFwcGxpY2FibGUpO1xufVxuXG5mdW5jdGlvbiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKGFFeHByZXNzaW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXR1cm4gYWxsb3dlZCBvcGVyYXRvcnMgZm9yIHR5cGUgR3VpZC5cbiAqIEByZXR1cm5zIEFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWRcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk6IHN0cmluZyB7XG5cdGNvbnN0IGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkID0gW1wiRVFcIiwgXCJORVwiXTtcblx0cmV0dXJuIGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkLnRvU3RyaW5nKCk7XG59XG5cbnR5cGUgUGFyYW1ldGVySW5mbyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHBhcmFtZXRlclByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT47XG59O1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpOiBQYXJhbWV0ZXJJbmZvIHtcblx0Y29uc3Qgc1BhcmFtZXRlckNvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygwLCBzQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzUGFyYW1ldGVyQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRjb25zdCBvUGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbyA9IHt9O1xuXHRpZiAoYlJlc3VsdENvbnRleHQgJiYgc1BhcmFtZXRlckNvbnRleHRQYXRoICE9PSBzQ29udGV4dFBhdGgpIHtcblx0XHRvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCA9IHNQYXJhbWV0ZXJDb250ZXh0UGF0aDtcblx0XHRvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG1ldGFNb2RlbENvbnRleHQsIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCkgYXMgUmVjb3JkPFxuXHRcdFx0c3RyaW5nLFxuXHRcdFx0TWV0YU1vZGVsUHJvcGVydHlcblx0XHQ+O1xuXHR9XG5cdHJldHVybiBvUGFyYW1ldGVySW5mbztcbn1cblxudHlwZSBWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG59O1xuXG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgbVBhZ2VDb250ZXh0OiB1bmtub3duW10sIG9WaWV3OiBWaWV3KTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGlzU3RpY2t5RWRpdE1vZGUob0NvbnRyb2w6IENvbnRyb2wpOiBib29sZWFuIHtcblx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0NvbnRyb2wuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGJVSUVkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvQ29udHJvbCk7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGVmYXVsdFBhcmFtZXRlciA9IEVkbUFjdGlvblBhcmFtZXRlciB8IENvbnRleHQ7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB1c2VyIGRlZmF1bHRzIGZyb20gdGhlIHN0YXJ0dXAgYXBwIHN0YXRlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBzdGFydHVwIHBhcmFtZXRlciBhbmQgc2V0cyB0aGVtIHRvIGEgbW9kZWwuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIG1vZGVsXG4gKiBAcGFyYW0gaXNBY3Rpb25cbiAqIEBwYXJhbSBpc0NyZWF0ZVxuICogQHBhcmFtIGFjdGlvbkRlZmF1bHRWYWx1ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0VXNlckRlZmF1bHRzKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczogVXNlckRlZmF1bHRQYXJhbWV0ZXJbXSxcblx0bW9kZWw6IEpTT05Nb2RlbCB8IE9EYXRhVjRDb250ZXh0LFxuXHRpc0FjdGlvbjogYm9vbGVhbixcblx0aXNDcmVhdGU/OiBib29sZWFuLFxuXHRhY3Rpb25EZWZhdWx0VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBCYXNlVHlwZSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL2VudW1zL0Jhc2VUeXBlXCIpKS5kZWZhdWx0O1xuXHRjb25zdCBUeXBlTWFwID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiKSkuZGVmYXVsdDtcblxuXHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKSxcblx0XHRzdGFydHVwUGFyYW1ldGVycyA9IChjb21wb25lbnREYXRhICYmIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGUgPSBhd2FpdCBzaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShhcHBDb21wb25lbnQpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGVEYXRhID0gc3RhcnR1cEFwcFN0YXRlPy5nZXREYXRhKCkgfHwge30sXG5cdFx0ZXh0ZW5kZWRQYXJhbWV0ZXJzID0gKHN0YXJ0dXBBcHBTdGF0ZURhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdHBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBpc0FjdGlvblxuXHRcdFx0PyBgLyR7KG9QYXJhbWV0ZXIgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZX1gXG5cdFx0XHQ6IChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGg/LigpLnNsaWNlKChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRjb25zdCBzUGFyYW1ldGVyTmFtZSA9IGlzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKGFjdGlvbkRlZmF1bHRWYWx1ZXMgJiYgaXNDcmVhdGUpIHtcblx0XHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnRUeXBlID0gKFxuXHRcdFx0XHRvUGFyYW1ldGVyIGFzIHtcblx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0dHlwZT86IHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0KS50eXBlXG5cdFx0XHRcdD8gVHlwZU1hcC5nZXRCYXNlVHlwZShcblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS50eXBlXG5cdFx0XHRcdCAgKVxuXHRcdFx0XHQ6IEJhc2VUeXBlLlN0cmluZztcblx0XHRcdGNvbnN0IHR5cGVJbnN0YW5jZSA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVJbnN0YW5jZShwYXJhbWV0ZXJ0VHlwZSk7XG5cdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCB0eXBlSW5zdGFuY2UucGFyc2VWYWx1ZShzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0sIFwic3RyaW5nXCIpKTtcblx0XHR9IGVsc2UgaWYgKGV4dGVuZGVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9FeHRlbmRlZFBhcmFtZXRlciBvZiBleHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGhcblx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1JhbmdlICYmIG9SYW5nZS5TaWduID09PSBcIklcIiAmJiBvUmFuZ2UuT3B0aW9uID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBJbmJvdW5kUGFyYW1ldGVyID0ge1xuXHR1c2VGb3JDcmVhdGU6IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShcblx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+LFxuXHRvSW5ib3VuZFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBJbmJvdW5kUGFyYW1ldGVyPlxuKTogdW5rbm93biB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9XG5cdFx0XHRvSW5ib3VuZHMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYUNyZWF0ZVBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gZWxlbWVudDtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXIgPSB7XG5cdHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyVmFsdWU+O1xuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0YWN0aW9uPzogc3RyaW5nO1xufTtcbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZSA9IHtcblx0dmFsdWU/OiB7XG5cdFx0dmFsdWU/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHR9O1xufTtcbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IE91dGJvdW5kUGFyYW1ldGVyKTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W10ge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXSA9IFtdO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3N0cmljdC1ib29sZWFuLWV4cHJlc3Npb25zXG5cdGlmIChvT3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kLnBhcmFtZXRlcnMpIHx8IFtdO1xuXHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzW3NQYXJhbV07XG5cdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwiYmluZGluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gdXNpbmcgdGhlIGZvcm1hdCBvZiBVSS5NYXBwaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzUGFyYW1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gY2hlY2sgaWYgdGhlIHNlbWFudGljT2JqZWN0IE1hcHBpbmcgaXMgZG9uZSBmb3IgdGhlIHNhbWUgbG9jYWwgcHJvcGVydHkgbW9yZSB0aGF0IG9uY2UgdGhlbiBmaXJzdCBvbmUgd2lsbCBiZSBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5Mb2NhbFByb3BlcnR5Py4kUHJvcGVydHlQYXRoICE9PSBvU2VtYW50aWNNYXBwaW5nLkxvY2FsUHJvcGVydHkuJFByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1hbnRpY09iamVjdE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0b0Nyb3NzTmF2OiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlcj5cbik6IFJlY29yZDxcblx0c3RyaW5nLFxuXHR7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdO1xuXHR9XG4+IHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXTtcblx0XHR9XG5cdD4gPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRuYXZpZ2F0aW9uPzoge1xuXHRcdFx0XHR0YXJnZXRPdXRib3VuZD86IHtcblx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9XG5cdD47XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgfHwgY29uZmlnLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpKSB7XG5cdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24/LnRhcmdldE91dGJvdW5kPy5vdXRib3VuZDtcblx0XHRcdGlmIChzT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciAke3NPdXRib3VuZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5cbmZ1bmN0aW9uIHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogdW5rbm93bik6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb01hcHBpbmdzKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdChlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0ZWxlbWVudFtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRpZiAob1NlbGVjdE9wdGlvbikge1xuXHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxudHlwZSBTZW1hbnRpY09iamVjdEZyb21QYXRoID0ge1xuXHRzZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH1bXTtcblx0c2VtYW50aWNPYmplY3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdDogeyAkUGF0aDogc3RyaW5nIH07XG5cdH07XG5cdHVuYXZhaWxhYmxlQWN0aW9uczogc3RyaW5nW107XG59O1xuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQYXRoOiBzdHJpbmcsXG5cdHNRdWFsaWZpZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGxldCBzU2VtYW50aWNPYmplY3QsIGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAoc1F1YWxpZmllciA9PT0gXCJcIikge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9IyR7c1F1YWxpZmllcn1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9IyR7c1F1YWxpZmllcn1gXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNQYXRoOiBzdHJpbmcsIHNRdWFsaWZpZXI6IHN0cmluZyk6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbCwgc1BhdGgsIHNRdWFsaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pOiBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHt9O1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHkgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uPzogTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPixcblx0c1Jlc3RyaWN0aW9uPzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dKSB7XG5cdFx0YVByb3BzID0gKFxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dIGFzIEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+W11cblx0XHQpLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPikge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhUHJvcHM7XG59XG5cbmZ1bmN0aW9uIF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKHBhdGhzOiBzdHJpbmdbXSwgbmF2UGF0aDogc3RyaW5nLCBwcm9wczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IG5hdlBhdGhQcmVmaXggPSBuYXZQYXRoICsgXCIvXCI7XG5cdHJldHVybiBwYXRocy5yZWR1Y2UoKG91dFBhdGhzOiBzdHJpbmdbXSwgcGF0aFRvQ2hlY2s6IHN0cmluZykgPT4ge1xuXHRcdGlmIChwYXRoVG9DaGVjay5zdGFydHNXaXRoKG5hdlBhdGhQcmVmaXgpKSB7XG5cdFx0XHRjb25zdCBvdXRQYXRoID0gcGF0aFRvQ2hlY2sucmVwbGFjZShuYXZQYXRoUHJlZml4LCBcIlwiKTtcblx0XHRcdGlmICghb3V0UGF0aHMuaW5jbHVkZXMob3V0UGF0aCkpIHtcblx0XHRcdFx0b3V0UGF0aHMucHVzaChvdXRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dFBhdGhzO1xuXHR9LCBwcm9wcyk7XG59XG50eXBlIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5leHBvcnQgdHlwZSBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRSZXF1aXJlZFByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogc3RyaW5nW107XG5cdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoZW50aXR5UGF0aDogc3RyaW5nLCBvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwpOiBfRmlsdGVyUmVzdHJpY3Rpb25zIHtcblx0Y29uc3Qgb1JldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdH07XG5cdGxldCBvRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGV4dCA9IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0Y29uc3QgZnJUZXJtID0gXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIjtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGhQYXJ0cyA9IGVudGl0eVBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikuc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9L2A7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGVudGl0eVBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aFBhcnRzID0gZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgaXNDb250YWlubWVudCA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH0kQ29udGFpbnNUYXJnZXRgKTtcblx0Y29uc3QgY29udGFpbm1lbnROYXZQYXRoID0gISFpc0NvbnRhaW5tZW50ICYmIGVudGl0eVR5cGVQYXRoUGFydHNbZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblxuXHQvL0xFQVNUIFBSSU9SSVRZIC0gRmlsdGVyIHJlc3RyaWN0aW9ucyBkaXJlY3RseSBhdCBFbnRpdHkgU2V0XG5cdC8vZS5nLiBGUiBpbiBcIk5TLkVudGl0eUNvbnRhaW5lci9TYWxlc09yZGVyTWFuYWdlXCIgQ29udGV4dFBhdGg6IC9TYWxlc09yZGVyTWFuYWdlXG5cdGlmICghaXNDb250YWlubWVudCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdGNvbnN0IHJlc3VsdENvbnRleHRDaGVjayA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRpZiAoIXJlc3VsdENvbnRleHRDaGVjaykge1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdH1cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zKSB8fCB7fTtcblx0fVxuXG5cdGlmIChlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRjb25zdCBuYXZQYXRoID0gaXNDb250YWlubWVudCA/IChjb250YWlubWVudE5hdlBhdGggYXMgc3RyaW5nKSA6IGVudGl0eVNldFBhdGhQYXJ0c1tlbnRpdHlTZXRQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb250YWlubWVudCB3ZSB0YWtlIGVudGl0eVNldCBwcm92aWRlZCBhcyBwYXJlbnQuIEFuZCBpbiBjYXNlIG9mIG5vcm1hbCB3ZSB3b3VsZCByZW1vdmUgdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIGVudGl0eVNldFBhdGguXG5cdFx0Y29uc3QgcGFyZW50RW50aXR5U2V0UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBlbnRpdHlTZXRQYXRoIDogYC8ke2VudGl0eVNldFBhdGhQYXJ0cy5zbGljZSgwLCAtMSkuam9pbihgLyR7bmF2aWdhdGlvblRleHR9L2ApfWA7XG5cdFx0Ly9USElSRCBISUdIRVNUIFBSSU9SSVRZIC0gUmVhZGluZyBwcm9wZXJ0eSBwYXRoIHJlc3RyaWN0aW9ucyAtIEFubm90YXRpb24gYXQgbWFpbiBlbnRpdHkgYnV0IGRpcmVjdGx5IG9uIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aFxuXHRcdC8vZS5nLiBQYXJlbnQgQ3VzdG9tZXIgd2l0aCBQcm9wZXJ0eVBhdGg9XCJTZXQvQ2l0eU5hbWVcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb1BhcmVudFJldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdFx0fTtcblx0XHRpZiAoIW5hdlBhdGguaW5jbHVkZXMoXCIlMkZcIikpIHtcblx0XHRcdGNvbnN0IG9QYXJlbnRGUiA9IG9Db250ZXh0LmdldE9iamVjdChgJHtwYXJlbnRFbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRjb25zdCBjb21wbGV0ZUFsbG93ZWRFeHBzID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob1BhcmVudEZSKSB8fCB7fTtcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gT2JqZWN0LmtleXMoY29tcGxldGVBbGxvd2VkRXhwcykucmVkdWNlKFxuXHRcdFx0XHQob3V0UHJvcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LCBwcm9wUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHByb3BQYXRoLnN0YXJ0c1dpdGgobmF2UGF0aCArIFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0UHJvcFBhdGggPSBwcm9wUGF0aC5yZXBsYWNlKG5hdlBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0XHRcdFx0XHRvdXRQcm9wW291dFByb3BQYXRoXSA9IGNvbXBsZXRlQWxsb3dlZEV4cHNbcHJvcFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3V0UHJvcDtcblx0XHRcdFx0fSxcblx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9TRUNPTkQgSElHSEVTVCBwcmlvcml0eSAtIE5hdmlnYXRpb24gcmVzdHJpY3Rpb25zXG5cdFx0Ly9lLmcuIFBhcmVudCBcIi9DdXN0b21lclwiIHdpdGggTmF2aWdhdGlvblByb3BlcnR5UGF0aD1cIlNldFwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvTmF2UmVzdHJpY3Rpb25zID0gTWV0YU1vZGVsRnVuY3Rpb24uZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvQ29udGV4dCwgcGFyZW50RW50aXR5U2V0UGF0aCwgbmF2UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKSk7XG5cdFx0Y29uc3Qgb05hdkZpbHRlclJlc3QgPSBvTmF2UmVzdHJpY3Rpb25zICYmIChvTmF2UmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pO1xuXHRcdGNvbnN0IG5hdlJlc1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdlJlc1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2Tm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2Tm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob05hdkZpbHRlclJlc3QpIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL0hJR0hFU1QgcHJpb3JpdHkgLSBSZXN0cmljdGlvbnMgaGF2aW5nIHRhcmdldCB3aXRoIG5hdmlnYXRpb24gYXNzb2NpYXRpb24gZW50aXR5XG5cdFx0Ly8gZS5nLiBGUiBpbiBcIkN1c3RvbWVyUGFyYW1ldGVycy9TZXRcIiBDb250ZXh0UGF0aDogXCJDdXN0b21lci9TZXRcIlxuXHRcdGNvbnN0IG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCA9IG9Db250ZXh0LmdldE9iamVjdChcblx0XHRcdGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfSR7ZnJUZXJtfWBcblx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT47XG5cdFx0Y29uc3QgbmF2QXNzb2NSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdkFzc29jTm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jTm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zLFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24obmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0KSB8fCB7fVxuXHRcdCkgYXMgX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cblxuZXhwb3J0IHR5cGUgUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudDtcblx0YmluZGluZ0NvbnRleHRzOiBvYmplY3Q7XG5cdG1vZGVsczogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIEJhc2VUcmVlTW9kaWZpZXIgPSB7XG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdHNGcmFnbWVudE5hbWU6IHN0cmluZyxcblx0XHRtUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdG9WaWV3PzogVmlld1xuXHQpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdHRhcmdldHM6IHN0cmluZztcblx0Z2V0SWQodkNvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50KTogc3RyaW5nO1xuXHRnZXRDb250cm9sVHlwZShvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQpOiBzdHJpbmc7XG5cdGdldFByb3BlcnR5PFQ+KG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCwgc1Byb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxUPjtcblx0Z2V0QWdncmVnYXRpb24ocGFyZW50OiBVSTVFbGVtZW50IHwgRWxlbWVudCwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxVSTVFbGVtZW50W10gfCBFbGVtZW50W10+O1xuXHRpbnNlcnRBZ2dyZWdhdGlvbihcblx0XHRwYXJlbnQ6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG5hbWU6IHN0cmluZyxcblx0XHRjb250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXSxcblx0XHRpbmRleD86IG51bWJlcixcblx0XHR2aWV3PzogRWxlbWVudCxcblx0XHRza2lwQWRqdXN0SW5kZXg/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD47XG5cdHNldFByb3BlcnR5KG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCwgc1Byb3BlcnR5TmFtZTogc3RyaW5nLCB2VmFsdWU6IHVua25vd24pOiB2b2lkO1xuXHRieVNlbGVjdG9yKG9TZWxlY3Rvcjogb2JqZWN0LCBvQXBwQ29tcG9uZW50PzogQ29tcG9uZW50LCBvVmlldz86IEVsZW1lbnQpOiBNYW5hZ2VkT2JqZWN0IHwgRWxlbWVudDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRzRnJhZ21lbnROYW1lOiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbCxcblx0b1ByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0b0luT3B0aW9ucz86IHsgdmlldz86IFZpZXc7IGlzWE1MPzogYm9vbGVhbjsgaWQ/OiBzdHJpbmc7IGNvbnRyb2xsZXI/OiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSTsgY29udGFpbmluZ1ZpZXc/OiBWaWV3IH0sXG5cdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8RWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10+IHtcblx0Y29uc3Qgb09wdGlvbnMgPSBvSW5PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyICYmIHR5cGVvZiBzRnJhZ21lbnROYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudCkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGZyYWdtZW50RGF0YSA9XG5cdFx0XHR0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIiA/IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpIDogc0ZyYWdtZW50TmFtZTtcblx0XHRjb25zdCBvRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhmcmFnbWVudERhdGEsIHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdFx0fVxuXHRcdGxldCBvd25lcjogeyBydW5Bc093bmVyOiA8VD4oZm46ICgpID0+IFQpID0+IFQgfSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5hcHBDb21wb25lbnQgPz8geyBydW5Bc093bmVyOiAoZm4pID0+IGZuKCkgfTtcblx0XHRpZiAob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpIHtcblx0XHRcdGNvbnN0IHZpZXdPd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvT3B0aW9ucy5jb250YWluaW5nVmlldyk7XG5cdFx0XHRpZiAodmlld093bmVyKSB7XG5cdFx0XHRcdG93bmVyID0gdmlld093bmVyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgY29udGFpbmluZ1ZpZXc6IFZpZXcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9PcHRpb25zLnZpZXcgJiYgIW9PcHRpb25zLmNvbnRyb2xsZXIpIHtcblx0XHRcdC8vIHRoaXMgaXMgb3ZlcmFsbCBzdHVwaWQsIGluIGNhc2Ugd2UgYXJlIGNvbWluZyBmcm9tIHRoZSBkZWxlZ2F0ZSB3aXRoIGFuIHhtbCBub2RlIGluc3RlYWQgb2YgYSBmcmFnbWVudCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbnRhaW5pbmdWaWV3IGluIHRoZXJlIChkb25lIGJ5IHRoZSBvTW9kaWZpZXIgY2FsbCBmb3IgaW5zdGFuY2UpXG5cdFx0XHQvLyBCdXQgaW4gb3RoZXIgcnVudGltZSBjYXNlIHdoZXJlIHdlIGFyZSBoZXJlIHdlIG5lZWQgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2xsZXIgYW5kIHRodXMgY2Fubm90IGhhdmUgYSBjb250YWluaW5nVmlldy4uLlxuXHRcdFx0Y29udGFpbmluZ1ZpZXcgPSBvT3B0aW9ucy52aWV3O1xuXHRcdH1cblx0XHRyZXR1cm4gb3duZXIucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGlkOiBvT3B0aW9ucy5pZCxcblx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogY29udGFpbmluZ1ZpZXdcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG4vLyBHZXQgdGhlIHBhdGggZm9yIGFjdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXMgbmVlZGVkIHRvIHJlYWQgdGhlIGFubm90YXRpb25zXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJQYXRoKHNQYXRoOiBzdHJpbmcsIHNQYXJhbWV0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzQ29udGV4dDtcblx0aWYgKHNQYXRoLmluY2x1ZGVzKFwiQCR1aTUub3ZlcmxvYWRcIikpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogR2V0IHJlc29sdmVkIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIGZvciB0ZXh0cyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4cEJpbmRpbmdcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBBIHN0cmluZyBhZnRlciByZXNvbHV0aW9uLlxuICovXG5mdW5jdGlvbiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKGV4cEJpbmRpbmc6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdC8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gY3JlYXRlIGR1bW15IGVsZW1lbnQgd2l0aCB0aGUgZXhwcmVzaW9uIGJpbmRpbmcuXG5cdC8vIEFkZGluZyBpdCBhcyBkZXBlbmRlbnQgdG8gdGhlIHZpZXcvY29udHJvbCB3b3VsZCBwcm9wYWdhdGUgYWxsIHRoZSBtb2RlbHMgdG8gdGhlIGR1bW15IGVsZW1lbnQgYW5kIHJlc29sdmUgdGhlIGJpbmRpbmcuXG5cdC8vIFdlIHJlbW92ZSB0aGUgZHVtbXkgZWxlbWVudCBhZnRlciB0aGF0IGFuZCBkZXN0cm95IGl0LlxuXG5cdGNvbnN0IGFueVJlc291cmNlVGV4dCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogZXhwQmluZGluZyB9KTtcblx0Y29udHJvbC5hZGREZXBlbmRlbnQoYW55UmVzb3VyY2VUZXh0KTtcblx0Y29uc3QgcmVzdWx0VGV4dCA9IGFueVJlc291cmNlVGV4dC5nZXRBbnlUZXh0KCk7XG5cdGNvbnRyb2wucmVtb3ZlRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGFueVJlc291cmNlVGV4dC5kZXN0cm95KCk7XG5cblx0cmV0dXJuIHJlc3VsdFRleHQ7XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGRldmljZSBoYXMgYSBzbWFsbCBzY3JlZW4uXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4uXG4gKi9cbmZ1bmN0aW9uIGlzU21hbGxEZXZpY2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiAhRGV2aWNlLnN5c3RlbS5kZXNrdG9wIHx8IERldmljZS5yZXNpemUud2lkdGggPD0gMzIwO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlcnMuXG4gKiBAcGFyYW0gY29udHJvbCBNREMgQ2hhcnQsIE1EQyBUYWJsZSBvciBNdWx0aVZpZXcgY29udHJvbCBvbiB3aGljaCB0aGUgZmlsdGVycyBhcmUgYXBwbGllZFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbihjb250cm9sOiBDb250cm9sIHwgTURDQ2hhcnQgfCBNRENUYWJsZSwgYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IEZpbHRlcltdIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHN2Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtjb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpfSR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdGNvbnN0IHByb3BlcnR5RmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyW10+ID0ge307XG5cdGxldCBhbm5vdGF0aW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhzdkNvbnRleHQpLnRhcmdldE9iamVjdDtcblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdGFubm90YXRpb24gPSBhbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHRpZiAoIWFubm90YXRpb24gfHwgIWlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25WYXJpYW50VHlwZT4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0KGFubm90YXRpb24uU2VsZWN0T3B0aW9ucyB8fCBbXSkuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LiR0YXJnZXQgJiYgc2VsZWN0T3B0aW9uLlJhbmdlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIHNlbGVjdE9wdGlvbi5SYW5nZXMpIHtcblx0XHRcdFx0Y29uc3QgcmFuZ2UgPSBnZXRSYW5nZURlZmluaXRpb24oc2VsZWN0T3B0aW9uLlJhbmdlc1tqXSwgcHJvcGVydHlUeXBlKTtcblx0XHRcdFx0cHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPSAocHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPz8gW10pLmNvbmNhdChcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGZvciAoY29uc3QgcGF0aCBpbiBwcm9wZXJ0eUZpbHRlcnMpIHtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogcHJvcGVydHlGaWx0ZXJzW3BhdGhdLFxuXHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKFxuXHRzTWV0YVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNFbnRpdHlTZXQ6IHN0cmluZyxcblx0b0RpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNNZXRhUGF0aCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oc0VudGl0eVNldCwgb0NvbnRleHQgfHwgb01ldGFNb2RlbCwgb0RpYWdub3N0aWNzLCBtZXJnZU9iamVjdHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cbiAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuICogQHBhcmFtIHByb2dyYW1taW5nTW9kZWxcbiAqIEBwYXJhbSB2aWV3XG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb290Q29udGV4dChwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsIHZpZXc6IFZpZXcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0Y29uc3Qgcm9vdENvbnRleHRQYXRoID1cblx0XHRcdHByb2dyYW1taW5nTW9kZWwgPT09IFwiRHJhZnRcIiA/IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCkgOiBNb2RlbEhlbHBlci5nZXRTdGlja3lSb290UGF0aChjb250ZXh0KTtcblx0XHRsZXQgc2ltcGxlUm9vdENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChyb290Q29udGV4dFBhdGgpIHtcblx0XHRcdC8vIENoZWNrIGlmIGEgdmlldyBtYXRjaGVzIHdpdGggdGhlIGRyYWZ0IHJvb3QgcGF0aFxuXHRcdFx0Y29uc3QgZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0LmZpbmQoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHNpbXBsZVJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQocm9vdENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZVJvb3RDb250ZXh0KTtcblx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiLCBzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBnZXRJc0VkaXRhYmxlKGNvbnRyb2w6IENvbnRyb2wgfCBQYWdlQ29udHJvbGxlcik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKGNvbnRyb2wuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWwpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0ZmlyZUJ1dHRvblByZXNzOiBmbkZpcmVCdXR0b25QcmVzcyxcblx0Z2V0VGFyZ2V0VmlldzogZ2V0VGFyZ2V0Vmlldyxcblx0Z2V0Q3VycmVudFBhZ2VWaWV3OiBnZXRDdXJyZW50UGFnZVZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0RW50aXR5U2V0TmFtZTogZ2V0RW50aXR5U2V0TmFtZSxcblx0Z2V0QWN0aW9uUGF0aDogZ2V0QWN0aW9uUGF0aCxcblx0Y29tcHV0ZURpc3BsYXlNb2RlOiBjb21wdXRlRGlzcGxheU1vZGUsXG5cdGlzU3RpY2t5RWRpdE1vZGU6IGlzU3RpY2t5RWRpdE1vZGUsXG5cdGdldE9wZXJhdG9yc0Zvckd1aWRQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5LFxuXHRhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudDogYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGg6IGZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgsXG5cdHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkOiB3YWl0Rm9yQ29udGV4dFJlcXVlc3RlZCxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZTogc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHM6IHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyxcblx0cmVxdWVzdFByb3BlcnR5OiByZXF1ZXN0UHJvcGVydHksXG5cdGdldFBhcmFtZXRlclBhdGg6IGdldFBhcmFtZXRlclBhdGgsXG5cdGdldFJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMsXG5cdGdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmc6IF9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmcsXG5cdHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbDogdXBkYXRlUmVsYXRlQXBwc01vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zOiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyxcblx0Z2V0RmlsdGVyc0Zyb21Bbm5vdGF0aW9uOiBnZXRGaWx0ZXJzRnJvbUFubm90YXRpb24sXG5cdGNyZWF0ZVJvb3RDb250ZXh0OiBjcmVhdGVSb290Q29udGV4dCxcblx0dXBkYXRlTWVudUJ1dHRvblZpc2libGl0eTogdXBkYXRlTWVudUJ1dHRvblZpc2libGl0eSxcblx0aXNTbWFsbERldmljZSxcblx0Z2V0Q29udmVydGVyQ29udGV4dEZvclBhdGgsXG5cdGdldElzRWRpdGFibGU6IGdldElzRWRpdGFibGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RUEsU0FBU0EsbUJBQW1CQSxDQUFDQyxXQUFtQixFQUFzQjtJQUNyRSxJQUFJLENBQUNBLFdBQVcsRUFBRTtNQUNqQixPQUFPQyxTQUFTO0lBQ2pCO0lBRUEsT0FBT0QsV0FBVyxDQUNoQkUsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FDbEJBLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFBQSxDQUN2QkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUNaQyxNQUFNLENBQUMsVUFBVUMsV0FBK0IsRUFBRUMsWUFBb0IsRUFBRTtNQUN4RSxJQUFJQSxZQUFZLEtBQUssRUFBRSxFQUFFO1FBQ3hCRCxXQUFXLEdBQUcsR0FBR0EsV0FBVyxHQUFHLEdBQUdBLFdBQVcsR0FBRyxHQUFHLEVBQUUsSUFBSUMsWUFBWSxHQUFHO01BQ3pFO01BQ0EsT0FBT0QsV0FBVztJQUNuQixDQUFDLEVBQUVKLFNBQVMsQ0FBQztFQUNmO0VBRUEsZUFBZU0sdUJBQXVCQSxDQUFDQyxjQUE4QixFQUFpQjtJQUFBLElBQUFDLHFCQUFBO0lBQ3JGLE1BQU1DLEtBQUssR0FBR0YsY0FBYyxDQUFDRyxRQUFRLENBQUMsQ0FBQztJQUN2QyxNQUFNQyxTQUFTLEdBQUdGLEtBQUssQ0FBQ0csWUFBWSxDQUFDLENBQUM7SUFDdEMsTUFBTUMsVUFBVSxHQUFHRixTQUFTLENBQUNHLFdBQVcsQ0FBQ1AsY0FBYyxDQUFDUSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU1DLFNBQVMsR0FBR0Msa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDUCxTQUFTLENBQUNRLFVBQVUsQ0FBQ04sVUFBVSxDQUFDLENBQUM7SUFDbEcsTUFBTU4sY0FBYyxD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
|
|
1126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVTZWFyY2hUZXJtIiwic1NlYXJjaFRlcm0iLCJ1bmRlZmluZWQiLCJjb252ZXJ0ZWRTZWFyY2hUZXJtIiwicmVwbGFjZSIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsImdldE1vZGVsIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZW50aXR5UGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsImRhdGFNb2RlbCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImdldENvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJ0YXJnZXRFbnRpdHlUeXBlIiwia2V5cyIsIm5hbWUiLCJmbkhhc1RyYW5zaWVudENvbnRleHRzIiwib0xpc3RCaW5kaW5nIiwiYkhhc1RyYW5zaWVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZm9yRWFjaCIsIm9Db250ZXh0IiwiaXNUcmFuc2llbnQiLCJfZ2V0U09JbnRlbnRzIiwib1NoZWxsU2VydmljZUhlbHBlciIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJvU2VtYW50aWNNYXBwaW5nIiwiZWxlbWVudCIsIkxvY2FsUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eSIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJsaW5rR3JvdXAiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsImFBbGxvd2VkQWN0aW9ucyIsImxpbmtzIiwib0xpbmsiLCJzSW50ZW50IiwiaW50ZW50Iiwic0FjdGlvbiIsInNwbGl0IiwiaW5jbHVkZXMiLCJ0ZXh0IiwidGFyZ2V0U2VtT2JqZWN0IiwidGFyZ2V0QWN0aW9uIiwidGFyZ2V0UGFyYW1zIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwiYUxpbmtzIiwibGVuZ3RoIiwiYWxsb3dlZEFjdGlvbnMiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJtYXBwaW5nIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwiX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbiIsInNlbWFudGljT2JqZWN0QW5kQWN0aW9uIiwiYXBwQ29tcG9uZW50U09JdGVtcyIsImFjdGlvbnMiLCJhY3Rpb24iLCJleGNsdWRlZEFjdGlvbnMiLCJzb01hcHBpbmdzIiwidXBkYXRlUmVsYXRlQXBwc01vZGVsIiwib0VudHJ5IiwiYVNlbUtleXMiLCJvTWV0YU1vZGVsIiwib01ldGFQYXRoIiwiYXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImFNYW5pZmVzdFNPS2V5cyIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwic1NlbUtleSIsInZhbHVlIiwiYVRlY2huaWNhbEtleXMiLCJnZXRPYmplY3QiLCJrZXkiLCJzT2JqS2V5Iiwib01hbmlmZXN0RGF0YSIsImdldFRhcmdldFZpZXciLCJnZXRWaWV3RGF0YSIsInNlbWFudGljT2JqZWN0SW50ZW50cyIsImFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwiZmVFbnZpcm9ubWVudCIsImdldEludGVudCIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QiLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVNldFBhdGgiLCJzRW50aXR5VHlwZVBhdGgiLCJvRW50aXR5U2V0QW5ub3RhdGlvbnMiLCJDb21tb25VdGlscyIsImdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsIl9yZWYiLCJzb0l0ZW1zIiwiY29uY2F0Iiwic2V0UHJvcGVydHkiLCJlcnJvciIsIkxvZyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInRoZW4iLCJyZXF1ZXN0ZWRPYmplY3QiLCJjYXRjaCIsIm9FcnJvciIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImlzQSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib0NvbnRyb2wiLCJvT3duZXIiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsIkVycm9yIiwiZ2V0Q3VycmVudFBhZ2VWaWV3Iiwib0FwcENvbXBvbmVudCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsImdldFBhcmVudCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJtZXRhTW9kZWxDb250ZXh0Iiwic0NvbnRleHRQYXRoIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJoYXNPd25Qcm9wZXJ0eSIsInRlc3QiLCIka2luZCIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsIm9NZW51IiwiZ2V0TWVudSIsImdldEl0ZW1zIiwib0l0ZW0iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImlzU3RpY2t5IiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJmbkdldExpbmtzIiwib0RhdGEiLCJhS2V5cyIsImluZGV4T2YiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0SWQiLCJzaGVsbE5hdmlnYXRpb25Ob3RBdmFpbGFibGUiLCJ1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5IiwiSUJOQWN0aW9ucyIsIm1lbnVCdXR0b25XaXRoSUJOQWN0aW9uIiwiSUJOQWN0aW9uIiwibWVudUFjdGlvbiIsIm1lbnVJdGVtcyIsInZpc2libGVNZW51SXRlbXMiLCJmaWx0ZXIiLCJtZW51SXRlbSIsImdldEFjdGlvblBhdGgiLCJhY3Rpb25Db250ZXh0IiwiYlJldHVybk9ubHlQYXRoIiwiaW5BY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzQWN0aW9uTmFtZSIsInRvU3RyaW5nIiwic0VudGl0eVR5cGVOYW1lIiwiJFR5cGUiLCJzRW50aXR5TmFtZSIsImdldEVudGl0eVNldE5hbWUiLCJzUHJvcGVydHkiLCJzQmluZGluZ1BhcmFtZXRlciIsInNFbnRpdHlUeXBlIiwib0VudGl0eUNvbnRhaW5lciIsImNvbXB1dGVEaXNwbGF5TW9kZSIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwib0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyIsIm9UZXh0QW5ub3RhdGlvbiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJfZ2V0RW50aXR5VHlwZSIsIl9yZXF1ZXN0T2JqZWN0Iiwib1NlbGVjdGVkQ29udGV4dCIsIm5CcmFja2V0SW5kZXgiLCJzVGFyZ2V0VHlwZSIsInNsaWNlIiwic0N1cnJlbnRUeXBlIiwiZ2V0QmluZGluZyIsIndhcm5pbmciLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJmb3JDb250ZXh0TWVudSIsImFyZ3VtZW50cyIsImFsbCIsImFSZXN1bHRzIiwiYUFwcGxpY2FibGVDb250ZXh0cyIsImFOb3RBcHBsaWNhYmxlQ29udGV4dHMiLCJhUmVzdWx0Iiwic2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhcHBsaWNhYmxlIiwibm90QXBwbGljYWJsZSIsImR5bmFtaWNBY3Rpb25QYXRoUHJlZml4IiwiaW50ZXJuYWxNb2RlbCIsImFwcGxpY2FibGVQcm9wZXJ0eSIsIm5vdEFwcGxpY2FibGVQcm9wZXJ0eSIsImdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24iLCJhRXhwcmVzc2lvbnMiLCJhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkiLCJBbGxvd2VkRXhwcmVzc2lvbnNQcmlvIiwic29ydCIsImEiLCJiIiwiZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5IiwiYWxsb3dlZE9wZXJhdG9yc0Zvckd1aWQiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwibWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQiLCJ0b0pTT05TdHJpbmciLCJpc1N0aWNreUVkaXRNb2RlIiwiYklzU3RpY2t5TW9kZSIsImJVSUVkaXRhYmxlIiwiZ2V0SXNFZGl0YWJsZSIsInNldFVzZXJEZWZhdWx0cyIsInBhcmFtZXRlcnMiLCJpc0FjdGlvbiIsImlzQ3JlYXRlIiwiYWN0aW9uRGVmYXVsdFZhbHVlcyIsIkJhc2VUeXBlIiwiX191aTVfcmVxdWlyZV9hc3luYyIsImRlZmF1bHQiLCJUeXBlTWFwIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJzaGVsbFNlcnZpY2VzIiwic3RhcnR1cEFwcFN0YXRlIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwic3RhcnR1cEFwcFN0YXRlRGF0YSIsImdldERhdGEiLCJleHRlbmRlZFBhcmFtZXRlcnMiLCJzZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsIm9QYXJhbWV0ZXIiLCJzUHJvcGVydHlOYW1lIiwic1BhcmFtZXRlck5hbWUiLCJwYXJhbWV0ZXJ0VHlwZSIsInR5cGUiLCJnZXRCYXNlVHlwZSIsIlN0cmluZyIsInR5cGVJbnN0YW5jZSIsImdldERhdGFUeXBlSW5zdGFuY2UiLCJwYXJzZVZhbHVlIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvU3RhcnR1cFBhcmFtZXRlcnMiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiYVBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJzT3V0Ym91bmQiLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJvU2VsZWN0T3B0aW9uIiwiZ2V0U2VsZWN0T3B0aW9uIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJzUGF0aCIsImFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyIsImFTZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwic2VtYW50aWNPYmplY3RQYXRoIiwic2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJvUHJvcGVydHkiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldEZpbHRlclJlc3RyaWN0aW9ucyIsInNSZXN0cmljdGlvbiIsImFQcm9wcyIsIm1hcCIsIl9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoIiwicGF0aHMiLCJuYXZQYXRoIiwicHJvcHMiLCJuYXZQYXRoUHJlZml4IiwicmVkdWNlIiwib3V0UGF0aHMiLCJwYXRoVG9DaGVjayIsInN0YXJ0c1dpdGgiLCJvdXRQYXRoIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiUmVxdWlyZWRQcm9wZXJ0aWVzIiwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwibmF2aWdhdGlvblRleHQiLCJmclRlcm0iLCJlbnRpdHlUeXBlUGF0aFBhcnRzIiwicmVwbGFjZUFsbCIsImZpbHRlck91dE5hdlByb3BCaW5kaW5nIiwiZW50aXR5VHlwZVBhdGgiLCJqb2luIiwiZW50aXR5U2V0UGF0aCIsImdldEVudGl0eVNldFBhdGgiLCJlbnRpdHlTZXRQYXRoUGFydHMiLCJpc0NvbnRhaW5tZW50IiwiY29udGFpbm1lbnROYXZQYXRoIiwicmVzdWx0Q29udGV4dENoZWNrIiwicGFyZW50RW50aXR5U2V0UGF0aCIsIm9QYXJlbnRSZXQiLCJvUGFyZW50RlIiLCJjb21wbGV0ZUFsbG93ZWRFeHBzIiwib3V0UHJvcCIsInByb3BQYXRoIiwib3V0UHJvcFBhdGgiLCJtZXJnZU9iamVjdHMiLCJvTmF2UmVzdHJpY3Rpb25zIiwiTWV0YU1vZGVsRnVuY3Rpb24iLCJnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zIiwib05hdkZpbHRlclJlc3QiLCJuYXZSZXNSZXFQcm9wcyIsInVuaXF1ZVNvcnQiLCJuYXZOb25GaWx0ZXJQcm9wcyIsIm5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCIsIm5hdkFzc29jUmVxUHJvcHMiLCJuYXZBc3NvY05vbkZpbHRlclByb3BzIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJzRnJhZ21lbnROYW1lIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwib0luT3B0aW9ucyIsIm9Nb2RpZmllciIsIm9PcHRpb25zIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJmcmFnbWVudERhdGEiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwib3duZXIiLCJydW5Bc093bmVyIiwiZm4iLCJjb250YWluaW5nVmlldyIsInZpZXdPd25lciIsImNvbnRyb2xsZXIiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJnZXRTaW5nbGV0b25QYXRoIiwicGFydHMiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwibmF2aWdhdGlvblBhdGgiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25OYW1lIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiZ2V0UGFyYW1ldGVyUGF0aCIsInNDb250ZXh0IiwiYUFjdGlvbiIsIl9mbnRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciLCJleHBCaW5kaW5nIiwiY29udHJvbCIsImFueVJlc291cmNlVGV4dCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0IiwiYWRkRGVwZW5kZW50IiwicmVzdWx0VGV4dCIsImdldEFueVRleHQiLCJyZW1vdmVEZXBlbmRlbnQiLCJkZXN0cm95IiwiaXNTbWFsbERldmljZSIsIkRldmljZSIsInN5c3RlbSIsImRlc2t0b3AiLCJyZXNpemUiLCJ3aWR0aCIsImdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbiIsImFubm90YXRpb25QYXRoIiwic3ZDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJwcm9wZXJ0eUZpbHRlcnMiLCJhbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwiaXNBbm5vdGF0aW9uT2ZUeXBlIiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdE9wdGlvbiIsIiR0YXJnZXQiLCJwcm9wZXJ0eVR5cGUiLCJwcm9wZXJ0eVBhdGgiLCJqIiwicmFuZ2UiLCJnZXRSYW5nZURlZmluaXRpb24iLCJGaWx0ZXIiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiZmlsdGVycyIsImFuZCIsImdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoIiwic01ldGFQYXRoIiwic0VudGl0eVNldCIsIm9EaWFnbm9zdGljcyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImNyZWF0ZVJvb3RDb250ZXh0IiwicHJvZ3JhbW1pbmdNb2RlbCIsImNvbnRleHQiLCJyb290Q29udGV4dFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJzaW1wbGVSb290Q29udGV4dCIsImV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImZpbmQiLCJwYWdlVmlldyIsImdldFByb3BlcnR5IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJzb3VyY2UiLCJtYW5hZ2VkT2JqZWN0IiwiZ2V0VmlldyIsIklOTElORUVESVRfVVBEQVRFR1JPVVBJRCIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImdldElCTkFjdGlvbnMiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJnZXRSZWxhdGVkQXBwc01lbnVJdGVtcyIsImdldFRyYW5zbGF0ZWRUZXh0RnJvbUV4cEJpbmRpbmdTdHJpbmciXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uUGFyYW1ldGVyIGFzIEVkbUFjdGlvblBhcmFtZXRlciB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgKiBhcyBFZG0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9DYXBhYmlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nQWJzdHJhY3RUeXBlcyxcblx0U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzLFxuXHRTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHsgQ29tbW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgU2VsZWN0aW9uVmFyaWFudFR5cGUsIFRleHRBcnJhbmdlbWVudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdW5pcXVlU29ydCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9hcnJheS91bmlxdWVTb3J0XCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb21wb25lbnREYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCB0eXBlIE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIE92ZXJmbG93VG9vbGJhckJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgRnJhZ21lbnQgZnJvbSBcInNhcC91aS9jb3JlL0ZyYWdtZW50XCI7XG5pbXBvcnQgWE1MVGVtcGxhdGVQcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL1hNTFRlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBNRENDaGFydCB9IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL3ZhbHVlaGVscC9jb250ZW50L01EQ1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IExpbmsgfSBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0RXhwYW5kUGF0aFR5cGUsXG5cdE1ldGFNb2RlbEVudGl0eVR5cGUsXG5cdE1ldGFNb2RlbEVudW0sXG5cdE1ldGFNb2RlbE5hdlByb3BlcnR5LFxuXHRNZXRhTW9kZWxQcm9wZXJ0eSxcblx0TWV0YU1vZGVsVHlwZVxufSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgQW55RWxlbWVudCBmcm9tIFwiLi9jb250cm9scy9BbnlFbGVtZW50XCI7XG5pbXBvcnQgeyBnZXRSYW5nZURlZmluaXRpb24gfSBmcm9tIFwiLi9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsRnVuY3Rpb24gZnJvbSBcIi4vaGVscGVycy9NZXRhTW9kZWxGdW5jdGlvblwiO1xuXG50eXBlIE15SW5ib3hJbnRlbnQgPSB7XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdGFjdGlvbjogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFzU2VhcmNoVGVybSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgY29udmVydGVkU2VhcmNoVGVybSA9IHNTZWFyY2hUZXJtLnJlcGxhY2UoL1tcIigpO10vZywgXCIgXCIpOyAvLyB0aGVzZSBhcmUgdGhlIHNwZWNpZmljIGNoYXJhY3RlcnMgdGhhdCBmYWlsIG9uIGJvdGgsIENBUCBhbmQgUkFQOiBcIigpO1xuXHRpZiAoY29udmVydGVkU2VhcmNoVGVybSA9PT0gXCJcIiB8fCBjb252ZXJ0ZWRTZWFyY2hUZXJtID09PSBcIiBcIikge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0cmV0dXJuIGNvbnZlcnRlZFNlYXJjaFRlcm07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkKGJpbmRpbmdDb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBtb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBlbnRpdHlQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdGNvbnN0IGRhdGFNb2RlbCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQoZW50aXR5UGF0aCkpO1xuXHRhd2FpdCBiaW5kaW5nQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoZGF0YU1vZGVsLnRhcmdldEVudGl0eVR5cGUua2V5c1swXT8ubmFtZSk7XG59XG5cbmZ1bmN0aW9uIGZuSGFzVHJhbnNpZW50Q29udGV4dHMob0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nKTogYm9vbGVhbiB7XG5cdGxldCBiSGFzVHJhbnNpZW50Q29udGV4dHMgPSBmYWxzZTtcblx0aWYgKG9MaXN0QmluZGluZykge1xuXHRcdG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogT0RhdGFWNENvbnRleHQpIHtcblx0XHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc1RyYW5zaWVudCgpKSB7XG5cdFx0XHRcdGJIYXNUcmFuc2llbnRDb250ZXh0cyA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJIYXNUcmFuc2llbnRDb250ZXh0cztcbn1cblxuLy8gdGhlcmUgaXMgbm8gbmF2aWdhdGlvbiBpbiBlbnRpdHlTZXQgcGF0aCBhbmQgcHJvcGVydHkgcGF0aFxuXG5hc3luYyBmdW5jdGlvbiBfZ2V0U09JbnRlbnRzKFxuXHRvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdG9TZW1hbnRpY09iamVjdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRvUGFyYW06IG9iamVjdCB8IHVuZGVmaW5lZFxuKTogUHJvbWlzZTxMaW5rW11bXT4ge1xuXHRyZXR1cm4gb1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rcyhbXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRcdHBhcmFtczogb1BhcmFtXG5cdFx0fVxuXHRdKTtcbn1cblxudHlwZSBTT01hcHBpbmcgPSB7IExvY2FsUHJvcGVydHk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH07IFNlbWFudGljT2JqZWN0UHJvcGVydHk6IHVua25vd24gfTtcbi8vIFRPLURPIGFkZCB0aGlzIGFzIHBhcnQgb2YgYXBwbHlTZW1hbnRpY09iamVjdG1hcHBpbmdzIGxvZ2ljIGluIEludGVudEJhc2VkbmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuZnVuY3Rpb24gX2NyZWF0ZU1hcHBpbmdzKG9NYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFNPTWFwcGluZ1tdIHtcblx0Y29uc3QgYVNPTWFwcGluZ3M6IFNPTWFwcGluZ1tdID0gW107XG5cdGNvbnN0IGFNYXBwaW5nS2V5cyA9IE9iamVjdC5rZXlzKG9NYXBwaW5nKTtcblx0bGV0IG9TZW1hbnRpY01hcHBpbmc6IFNPTWFwcGluZztcblx0Zm9yIChjb25zdCBlbGVtZW50IG9mIGFNYXBwaW5nS2V5cykge1xuXHRcdG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRMb2NhbFByb3BlcnR5OiB7XG5cdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IGVsZW1lbnRcblx0XHRcdH0sXG5cdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBvTWFwcGluZ1tlbGVtZW50XVxuXHRcdH07XG5cdFx0YVNPTWFwcGluZ3MucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0fVxuXG5cdHJldHVybiBhU09NYXBwaW5ncztcbn1cbnR5cGUgU2VtYW50aWNJdGVtID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcblx0dGFyZ2V0UGFyYW1zOiB1bmtub3duO1xufTtcbi8qKlxuICogQHBhcmFtIGxpbmtHcm91cFxuICogQHBhcmFtIGFFeGNsdWRlZEFjdGlvbnNcbiAqIEBwYXJhbSBvVGFyZ2V0UGFyYW1zXG4gKiBAcGFyYW0gYUl0ZW1zXG4gKiBAcGFyYW0gYUFsbG93ZWRBY3Rpb25zXG4gKi9cbmZ1bmN0aW9uIF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhcblx0bGlua0dyb3VwOiBMaW5rW11bXSxcblx0YUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdLFxuXHRvVGFyZ2V0UGFyYW1zOiB1bmtub3duLFxuXHRhSXRlbXM6IFNlbWFudGljSXRlbVtdLFxuXHRhQWxsb3dlZEFjdGlvbnM/OiB1bmtub3duW11cbik6IHZvaWQge1xuXHRmb3IgKGNvbnN0IGxpbmtzIG9mIGxpbmtHcm91cCkge1xuXHRcdGZvciAoY29uc3Qgb0xpbmsgb2YgbGlua3MpIHtcblx0XHRcdGNvbnN0IHNJbnRlbnQgPSBvTGluay5pbnRlbnQ7XG5cdFx0XHRjb25zdCBzQWN0aW9uID0gc0ludGVudC5zcGxpdChcIi1cIilbMV0uc3BsaXQoXCI/XCIpWzBdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYUFsbG93ZWRBY3Rpb25zICYmIGFBbGxvd2VkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSkgfHxcblx0XHRcdFx0KCFhQWxsb3dlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucyAmJiAhYUV4Y2x1ZGVkQWN0aW9ucy5pbmNsdWRlcyhzQWN0aW9uKSlcblx0XHRcdCkge1xuXHRcdFx0XHRhSXRlbXMucHVzaCh7XG5cdFx0XHRcdFx0dGV4dDogb0xpbmsudGV4dCxcblx0XHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0XHR0YXJnZXRBY3Rpb246IHNBY3Rpb24uc3BsaXQoXCJ+XCIpWzBdLFxuXHRcdFx0XHRcdHRhcmdldFBhcmFtczogb1RhcmdldFBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgU2VtYW50aWNPYmplY3QgPSB7XG5cdGFsbG93ZWRBY3Rpb25zPzogdW5rbm93bltdO1xuXHR1bmF2YWlsYWJsZUFjdGlvbnM/OiB1bmtub3duW107XG5cdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdHBhdGg6IHN0cmluZztcblx0bWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHMoXG5cdG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzOiBTZW1hbnRpY09iamVjdCxcblx0b0JpbmRpbmdDb250ZXh0OiBDb250ZXh0LFxuXHRhTWFuaWZlc3RTT0l0ZW1zOiBTZW1hbnRpY0l0ZW1bXSxcblx0YUxpbmtzOiBMaW5rW11bXVxuKTogdm9pZCB7XG5cdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhQWxsb3dlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5hbGxvd2VkQWN0aW9ucyB8fCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkQWN0aW9ucyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA/IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLnVuYXZhaWxhYmxlQWN0aW9ucyA6IFtdO1xuXHRcdGNvbnN0IGFTT01hcHBpbmdzID0gb0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZyA/IF9jcmVhdGVNYXBwaW5ncyhvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy5tYXBwaW5nKSA6IFtdO1xuXHRcdGNvbnN0IG9UYXJnZXRQYXJhbXMgPSB7IG5hdmlnYXRpb25Db250ZXh0czogb0JpbmRpbmdDb250ZXh0LCBzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTT01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYU1hbmlmZXN0U09JdGVtcywgYUFsbG93ZWRBY3Rpb25zKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZmV0Y2hlcyB0aGUgcmVsYXRlZCBpbnRlbnRzIHdoZW4gc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gYXJlIHBhc3NlZCBmcm9tIGZlRW52aXJvbm1lbnQuZ2V0SW50ZW50KCkgb25seSBpbiBjYXNlIG9mIE15IEluYm94IGludGVncmF0aW9uLlxuICogQHBhcmFtIHNlbWFudGljT2JqZWN0QW5kQWN0aW9uIFRoaXMgc3BlY2lmaWVzIHRoZSBzZW1hbnRpYyBvYmplY3QgYW5kIGFjdGlvbiBmb3IgZmV0Y2hpbmcgdGhlIGludGVudHNcbiAqIEBwYXJhbSBvQmluZGluZ0NvbnRleHQgVGhpcyBzZXBjaWZpZXMgdGhlIGJpbmRpbmcgY29udGV4dCBmb3IgdXBkYXRpbmcgcmVsYXRlZCBhcHBzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50U09JdGVtcyBUaGlzIGlzIGEgbGlzdCBvZiBzZW1hbnRpYyBpdGVtcyB1c2VkIGZvciB1cGRhdGluZyB0aGUgcmVsYXRlZCBhcHBzIGJ1dHRvblxuICogQHBhcmFtIGFMaW5rcyBUaGlzIGlzIGFuIGFycmF5IGNvbXByaXNpbmcgb2YgcmVsYXRlZCBpbnRlbnRzXG4gKi9cblxuZnVuY3Rpb24gX2dldFJlbGF0ZWRJbnRlbnRzV2l0aFNlbWFudGljT2JqZWN0c0FuZEFjdGlvbihcblx0c2VtYW50aWNPYmplY3RBbmRBY3Rpb246IE15SW5ib3hJbnRlbnQsXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0YXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10sXG5cdGFMaW5rczogTGlua1tdW11cbik6IHZvaWQge1xuXHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBhY3Rpb25zID0gW3NlbWFudGljT2JqZWN0QW5kQWN0aW9uLmFjdGlvbl07XG5cdFx0Y29uc3QgZXhjbHVkZWRBY3Rpb25zOiBbXSA9IFtdO1xuXHRcdGNvbnN0IHNvTWFwcGluZ3M6IFtdID0gW107XG5cdFx0Y29uc3QgdGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBzb01hcHBpbmdzIH07XG5cdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgZXhjbHVkZWRBY3Rpb25zLCB0YXJnZXRQYXJhbXMsIGFwcENvbXBvbmVudFNPSXRlbXMsIGFjdGlvbnMpO1xuXHR9XG59XG5cbnR5cGUgU2VtYW50aWNPYmplY3RDb25maWcgPSB7XG5cdGFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IFJlY29yZDxzdHJpbmcsIFNlbWFudGljT2JqZWN0Pjtcbn07XG50eXBlIFJlbGF0ZWRBcHBzQ29uZmlnID0ge1xuXHR0ZXh0OiBzdHJpbmc7XG5cdHRhcmdldFNlbU9iamVjdDogc3RyaW5nO1xuXHR0YXJnZXRBY3Rpb246IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdG9CaW5kaW5nQ29udGV4dDogQ29udGV4dCxcblx0b0VudHJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0b09iamVjdFBhZ2VMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsXG5cdGFTZW1LZXlzOiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9W10sXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWV0YVBhdGg6IHN0cmluZyxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnRcbik6IFByb21pc2U8UmVsYXRlZEFwcHNDb25maWdbXT4ge1xuXHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyOiBJU2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdGNvbnN0IG9QYXJhbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0bGV0IHNDdXJyZW50U2VtT2JqID0gXCJcIixcblx0XHRzQ3VycmVudEFjdGlvbiA9IFwiXCI7XG5cdGxldCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcblx0bGV0IGFSZWxhdGVkQXBwc01lbnVJdGVtczogUmVsYXRlZEFwcHNDb25maWdbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogdW5rbm93bltdID0gW107XG5cdGxldCBhTWFuaWZlc3RTT0tleXM6IHN0cmluZ1tdO1xuXG5cdGFzeW5jIGZ1bmN0aW9uIGZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcygpOiBQcm9taXNlPExpbmtbXVtdPiB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob1NoZWxsU2VydmljZUhlbHBlciwgb09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0dHJ5IHtcblx0XHRpZiAob0VudHJ5KSB7XG5cdFx0XHRpZiAoYVNlbUtleXMgJiYgYVNlbUtleXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbUtleXMpIHtcblx0XHRcdFx0XHRjb25zdCBzU2VtS2V5ID0gZWxlbWVudC4kUHJvcGVydHlQYXRoO1xuXHRcdFx0XHRcdGlmICghb1BhcmFtW3NTZW1LZXldKSB7XG5cdFx0XHRcdFx0XHRvUGFyYW1bc1NlbUtleV0gPSB7IHZhbHVlOiBvRW50cnlbc1NlbUtleV0gfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGZhbGxiYWNrIHRvIFRlY2huaWNhbCBLZXlzIGlmIG5vIFNlbWFudGljIEtleSBpcyBwcmVzZW50XG5cdFx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFQYXRofS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFUZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc09iaktleSA9IGFUZWNobmljYWxLZXlzW2tleV07XG5cdFx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRcdG9QYXJhbVtzT2JqS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzT2JqS2V5XSB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdFx0Y29uc3Qgb01hbmlmZXN0RGF0YSA9IGdldFRhcmdldFZpZXcob09iamVjdFBhZ2VMYXlvdXQpLmdldFZpZXdEYXRhKCkgYXMgU2VtYW50aWNPYmplY3RDb25maWc7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRsZXQgc2VtYW50aWNPYmplY3RJbnRlbnRzO1xuXHRcdGlmIChvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpIHtcblx0XHRcdGFNYW5pZmVzdFNPS2V5cyA9IE9iamVjdC5rZXlzKG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyk7XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYU1hbmlmZXN0U09LZXlzKSB7XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0SW50ZW50cyA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBlbGVtZW50LCBvUGFyYW0pKTtcblx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzKFxuXHRcdFx0XHRcdG9NYW5pZmVzdERhdGEuYWRkaXRpb25hbFNlbWFudGljT2JqZWN0c1tlbGVtZW50XSxcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcyxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdEludGVudHNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcHBDb21wb25lbnRTT0l0ZW1zIGlzIHVwZGF0ZWQgaW4gY2FzZSBvZiBNeSBJbmJveCBpbnRlZ3JhdGlvbiB3aGVuIHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGFyZSBwYXNzZWQgZnJvbSBmZUVudmlyb25tZW50LmdldEludGVudCgpIG1ldGhvZFxuXHRcdC8vIEluIG90aGVyIGNhc2VzIGl0IHJlbWFpbnMgYXMgYW4gZW1wdHkgbGlzdFxuXHRcdC8vIFdlIGNvbmNhdCB0aGlzIGxpc3QgdG93YXJkcyB0aGUgZW5kIHdpdGggYU1hbmlmZXN0U09JdGVtc1xuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50U09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRjb25zdCBjb21wb25lbnREYXRhOiBDb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKTtcblx0XHRpZiAoY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50ICYmIGNvbXBvbmVudERhdGEuZmVFbnZpcm9ubWVudC5nZXRJbnRlbnQoKSkge1xuXHRcdFx0Y29uc3QgaW50ZW50OiBNeUluYm94SW50ZW50ID0gY29tcG9uZW50RGF0YS5mZUVudmlyb25tZW50LmdldEludGVudCgpO1xuXHRcdFx0c2VtYW50aWNPYmplY3RJbnRlbnRzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuXHRcdFx0XHRfZ2V0U09JbnRlbnRzKG9TaGVsbFNlcnZpY2VIZWxwZXIsIG9PYmplY3RQYWdlTGF5b3V0LCBpbnRlbnQuc2VtYW50aWNPYmplY3QsIG9QYXJhbSlcblx0XHRcdCk7XG5cdFx0XHRfZ2V0UmVsYXRlZEludGVudHNXaXRoU2VtYW50aWNPYmplY3RzQW5kQWN0aW9uKGludGVudCwgb0JpbmRpbmdDb250ZXh0LCBhcHBDb21wb25lbnRTT0l0ZW1zLCBzZW1hbnRpY09iamVjdEludGVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhTGlua3MgPSBhd2FpdCBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKTtcblx0XHRpZiAoYUxpbmtzKSB7XG5cdFx0XHRpZiAoYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0bGV0IGlzU2VtYW50aWNPYmplY3RIYXNTYW1lVGFyZ2V0SW5NYW5pZmVzdCA9IGZhbHNlO1xuXHRcdFx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zOiB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzPzogQ29udGV4dDtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc/OiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG5cdFx0XHRcdH0gPSB7fTtcblx0XHRcdFx0Y29uc3QgYUFubm90YXRpb25zU09JdGVtczogU2VtYW50aWNJdGVtW10gPSBbXTtcblx0XHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgJHtvTWV0YVBhdGh9QGA7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IGAke29NZXRhUGF0aH0vQGA7XG5cdFx0XHRcdGNvbnN0IG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoKTtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cblx0XHRcdFx0YU1hbmlmZXN0U09JdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh7IHRhcmdldFNlbU9iamVjdCB9KSB7XG5cdFx0XHRcdFx0aWYgKGFBbm5vdGF0aW9uc1NPSXRlbXNbMF0/LnRhcmdldFNlbU9iamVjdCA9PT0gdGFyZ2V0U2VtT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBhY3Rpb25zIGZyb20gY3VycmVudCBoYXNoIGFwcGxpY2F0aW9uIGlmIG1hbmlmZXN0IGNvbnRhaW5zIGVtcHR5IGFsbG93ZWRBY3Rpb25zXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMgJiZcblx0XHRcdFx0XHRhQW5ub3RhdGlvbnNTT0l0ZW1zWzBdICYmXG5cdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XSAmJlxuXHRcdFx0XHRcdCEhb01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FBbm5vdGF0aW9uc1NPSXRlbXNbMF0udGFyZ2V0U2VtT2JqZWN0XS5hbGxvd2VkQWN0aW9uc1xuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRpc1NlbWFudGljT2JqZWN0SGFzU2FtZVRhcmdldEluTWFuaWZlc3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHNvSXRlbXMgPSBhTWFuaWZlc3RTT0l0ZW1zLmNvbmNhdChhcHBDb21wb25lbnRTT0l0ZW1zKTtcblx0XHRcdFx0YVJlbGF0ZWRBcHBzTWVudUl0ZW1zID0gaXNTZW1hbnRpY09iamVjdEhhc1NhbWVUYXJnZXRJbk1hbmlmZXN0ID8gc29JdGVtcyA6IHNvSXRlbXMuY29uY2F0KGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL2l0ZW1zXCIsIGFSZWxhdGVkQXBwc01lbnVJdGVtcyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmVhZCBsaW5rc1wiLCBlcnJvciBhcyBzdHJpbmcpO1xuXHR9XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKFxuXHRvRW50aXR5QW5ub3RhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRzQ3VycmVudFNlbU9iajogc3RyaW5nXG4pOiB7XG5cdGJIYXNFbnRpdHlTZXRTTzogYm9vbGVhbjtcblx0YUFsbG93ZWRBY3Rpb25zOiBzdHJpbmdbXTtcblx0YVVuYXZhaWxhYmxlQWN0aW9uczogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucz5bXTtcblx0YU1hcHBpbmdzOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W107XG59IHtcblx0Y29uc3Qgb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSB7XG5cdFx0Ykhhc0VudGl0eVNldFNPOiBmYWxzZSxcblx0XHRhQWxsb3dlZEFjdGlvbnM6IFtdLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+W10sXG5cdFx0YU1hcHBpbmdzOiBbXSBhcyBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ0Fic3RyYWN0VHlwZXM+W11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5jbHVkZXMoQ29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0KSAmJiBvRW50aXR5QW5ub3RhdGlvbnNba2V5XSA9PT0gc0N1cnJlbnRTZW1PYmopIHtcblx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTyA9IHRydWU7XG5cdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gYEAke0NvbW1vbkFubm90YXRpb25UZXJtcy5TZW1hbnRpY09iamVjdE1hcHBpbmd9YDtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IGBAJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9YDtcblxuXHRcdFx0aWYgKGtleS5pbmNsdWRlcyhcIiNcIikpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgJHtzQW5ub3RhdGlvbk1hcHBpbmdUZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYCR7c0Fubm90YXRpb25BY3Rpb25UZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdH1cblx0XHRcdGlmIChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChcblx0XHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0gYXMgTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdBYnN0cmFjdFR5cGVzPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0VudGl0eUFubm90YXRpb25zW3NBbm5vdGF0aW9uQWN0aW9uVGVybV0pIHtcblx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dIGFzIE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnM+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gKG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGNvbnN0IHBhdGggPSAob0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpIHx8IFwiXCI7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aCk7XG5cdC8vIFNlbWFudGljIEtleSBWb2NhYnVsYXJ5XG5cdGNvbnN0IHNTZW1hbnRpY0tleVZvY2FidWxhcnkgPSBgJHtvTWV0YVBhdGh9L2AgKyBgQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleWA7XG5cdC8vU2VtYW50aWMgS2V5c1xuXHRjb25zdCBhU2VtS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNTZW1hbnRpY0tleVZvY2FidWxhcnkpO1xuXHQvLyBVbmF2YWlsYWJsZSBBY3Rpb25zXG5cdGNvbnN0IG9FbnRyeSA9IG9CaW5kaW5nQ29udGV4dD8uZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5ICYmIG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdG9CaW5kaW5nQ29udGV4dFxuXHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oYXN5bmMgZnVuY3Rpb24gKHJlcXVlc3RlZE9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChcblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQsXG5cdFx0XHRcdFx0cmVxdWVzdGVkT2JqZWN0LFxuXHRcdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LFxuXHRcdFx0XHRcdGFTZW1LZXlzLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b01ldGFQYXRoLFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwIGRldGFpbHNcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlUmVsYXRlQXBwc01vZGVsKG9CaW5kaW5nQ29udGV4dCwgb0VudHJ5LCBvT2JqZWN0UGFnZUxheW91dCwgYVNlbUtleXMsIG9NZXRhTW9kZWwsIG9NZXRhUGF0aCwgYXBwQ29tcG9uZW50KTtcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b24/OiBDb250cm9sKTogdm9pZCB7XG5cdGlmIChcblx0XHRvQnV0dG9uICYmXG5cdFx0b0J1dHRvbi5pc0E8QnV0dG9uIHwgT3ZlcmZsb3dUb29sYmFyQnV0dG9uPihbXCJzYXAubS5CdXR0b25cIiwgXCJzYXAubS5PdmVyZmxvd1Rvb2xiYXJCdXR0b25cIl0pICYmXG5cdFx0b0J1dHRvbi5nZXRWaXNpYmxlKCkgJiZcblx0XHRvQnV0dG9uLmdldEVuYWJsZWQoKVxuXHQpIHtcblx0XHRvQnV0dG9uLmZpcmVQcmVzcygpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEFwcENvbXBvbmVudChvQ29udHJvbDogQ29udHJvbCB8IENvbXBvbmVudCk6IEFwcENvbXBvbmVudCB7XG5cdGlmIChvQ29udHJvbC5pc0E8QXBwQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiKSkge1xuXHRcdHJldHVybiBvQ29udHJvbDtcblx0fVxuXHRjb25zdCBvT3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbnRyb2wpO1xuXHRpZiAoIW9Pd25lcikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIHNob3VsZCBiZSBhIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyBvd25lciBvZiB0aGUgY29udHJvbFwiKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Pd25lcik7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBhZ2VWaWV3KG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IEZFVmlldyB7XG5cdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdHJldHVybiByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHQ6IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoKG9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRhaW5lcigpIGFzIE5hdkNvbnRhaW5lcikuZ2V0Q3VycmVudFBhZ2UoKSk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldFZpZXcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QgfCBudWxsKTogRkVWaWV3IHtcblx0aWYgKG9Db250cm9sICYmIG9Db250cm9sLmlzQTxDb21wb25lbnRDb250YWluZXI+KFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCIpKSB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29tcG9uZW50ICYmIG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0fVxuXHR3aGlsZSAob0NvbnRyb2wgJiYgIW9Db250cm9sLmlzQTxGRVZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbCE7XG59XG5cbmZ1bmN0aW9uIF9mbkNoZWNrSXNNYXRjaChvT2JqZWN0OiBvYmplY3QsIG9LZXlzVG9DaGVjazogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleSBhcyBrZXlvZiB0eXBlb2Ygb09iamVjdF0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKFxuXHRtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCxcblx0c0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdG9GaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+IHtcblx0Y29uc3Qgb0VudGl0eVR5cGU6IE1ldGFNb2RlbEVudGl0eVR5cGUgPSAobWV0YU1vZGVsQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9gKSB8fCB7fSkgYXMgTWV0YU1vZGVsRW50aXR5VHlwZSxcblx0XHRvUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsUHJvcGVydHk+IHwgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKFxuXHRcdFx0b0VudGl0eVR5cGUuaGFzT3duUHJvcGVydHkoc0tleSkgJiZcblx0XHRcdCEvXlxcJC9pLnRlc3Qoc0tleSkgJiZcblx0XHRcdG9FbnRpdHlUeXBlW3NLZXldLiRraW5kICYmXG5cdFx0XHRfZm5DaGVja0lzTWF0Y2gob0VudGl0eVR5cGVbc0tleV0sIG9GaWx0ZXIgfHwgeyAka2luZDogXCJQcm9wZXJ0eVwiIH0pXG5cdFx0KSB7XG5cdFx0XHRvUHJvcGVydGllc1tzS2V5XSA9IG9FbnRpdHlUeXBlW3NLZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1Byb3BlcnRpZXM7XG59XG5cbmZ1bmN0aW9uIGZuR2V0SUJOQWN0aW9ucyhvQ29udHJvbDogVGFibGUgfCBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIHwgT2JqZWN0UGFnZVN1YlNlY3Rpb24sIGFJQk5BY3Rpb25zOiBVSTVFbGVtZW50W10pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBhQWN0aW9ucyA9IG9Db250cm9sICYmIG9Db250cm9sLmdldEFjdGlvbnMoKTtcblx0aWYgKGFBY3Rpb25zKSB7XG5cdFx0YUFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0FjdGlvbikge1xuXHRcdFx0aWYgKG9BY3Rpb24uaXNBPEFjdGlvblRvb2xiYXJBY3Rpb24+KFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyLkFjdGlvblRvb2xiYXJBY3Rpb25cIikpIHtcblx0XHRcdFx0b0FjdGlvbiA9IG9BY3Rpb24uZ2V0QWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0FjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51QnV0dG9uXCIpKSB7XG5cdFx0XHRcdGNvbnN0IG9NZW51ID0gb0FjdGlvbi5nZXRNZW51KCk7XG5cdFx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NZW51LmdldEl0ZW1zKCk7XG5cdFx0XHRcdGFJdGVtcy5mb3JFYWNoKChvSXRlbSkgPT4ge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvSXRlbSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSBpZiAob0FjdGlvbi5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhSUJOQWN0aW9ucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogVUk1RWxlbWVudFtdLCBvVmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBvUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duIH0+ID0ge307XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBpc1N0aWNreSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob1ZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGZuR2V0TGlua3MgPSBmdW5jdGlvbiAob0RhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IHsgdmFsdWU6IG9EYXRhW3NLZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAoYUlCTkFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRhSUJOQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvSUJOQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuc2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLmFjdGlvbjtcblx0XHRcdFx0b0FwcENvbXBvbmVudFxuXHRcdFx0XHRcdC5nZXRTaGVsbFNlcnZpY2VzKClcblx0XHRcdFx0XHQuZ2V0TGlua3MoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rKTogdm9pZCB7XG5cdFx0XHRcdFx0XHRpZiAob0lCTkFjdGlvbi5pc0E8Q29udHJvbD4oXCJzYXAudWkuY29yZS5Db250cm9sXCIpIHx8IG9JQk5BY3Rpb24uaXNBPE1lbnVJdGVtPihcInNhcC5tLk1lbnVJdGVtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShcblx0XHRcdFx0XHRcdFx0XHRvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEgJiYgYUxpbmtbMF0gJiYgYUxpbmtbMF0ubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoaXNTdGlja3kpIHtcblx0XHRcdFx0XHRcdFx0KG9JQk5BY3Rpb24uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XHRcdFx0b0lCTkFjdGlvbi5nZXRJZCgpLnNwbGl0KFwiLS1cIilbMV0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0c2hlbGxOYXZpZ2F0aW9uTm90QXZhaWxhYmxlOiAhKGFMaW5rICYmIGFMaW5rLmxlbmd0aCA9PT0gMSAmJiBhTGlua1swXSAmJiBhTGlua1swXS5sZW5ndGggPT09IDEpXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblx0aWYgKG9WaWV3ICYmIG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkpIHtcblx0XHRyZXR1cm4gKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQpXG5cdFx0XHQ/LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZuR2V0TGlua3MoKTtcblx0fVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIG1lbnUgYnV0dG9uIHZpc2liaWxpdHkgaWYgYWxsIHRoZSB1bmRlcmx5aW5nIHNlbGVjdGlvbiBidXR0b25zIGFyZSBoaWRkZW4uXG4gKiBAcGFyYW0gSUJOQWN0aW9uc1xuICovXG5mdW5jdGlvbiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5KElCTkFjdGlvbnM6IFVJNUVsZW1lbnRbXSk6IHZvaWQge1xuXHRjb25zdCBtZW51QnV0dG9uV2l0aElCTkFjdGlvbjogTWVudUJ1dHRvbltdID0gW107XG5cdElCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoSUJOQWN0aW9uKSB7XG5cdFx0aWYgKElCTkFjdGlvbi5pc0E8TWVudUJ1dHRvbj4oXCJzYXAubS5NZW51SXRlbVwiKSkge1xuXHRcdFx0bWVudUJ1dHRvbldpdGhJQk5BY3Rpb24ucHVzaChJQk5BY3Rpb24uZ2V0UGFyZW50KCk/LmdldFBhcmVudCgpIGFzIE1lbnVCdXR0b24pO1xuXHRcdH1cblx0fSk7XG5cdG1lbnVCdXR0b25XaXRoSUJOQWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKG1lbnVBY3Rpb24pIHtcblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51QWN0aW9uLmdldE1lbnUoKS5nZXRJdGVtcygpO1xuXHRcdGNvbnN0IHZpc2libGVNZW51SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChtZW51SXRlbSkge1xuXHRcdFx0cmV0dXJuIG1lbnVJdGVtLmdldFZpc2libGUoKTtcblx0XHR9KTtcblx0XHRpZiAodmlzaWJsZU1lbnVJdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG1lbnVBY3Rpb24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0fVxuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWN0aW9uUGF0aChcblx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0YlJldHVybk9ubHlQYXRoOiBib29sZWFuLFxuXHRpbkFjdGlvbk5hbWU/OiBzdHJpbmcsXG5cdGJDaGVja1N0YXRpY1ZhbHVlPzogYm9vbGVhblxuKTpcblx0fCBzdHJpbmdcblx0fCB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHN0cmluZztcblx0XHRcdHNQcm9wZXJ0eTogc3RyaW5nO1xuXHRcdFx0c0JpbmRpbmdQYXJhbWV0ZXI6IHN0cmluZztcblx0ICB9IHtcblx0Y29uc3Qgc0FjdGlvbk5hbWU6IHN0cmluZyA9ICFpbkFjdGlvbk5hbWUgPyBhY3Rpb25Db250ZXh0LmdldE9iamVjdChhY3Rpb25Db250ZXh0LmdldFBhdGgoKSkudG9TdHJpbmcoKSA6IGluQWN0aW9uTmFtZTtcblx0bGV0IHNDb250ZXh0UGF0aCA9IGFjdGlvbkNvbnRleHQuZ2V0UGF0aCgpLnNwbGl0KFwiL0BcIilbMF07XG5cdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IChhY3Rpb25Db250ZXh0LmdldE9iamVjdChzQ29udGV4dFBhdGgpIGFzIE1ldGFNb2RlbEVudGl0eVR5cGUpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUoYWN0aW9uQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdHNQcm9wZXJ0eTogYWN0aW9uQ29udGV4dC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhgKSxcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBhY3Rpb25Db250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEVudGl0eVNldE5hbWUob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNFbnRpdHlUeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZURpc3BsYXlNb2RlKFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdG9Db2xsZWN0aW9uQW5ub3RhdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogXCJEZXNjcmlwdGlvblwiIHwgXCJWYWx1ZURlc2NyaXB0aW9uXCIgfCBcIlZhbHVlXCIgfCBcIkRlc2NyaXB0aW9uVmFsdWVcIiB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLFxuXHRcdG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gKG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmXG5cdFx0XHRcdFx0b0NvbGxlY3Rpb25Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pKSkgYXMgTWV0YU1vZGVsRW51bTxUZXh0QXJyYW5nZW1lbnQ+O1xuXG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn1cblxuZnVuY3Rpb24gX2dldEVudGl0eVR5cGUob0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSl9LyRUeXBlYCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IHN0cmluZywgb1NlbGVjdGVkQ29udGV4dDogT0RhdGFWNENvbnRleHQsIHNQcm9wZXJ0eTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGxldCBvQ29udGV4dCA9IG9TZWxlY3RlZENvbnRleHQ7XG5cdGNvbnN0IG5CcmFja2V0SW5kZXggPSBzQWN0aW9uLmluZGV4T2YoXCIoXCIpO1xuXG5cdGlmIChuQnJhY2tldEluZGV4ID4gLTEpIHtcblx0XHRjb25zdCBzVGFyZ2V0VHlwZSA9IHNBY3Rpb24uc2xpY2UobkJyYWNrZXRJbmRleCArIDEsIC0xKTtcblx0XHRsZXQgc0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXG5cdFx0d2hpbGUgKHNDdXJyZW50VHlwZSAhPT0gc1RhcmdldFR5cGUpIHtcblx0XHRcdC8vIEZpbmQgcGFyZW50IGJpbmRpbmcgY29udGV4dCBhbmQgcmV0cmlldmUgZW50aXR5IHR5cGVcblx0XHRcdG9Db250ZXh0ID0gb0NvbnRleHQuZ2V0QmluZGluZygpLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dDtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRzQ3VycmVudFR5cGUgPSBfZ2V0RW50aXR5VHlwZShvQ29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHR5cGUgdG8gcmVxdWVzdCBwcm9wZXJ0eSB2YWx1ZSBmb3IgYm91bmQgYWN0aW9uIGludm9jYXRpb25cIik7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb0NvbnRleHQucmVxdWVzdE9iamVjdChzUHJvcGVydHkpO1xufVxuXG5leHBvcnQgdHlwZSBfUmVxdWVzdGVkUHJvcGVydHkgPSB7XG5cdHZQcm9wZXJ0eVZhbHVlOiB1bmtub3duO1xuXHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0O1xuXHRzQWN0aW9uOiBzdHJpbmc7XG5cdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHN0cmluZztcbn07XG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0UHJvcGVydHkoXG5cdG9TZWxlY3RlZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRzQWN0aW9uOiBzdHJpbmcsXG5cdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzdHJpbmdcbik6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PiB7XG5cdGNvbnN0IG9Qcm9taXNlID1cblx0XHRzUHJvcGVydHkgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpID09PSAwXG5cdFx0XHQ/IHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShzUHJvcGVydHksIG9TZWxlY3RlZENvbnRleHQuZ2V0TW9kZWwoKSlcblx0XHRcdDogX3JlcXVlc3RPYmplY3Qoc0FjdGlvbiwgb1NlbGVjdGVkQ29udGV4dCwgc1Byb3BlcnR5KTtcblxuXHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAodlByb3BlcnR5VmFsdWU6IHVua25vd24pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dlByb3BlcnR5VmFsdWU6IHZQcm9wZXJ0eVZhbHVlLFxuXHRcdFx0b1NlbGVjdGVkQ29udGV4dDogb1NlbGVjdGVkQ29udGV4dCxcblx0XHRcdHNBY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoXG5cdFx0fTtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShcblx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0YVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlcXVlc3RQcm9taXNlcylcblx0XHQudGhlbihmdW5jdGlvbiAoYVJlc3VsdHMpOiB2b2lkIHtcblx0XHRcdGlmIChhUmVzdWx0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgYUFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW10sXG5cdFx0XHRcdFx0YU5vdEFwcGxpY2FibGVDb250ZXh0czogdW5rbm93bltdID0gW107XG5cdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKGFSZXN1bHQpIHtcblx0XHRcdFx0XHRpZiAoYVJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aWYgKGFSZXN1bHQudlByb3BlcnR5VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoYVJlc3VsdC5zRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cy5wdXNoKGFSZXN1bHQub1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXREeW5hbWljQWN0aW9uQ29udGV4dHMoXG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdGFSZXN1bHRzWzBdLnNBY3Rpb24sXG5cdFx0XHRcdFx0YUFwcGxpY2FibGVDb250ZXh0cyxcblx0XHRcdFx0XHRhTm90QXBwbGljYWJsZUNvbnRleHRzLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLnRyYWNlKFwiQ2Fubm90IHJldHJpZXZlIHByb3BlcnR5IHZhbHVlIGZyb20gcGF0aFwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gaW50ZXJuYWxNb2RlbENvbnRleHRcbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBhcHBsaWNhYmxlXG4gKiBAcGFyYW0gbm90QXBwbGljYWJsZVxuICogQHBhcmFtIGZvckNvbnRleHRNZW51XG4gKi9cbmZ1bmN0aW9uIHNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhcblx0aW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRhY3Rpb246IHN0cmluZyxcblx0YXBwbGljYWJsZTogdW5rbm93bltdLFxuXHRub3RBcHBsaWNhYmxlOiB1bmtub3duW10sXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcbik6IHZvaWQge1xuXHRjb25zdCBkeW5hbWljQWN0aW9uUGF0aFByZWZpeCA9IGAke2ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHthY3Rpb259YCxcblx0XHRpbnRlcm5hbE1vZGVsID0gaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRhcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFBcHBsaWNhYmxlXCIgOiBcImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIixcblx0XHRub3RBcHBsaWNhYmxlUHJvcGVydHkgPSAhZm9yQ29udGV4dE1lbnUgPyBcImFOb3RBcHBsaWNhYmxlXCIgOiBcImFOb3RBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnVcIjtcblx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgJHtkeW5hbWljQWN0aW9uUGF0aFByZWZpeH0vJHthcHBsaWNhYmxlUHJvcGVydHl9YCwgYXBwbGljYWJsZSk7XG5cdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoYCR7ZHluYW1pY0FjdGlvblBhdGhQcmVmaXh9LyR7bm90QXBwbGljYWJsZVByb3BlcnR5fWAsIG5vdEFwcGxpY2FibGUpO1xufVxuXG5mdW5jdGlvbiBnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uKGFFeHByZXNzaW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBDb21tb25VdGlscy5BbGxvd2VkRXhwcmVzc2lvbnNQcmlvO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byByZXR1cm4gYWxsb3dlZCBvcGVyYXRvcnMgZm9yIHR5cGUgR3VpZC5cbiAqIEByZXR1cm5zIEFsbG93ZWQgb3BlcmF0b3JzIGZvciB0eXBlIEd1aWRcbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk6IHN0cmluZyB7XG5cdGNvbnN0IGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkID0gW1wiRVFcIiwgXCJORVwiXTtcblx0cmV0dXJuIGFsbG93ZWRPcGVyYXRvcnNGb3JHdWlkLnRvU3RyaW5nKCk7XG59XG5cbnR5cGUgUGFyYW1ldGVySW5mbyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdHBhcmFtZXRlclByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxQcm9wZXJ0eT47XG59O1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVySW5mbyhtZXRhTW9kZWxDb250ZXh0OiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpOiBQYXJhbWV0ZXJJbmZvIHtcblx0Y29uc3Qgc1BhcmFtZXRlckNvbnRleHRQYXRoID0gc0NvbnRleHRQYXRoLnN1YnN0cmluZygwLCBzQ29udGV4dFBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBtZXRhTW9kZWxDb250ZXh0LmdldE9iamVjdChgJHtzUGFyYW1ldGVyQ29udGV4dFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRjb25zdCBvUGFyYW1ldGVySW5mbzogUGFyYW1ldGVySW5mbyA9IHt9O1xuXHRpZiAoYlJlc3VsdENvbnRleHQgJiYgc1BhcmFtZXRlckNvbnRleHRQYXRoICE9PSBzQ29udGV4dFBhdGgpIHtcblx0XHRvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCA9IHNQYXJhbWV0ZXJDb250ZXh0UGF0aDtcblx0XHRvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG1ldGFNb2RlbENvbnRleHQsIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCkgYXMgUmVjb3JkPFxuXHRcdFx0c3RyaW5nLFxuXHRcdFx0TWV0YU1vZGVsUHJvcGVydHlcblx0XHQ+O1xuXHR9XG5cdHJldHVybiBvUGFyYW1ldGVySW5mbztcbn1cblxudHlwZSBWaWV3RGF0YSA9IHtcblx0Y29udHJvbENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG59O1xuXG5mdW5jdGlvbiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCwgbVBhZ2VDb250ZXh0OiB1bmtub3duW10sIG9WaWV3OiBWaWV3KTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRjb25zdCBvTmF2aWdhdGlvblNlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldE5hdmlnYXRpb25TZXJ2aWNlKCk7XG5cdHJldHVybiBvTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQobVBhZ2VDb250ZXh0LCBvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKSk7XG59XG5cbmZ1bmN0aW9uIGlzU3RpY2t5RWRpdE1vZGUob0NvbnRyb2w6IENvbnRyb2wpOiBib29sZWFuIHtcblx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0NvbnRyb2wuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdGNvbnN0IGJVSUVkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvQ29udHJvbCk7XG5cdHJldHVybiBiSXNTdGlja3lNb2RlICYmIGJVSUVkaXRhYmxlO1xufVxuXG5leHBvcnQgdHlwZSBVc2VyRGVmYXVsdFBhcmFtZXRlciA9IEVkbUFjdGlvblBhcmFtZXRlciB8IENvbnRleHQ7XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB1c2VyIGRlZmF1bHRzIGZyb20gdGhlIHN0YXJ0dXAgYXBwIHN0YXRlIChpZiBhdmFpbGFibGUpIG9yIHRoZSBzdGFydHVwIHBhcmFtZXRlciBhbmQgc2V0cyB0aGVtIHRvIGEgbW9kZWwuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIG1vZGVsXG4gKiBAcGFyYW0gaXNBY3Rpb25cbiAqIEBwYXJhbSBpc0NyZWF0ZVxuICogQHBhcmFtIGFjdGlvbkRlZmF1bHRWYWx1ZXNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2V0VXNlckRlZmF1bHRzKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFyYW1ldGVyczogVXNlckRlZmF1bHRQYXJhbWV0ZXJbXSxcblx0bW9kZWw6IEpTT05Nb2RlbCB8IE9EYXRhVjRDb250ZXh0LFxuXHRpc0FjdGlvbjogYm9vbGVhbixcblx0aXNDcmVhdGU/OiBib29sZWFuLFxuXHRhY3Rpb25EZWZhdWx0VmFsdWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBCYXNlVHlwZSA9IChhd2FpdCBpbXBvcnQoXCJzYXAvdWkvbWRjL2VudW1zL0Jhc2VUeXBlXCIpKS5kZWZhdWx0O1xuXHRjb25zdCBUeXBlTWFwID0gKGF3YWl0IGltcG9ydChcInNhcC91aS9tZGMvb2RhdGEvdjQvVHlwZU1hcFwiKSkuZGVmYXVsdDtcblxuXHRjb25zdCBjb21wb25lbnREYXRhID0gYXBwQ29tcG9uZW50LmdldENvbXBvbmVudERhdGEoKSxcblx0XHRzdGFydHVwUGFyYW1ldGVycyA9IChjb21wb25lbnREYXRhICYmIGNvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGUgPSBhd2FpdCBzaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShhcHBDb21wb25lbnQpO1xuXHRjb25zdCBzdGFydHVwQXBwU3RhdGVEYXRhID0gc3RhcnR1cEFwcFN0YXRlPy5nZXREYXRhKCkgfHwge30sXG5cdFx0ZXh0ZW5kZWRQYXJhbWV0ZXJzID0gKHN0YXJ0dXBBcHBTdGF0ZURhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBzdGFydHVwQXBwU3RhdGVEYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdHBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcikge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBpc0FjdGlvblxuXHRcdFx0PyBgLyR7KG9QYXJhbWV0ZXIgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZX1gXG5cdFx0XHQ6IChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGg/LigpLnNsaWNlKChvUGFyYW1ldGVyIGFzIENvbnRleHQpLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRjb25zdCBzUGFyYW1ldGVyTmFtZSA9IGlzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKGFjdGlvbkRlZmF1bHRWYWx1ZXMgJiYgaXNDcmVhdGUpIHtcblx0XHRcdGlmIChhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBhY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlcnRUeXBlID0gKFxuXHRcdFx0XHRvUGFyYW1ldGVyIGFzIHtcblx0XHRcdFx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0XHRcdFx0dHlwZT86IHN0cmluZztcblx0XHRcdFx0fVxuXHRcdFx0KS50eXBlXG5cdFx0XHRcdD8gVHlwZU1hcC5nZXRCYXNlVHlwZShcblx0XHRcdFx0XHRcdChcblx0XHRcdFx0XHRcdFx0b1BhcmFtZXRlciBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IHN0cmluZztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0KS50eXBlXG5cdFx0XHRcdCAgKVxuXHRcdFx0XHQ6IEJhc2VUeXBlLlN0cmluZztcblx0XHRcdGNvbnN0IHR5cGVJbnN0YW5jZSA9IFR5cGVNYXAuZ2V0RGF0YVR5cGVJbnN0YW5jZShwYXJhbWV0ZXJ0VHlwZSk7XG5cdFx0XHRtb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCB0eXBlSW5zdGFuY2UucGFyc2VWYWx1ZShzdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0sIFwic3RyaW5nXCIpKTtcblx0XHR9IGVsc2UgaWYgKGV4dGVuZGVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9FeHRlbmRlZFBhcmFtZXRlciBvZiBleHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGhcblx0XHRcdFx0XHRcdD8gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlc1tvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzLmxlbmd0aCAtIDFdXG5cdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRpZiAob1JhbmdlICYmIG9SYW5nZS5TaWduID09PSBcIklcIiAmJiBvUmFuZ2UuT3B0aW9uID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRcdG1vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufVxuXG5leHBvcnQgdHlwZSBJbmJvdW5kUGFyYW1ldGVyID0ge1xuXHR1c2VGb3JDcmVhdGU6IGJvb2xlYW47XG59O1xuZnVuY3Rpb24gZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZShcblx0b1N0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+LFxuXHRvSW5ib3VuZFBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBJbmJvdW5kUGFyYW1ldGVyPlxuKTogdW5rbm93biB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9XG5cdFx0XHRvSW5ib3VuZHMgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IE9iamVjdC5rZXlzKG9JbmJvdW5kcykuZmlsdGVyKGZ1bmN0aW9uIChzUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0XHQgIH0pXG5cdFx0XHRcdDogW107XG5cdGxldCBvUmV0O1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYUNyZWF0ZVBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gZWxlbWVudDtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXIgPSB7XG5cdHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIE91dGJvdW5kUGFyYW1ldGVyVmFsdWU+O1xuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZztcblx0YWN0aW9uPzogc3RyaW5nO1xufTtcbnR5cGUgT3V0Ym91bmRQYXJhbWV0ZXJWYWx1ZSA9IHtcblx0dmFsdWU/OiB7XG5cdFx0dmFsdWU/OiBzdHJpbmc7XG5cdFx0Zm9ybWF0Pzogc3RyaW5nO1xuXHR9O1xufTtcbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IE91dGJvdW5kUGFyYW1ldGVyKTogTWV0YU1vZGVsVHlwZTxTZW1hbnRpY09iamVjdE1hcHBpbmdUeXBlVHlwZXM+W10ge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXSA9IFtdO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3N0cmljdC1ib29sZWFuLWV4cHJlc3Npb25zXG5cdGlmIChvT3V0Ym91bmQucGFyYW1ldGVycykge1xuXHRcdGNvbnN0IGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob091dGJvdW5kLnBhcmFtZXRlcnMpIHx8IFtdO1xuXHRcdGlmIChhUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzUGFyYW06IHN0cmluZykge1xuXHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzW3NQYXJhbV07XG5cdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwiYmluZGluZ1wiKSB7XG5cdFx0XHRcdFx0Ly8gdXNpbmcgdGhlIGZvcm1hdCBvZiBVSS5NYXBwaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb1NlbWFudGljTWFwcGluZyA9IHtcblx0XHRcdFx0XHRcdExvY2FsUHJvcGVydHk6IHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRTZW1hbnRpY09iamVjdFByb3BlcnR5OiBzUGFyYW1cblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0aWYgKGFTZW1hbnRpY09iamVjdE1hcHBpbmcubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Ly8gVG8gY2hlY2sgaWYgdGhlIHNlbWFudGljT2JqZWN0IE1hcHBpbmcgaXMgZG9uZSBmb3IgdGhlIHNhbWUgbG9jYWwgcHJvcGVydHkgbW9yZSB0aGF0IG9uY2UgdGhlbiBmaXJzdCBvbmUgd2lsbCBiZSBjb25zaWRlcmVkXG5cdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAoZWxlbWVudC5Mb2NhbFByb3BlcnR5Py4kUHJvcGVydHlQYXRoICE9PSBvU2VtYW50aWNNYXBwaW5nLkxvY2FsUHJvcGVydHkuJFByb3BlcnR5UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1hbnRpY09iamVjdE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0b1ZpZXdEYXRhOiBWaWV3RGF0YSxcblx0b0Nyb3NzTmF2OiBSZWNvcmQ8c3RyaW5nLCBPdXRib3VuZFBhcmFtZXRlcj5cbik6IFJlY29yZDxcblx0c3RyaW5nLFxuXHR7XG5cdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IE1ldGFNb2RlbFR5cGU8U2VtYW50aWNPYmplY3RNYXBwaW5nVHlwZVR5cGVzPltdO1xuXHR9XG4+IHtcblx0Y29uc3Qgb0hlYWRlckZhY2V0SXRlbXM6IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBNZXRhTW9kZWxUeXBlPFNlbWFudGljT2JqZWN0TWFwcGluZ1R5cGVUeXBlcz5bXTtcblx0XHR9XG5cdD4gPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gYXMgUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRuYXZpZ2F0aW9uPzoge1xuXHRcdFx0XHR0YXJnZXRPdXRib3VuZD86IHtcblx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9XG5cdD47XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgfHwgY29uZmlnLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpKSB7XG5cdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24/LnRhcmdldE91dGJvdW5kPy5vdXRib3VuZDtcblx0XHRcdGlmIChzT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmNsdWRlcyhcIkNoYXJ0XCIpKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciAke3NPdXRib3VuZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5cbmZ1bmN0aW9uIHNldFNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogdW5rbm93bik6IFNlbGVjdGlvblZhcmlhbnQge1xuXHRjb25zdCBvTWFwcGluZ3MgPSB0eXBlb2Ygdk1hcHBpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2TWFwcGluZ3MpIDogdk1hcHBpbmdzO1xuXHRmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygb01hcHBpbmdzKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXSkgfHxcblx0XHRcdChlbGVtZW50W1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmIGVsZW1lbnRbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0UHJvcGVydHkgPVxuXHRcdFx0ZWxlbWVudFtcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl0gfHwgZWxlbWVudFtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRpZiAob1NlbGVjdE9wdGlvbikge1xuXHRcdFx0Ly9DcmVhdGUgYSBuZXcgU2VsZWN0T3B0aW9uIHdpdGggc1NlbWFudGljT2JqZWN0UHJvcGVydHkgYXMgdGhlIHByb3BlcnR5IE5hbWUgYW5kIHJlbW92ZSB0aGUgb2xkZXIgb25lXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oc0xvY2FsUHJvcGVydHkpO1xuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQubWFzc0FkZFNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSwgb1NlbGVjdE9wdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcbn1cblxudHlwZSBTZW1hbnRpY09iamVjdEZyb21QYXRoID0ge1xuXHRzZW1hbnRpY09iamVjdFBhdGg6IHN0cmluZztcblx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nIH1bXTtcblx0c2VtYW50aWNPYmplY3Q6IHtcblx0XHRzZW1hbnRpY09iamVjdDogeyAkUGF0aDogc3RyaW5nIH07XG5cdH07XG5cdHVuYXZhaWxhYmxlQWN0aW9uczogc3RyaW5nW107XG59O1xuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aChcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNQYXRoOiBzdHJpbmcsXG5cdHNRdWFsaWZpZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPiB7XG5cdHJldHVybiBuZXcgUHJvbWlzZTxTZW1hbnRpY09iamVjdEZyb21QYXRoPihmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGxldCBzU2VtYW50aWNPYmplY3QsIGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucztcblx0XHRpZiAoc1F1YWxpZmllciA9PT0gXCJcIikge1xuXHRcdFx0c1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0fWApO1xuXHRcdFx0YVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLlNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zfWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzU2VtYW50aWNPYmplY3QgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3R9IyR7c1F1YWxpZmllcn1gKTtcblx0XHRcdGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0XHRgJHtzUGF0aH1AJHtDb21tb25Bbm5vdGF0aW9uVGVybXMuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnN9IyR7c1F1YWxpZmllcn1gXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNQYXRoOiBzdHJpbmcsIHNRdWFsaWZpZXI6IHN0cmluZyk6IFByb21pc2U8U2VtYW50aWNPYmplY3RGcm9tUGF0aD4ge1xuXHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbCwgc1BhdGgsIHNRdWFsaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbj86IE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pOiBfRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IHt9O1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdGlmIChvUHJvcGVydHkuUHJvcGVydHkgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRcdFx0aWYgKG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG59XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnMoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uPzogTWV0YU1vZGVsVHlwZTxGaWx0ZXJSZXN0cmljdGlvbnNUeXBlPixcblx0c1Jlc3RyaWN0aW9uPzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIiB8IFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIlxuKTogc3RyaW5nW10ge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dKSB7XG5cdFx0YVByb3BzID0gKFxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uIGFzIGtleW9mIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT5dIGFzIEV4cGFuZFBhdGhUeXBlPEVkbS5Qcm9wZXJ0eVBhdGg+W11cblx0XHQpLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBFeHBhbmRQYXRoVHlwZTxFZG0uUHJvcGVydHlQYXRoPikge1xuXHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhUHJvcHM7XG59XG5cbmZ1bmN0aW9uIF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKHBhdGhzOiBzdHJpbmdbXSwgbmF2UGF0aDogc3RyaW5nLCBwcm9wczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG5cdGNvbnN0IG5hdlBhdGhQcmVmaXggPSBuYXZQYXRoICsgXCIvXCI7XG5cdHJldHVybiBwYXRocy5yZWR1Y2UoKG91dFBhdGhzOiBzdHJpbmdbXSwgcGF0aFRvQ2hlY2s6IHN0cmluZykgPT4ge1xuXHRcdGlmIChwYXRoVG9DaGVjay5zdGFydHNXaXRoKG5hdlBhdGhQcmVmaXgpKSB7XG5cdFx0XHRjb25zdCBvdXRQYXRoID0gcGF0aFRvQ2hlY2sucmVwbGFjZShuYXZQYXRoUHJlZml4LCBcIlwiKTtcblx0XHRcdGlmICghb3V0UGF0aHMuaW5jbHVkZXMob3V0UGF0aCkpIHtcblx0XHRcdFx0b3V0UGF0aHMucHVzaChvdXRQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dFBhdGhzO1xuXHR9LCBwcm9wcyk7XG59XG50eXBlIF9GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5leHBvcnQgdHlwZSBfRmlsdGVyUmVzdHJpY3Rpb25zID0ge1xuXHRSZXF1aXJlZFByb3BlcnRpZXM6IHN0cmluZ1tdO1xuXHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogc3RyaW5nW107XG5cdEZpbHRlckFsbG93ZWRFeHByZXNzaW9uczogX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcbn07XG5mdW5jdGlvbiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoZW50aXR5UGF0aDogc3RyaW5nLCBvQ29udGV4dDogT0RhdGFNZXRhTW9kZWwpOiBfRmlsdGVyUmVzdHJpY3Rpb25zIHtcblx0Y29uc3Qgb1JldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRSZXF1aXJlZFByb3BlcnRpZXM6IFtdLFxuXHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzOiBbXSxcblx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdH07XG5cdGxldCBvRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBuYXZpZ2F0aW9uVGV4dCA9IFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIjtcblx0Y29uc3QgZnJUZXJtID0gXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIjtcblx0Y29uc3QgZW50aXR5VHlwZVBhdGhQYXJ0cyA9IGVudGl0eVBhdGgucmVwbGFjZUFsbChcIiUyRlwiLCBcIi9cIikuc3BsaXQoXCIvXCIpLmZpbHRlcihNb2RlbEhlbHBlci5maWx0ZXJPdXROYXZQcm9wQmluZGluZyk7XG5cdGNvbnN0IGVudGl0eVR5cGVQYXRoID0gYC8ke2VudGl0eVR5cGVQYXRoUGFydHMuam9pbihcIi9cIil9L2A7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKGVudGl0eVBhdGgsIG9Db250ZXh0KTtcblx0Y29uc3QgZW50aXR5U2V0UGF0aFBhcnRzID0gZW50aXR5U2V0UGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKE1vZGVsSGVscGVyLmZpbHRlck91dE5hdlByb3BCaW5kaW5nKTtcblx0Y29uc3QgaXNDb250YWlubWVudCA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH0kQ29udGFpbnNUYXJnZXRgKTtcblx0Y29uc3QgY29udGFpbm1lbnROYXZQYXRoID0gISFpc0NvbnRhaW5tZW50ICYmIGVudGl0eVR5cGVQYXRoUGFydHNbZW50aXR5VHlwZVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblxuXHQvL0xFQVNUIFBSSU9SSVRZIC0gRmlsdGVyIHJlc3RyaWN0aW9ucyBkaXJlY3RseSBhdCBFbnRpdHkgU2V0XG5cdC8vZS5nLiBGUiBpbiBcIk5TLkVudGl0eUNvbnRhaW5lci9TYWxlc09yZGVyTWFuYWdlXCIgQ29udGV4dFBhdGg6IC9TYWxlc09yZGVyTWFuYWdlXG5cdGlmICghaXNDb250YWlubWVudCkge1xuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBvQ29udGV4dC5nZXRPYmplY3QoYCR7ZW50aXR5U2V0UGF0aH0ke2ZyVGVybX1gKSBhcyBNZXRhTW9kZWxUeXBlPEZpbHRlclJlc3RyaWN0aW9uc1R5cGU+IHwgdW5kZWZpbmVkO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdGNvbnN0IHJlc3VsdENvbnRleHRDaGVjayA9IG9Db250ZXh0LmdldE9iamVjdChgJHtlbnRpdHlUeXBlUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRgKTtcblx0XHRpZiAoIXJlc3VsdENvbnRleHRDaGVjaykge1xuXHRcdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdH1cblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zKSB8fCB7fTtcblx0fVxuXG5cdGlmIChlbnRpdHlUeXBlUGF0aFBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRjb25zdCBuYXZQYXRoID0gaXNDb250YWlubWVudCA/IChjb250YWlubWVudE5hdlBhdGggYXMgc3RyaW5nKSA6IGVudGl0eVNldFBhdGhQYXJ0c1tlbnRpdHlTZXRQYXRoUGFydHMubGVuZ3RoIC0gMV07XG5cdFx0Ly8gSW4gY2FzZSBvZiBjb250YWlubWVudCB3ZSB0YWtlIGVudGl0eVNldCBwcm92aWRlZCBhcyBwYXJlbnQuIEFuZCBpbiBjYXNlIG9mIG5vcm1hbCB3ZSB3b3VsZCByZW1vdmUgdGhlIGxhc3QgbmF2aWdhdGlvbiBmcm9tIGVudGl0eVNldFBhdGguXG5cdFx0Y29uc3QgcGFyZW50RW50aXR5U2V0UGF0aCA9IGlzQ29udGFpbm1lbnQgPyBlbnRpdHlTZXRQYXRoIDogYC8ke2VudGl0eVNldFBhdGhQYXJ0cy5zbGljZSgwLCAtMSkuam9pbihgLyR7bmF2aWdhdGlvblRleHR9L2ApfWA7XG5cdFx0Ly9USElSRCBISUdIRVNUIFBSSU9SSVRZIC0gUmVhZGluZyBwcm9wZXJ0eSBwYXRoIHJlc3RyaWN0aW9ucyAtIEFubm90YXRpb24gYXQgbWFpbiBlbnRpdHkgYnV0IGRpcmVjdGx5IG9uIG5hdmlnYXRpb24gcHJvcGVydHkgcGF0aFxuXHRcdC8vZS5nLiBQYXJlbnQgQ3VzdG9tZXIgd2l0aCBQcm9wZXJ0eVBhdGg9XCJTZXQvQ2l0eU5hbWVcIiBDb250ZXh0UGF0aDogQ3VzdG9tZXIvU2V0XG5cdFx0Y29uc3Qgb1BhcmVudFJldDogX0ZpbHRlclJlc3RyaWN0aW9ucyA9IHtcblx0XHRcdFJlcXVpcmVkUHJvcGVydGllczogW10sXG5cdFx0XHROb25GaWx0ZXJhYmxlUHJvcGVydGllczogW10sXG5cdFx0XHRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnM6IHt9XG5cdFx0fTtcblx0XHRpZiAoIW5hdlBhdGguaW5jbHVkZXMoXCIlMkZcIikpIHtcblx0XHRcdGNvbnN0IG9QYXJlbnRGUiA9IG9Db250ZXh0LmdldE9iamVjdChgJHtwYXJlbnRFbnRpdHlTZXRQYXRofSR7ZnJUZXJtfWApIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4gfCB1bmRlZmluZWQ7XG5cdFx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IF9mZXRjaFByb3BlcnRpZXNGb3JOYXZQYXRoKFxuXHRcdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob1BhcmVudEZSLCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXSxcblx0XHRcdFx0bmF2UGF0aCxcblx0XHRcdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gX2ZldGNoUHJvcGVydGllc0Zvck5hdlBhdGgoXG5cdFx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvUGFyZW50RlIsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW10sXG5cdFx0XHRcdG5hdlBhdGgsXG5cdFx0XHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgfHwgW11cblx0XHRcdCk7XG5cdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRjb25zdCBjb21wbGV0ZUFsbG93ZWRFeHBzID0gZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob1BhcmVudEZSKSB8fCB7fTtcblx0XHRcdG9QYXJlbnRSZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0gT2JqZWN0LmtleXMoY29tcGxldGVBbGxvd2VkRXhwcykucmVkdWNlKFxuXHRcdFx0XHQob3V0UHJvcDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+LCBwcm9wUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHByb3BQYXRoLnN0YXJ0c1dpdGgobmF2UGF0aCArIFwiL1wiKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb3V0UHJvcFBhdGggPSBwcm9wUGF0aC5yZXBsYWNlKG5hdlBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0XHRcdFx0XHRvdXRQcm9wW291dFByb3BQYXRoXSA9IGNvbXBsZXRlQWxsb3dlZEV4cHNbcHJvcFBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb3V0UHJvcDtcblx0XHRcdFx0fSxcblx0XHRcdFx0e30gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vU2luZ2xlVmFsdWUgfCBNdWx0aVZhbHVlIHwgU2luZ2xlUmFuZ2UgfCBNdWx0aVJhbmdlIHwgU2VhcmNoRXhwcmVzc2lvbiB8IE11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cblx0XHRvUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyA9IG1lcmdlT2JqZWN0cyhcblx0XHRcdHt9LFxuXHRcdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgfHwge30sXG5cdFx0XHRvUGFyZW50UmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyB8fCB7fVxuXHRcdCkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5cdFx0Ly9TRUNPTkQgSElHSEVTVCBwcmlvcml0eSAtIE5hdmlnYXRpb24gcmVzdHJpY3Rpb25zXG5cdFx0Ly9lLmcuIFBhcmVudCBcIi9DdXN0b21lclwiIHdpdGggTmF2aWdhdGlvblByb3BlcnR5UGF0aD1cIlNldFwiIENvbnRleHRQYXRoOiBDdXN0b21lci9TZXRcblx0XHRjb25zdCBvTmF2UmVzdHJpY3Rpb25zID0gTWV0YU1vZGVsRnVuY3Rpb24uZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvQ29udGV4dCwgcGFyZW50RW50aXR5U2V0UGF0aCwgbmF2UGF0aC5yZXBsYWNlQWxsKFwiJTJGXCIsIFwiL1wiKSk7XG5cdFx0Y29uc3Qgb05hdkZpbHRlclJlc3QgPSBvTmF2UmVzdHJpY3Rpb25zICYmIChvTmF2UmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT4pO1xuXHRcdGNvbnN0IG5hdlJlc1JlcVByb3BzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZGaWx0ZXJSZXN0LCBcIlJlcXVpcmVkUHJvcGVydGllc1wiKSB8fCBbXTtcblx0XHRvUmV0LlJlcXVpcmVkUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KG5hdlJlc1JlcVByb3BzKSk7XG5cdFx0Y29uc3QgbmF2Tm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdkZpbHRlclJlc3QsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW107XG5cdFx0b1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IHVuaXF1ZVNvcnQob1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQobmF2Tm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIHx8IHt9LFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24ob05hdkZpbHRlclJlc3QpIHx8IHt9XG5cdFx0KSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cblx0XHQvL0hJR0hFU1QgcHJpb3JpdHkgLSBSZXN0cmljdGlvbnMgaGF2aW5nIHRhcmdldCB3aXRoIG5hdmlnYXRpb24gYXNzb2NpYXRpb24gZW50aXR5XG5cdFx0Ly8gZS5nLiBGUiBpbiBcIkN1c3RvbWVyUGFyYW1ldGVycy9TZXRcIiBDb250ZXh0UGF0aDogXCJDdXN0b21lci9TZXRcIlxuXHRcdGNvbnN0IG5hdkFzc29jaWF0aW9uRW50aXR5UmVzdCA9IG9Db250ZXh0LmdldE9iamVjdChcblx0XHRcdGAvJHtlbnRpdHlUeXBlUGF0aFBhcnRzLmpvaW4oXCIvXCIpfSR7ZnJUZXJtfWBcblx0XHQpIGFzIE1ldGFNb2RlbFR5cGU8RmlsdGVyUmVzdHJpY3Rpb25zVHlwZT47XG5cdFx0Y29uc3QgbmF2QXNzb2NSZXFQcm9wcyA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhuYXZBc3NvY2lhdGlvbkVudGl0eVJlc3QsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuUmVxdWlyZWRQcm9wZXJ0aWVzID0gdW5pcXVlU29ydChvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQobmF2QXNzb2NSZXFQcm9wcykpO1xuXHRcdGNvbnN0IG5hdkFzc29jTm9uRmlsdGVyUHJvcHMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMobmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0LCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSB1bmlxdWVTb3J0KG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KG5hdkFzc29jTm9uRmlsdGVyUHJvcHMpKTtcblx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBtZXJnZU9iamVjdHMoXG5cdFx0XHR7fSxcblx0XHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zLFxuXHRcdFx0Z2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24obmF2QXNzb2NpYXRpb25FbnRpdHlSZXN0KSB8fCB7fVxuXHRcdCkgYXMgX0ZpbHRlckFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cblxuZXhwb3J0IHR5cGUgUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdGFwcENvbXBvbmVudD86IEFwcENvbXBvbmVudDtcblx0YmluZGluZ0NvbnRleHRzOiBvYmplY3Q7XG5cdG1vZGVsczogb2JqZWN0O1xufTtcbmV4cG9ydCB0eXBlIEJhc2VUcmVlTW9kaWZpZXIgPSB7XG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRcdHNGcmFnbWVudE5hbWU6IHN0cmluZyxcblx0XHRtUHJlcHJvY2Vzc29yU2V0dGluZ3M6IFByZXByb2Nlc3NvclNldHRpbmdzLFxuXHRcdG9WaWV3PzogVmlld1xuXHQpOiBQcm9taXNlPFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXT47XG5cdHRhcmdldHM6IHN0cmluZztcblx0Z2V0SWQodkNvbnRyb2w6IFVJNUVsZW1lbnQgfCBFbGVtZW50KTogc3RyaW5nO1xuXHRnZXRDb250cm9sVHlwZShvQ29udHJvbDogVUk1RWxlbWVudCB8IEVsZW1lbnQpOiBzdHJpbmc7XG5cdGdldFByb3BlcnR5PFQ+KG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCwgc1Byb3BlcnR5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxUPjtcblx0Z2V0QWdncmVnYXRpb24ocGFyZW50OiBVSTVFbGVtZW50IHwgRWxlbWVudCwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxVSTVFbGVtZW50W10gfCBFbGVtZW50W10+O1xuXHRpbnNlcnRBZ2dyZWdhdGlvbihcblx0XHRwYXJlbnQ6IFVJNUVsZW1lbnQgfCBFbGVtZW50LFxuXHRcdG5hbWU6IHN0cmluZyxcblx0XHRjb250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCB8IFVJNUVsZW1lbnRbXSB8IEVsZW1lbnRbXSxcblx0XHRpbmRleD86IG51bWJlcixcblx0XHR2aWV3PzogRWxlbWVudCxcblx0XHRza2lwQWRqdXN0SW5kZXg/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD47XG5cdHNldFByb3BlcnR5KG9Db250cm9sOiBVSTVFbGVtZW50IHwgRWxlbWVudCwgc1Byb3BlcnR5TmFtZTogc3RyaW5nLCB2VmFsdWU6IHVua25vd24pOiB2b2lkO1xuXHRieVNlbGVjdG9yKG9TZWxlY3Rvcjogb2JqZWN0LCBvQXBwQ29tcG9uZW50PzogQ29tcG9uZW50LCBvVmlldz86IEVsZW1lbnQpOiBNYW5hZ2VkT2JqZWN0IHwgRWxlbWVudDtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIHRlbXBsYXRlQ29udHJvbEZyYWdtZW50KFxuXHRzRnJhZ21lbnROYW1lOiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbCxcblx0b1ByZXByb2Nlc3NvclNldHRpbmdzOiBQcmVwcm9jZXNzb3JTZXR0aW5ncyxcblx0b0luT3B0aW9ucz86IHsgdmlldz86IFZpZXc7IGlzWE1MPzogYm9vbGVhbjsgaWQ/OiBzdHJpbmc7IGNvbnRyb2xsZXI/OiBQYWdlQ29udHJvbGxlciB8IEV4dGVuc2lvbkFQSTsgY29udGFpbmluZ1ZpZXc/OiBWaWV3IH0sXG5cdG9Nb2RpZmllcj86IEJhc2VUcmVlTW9kaWZpZXJcbik6IFByb21pc2U8RWxlbWVudCB8IFVJNUVsZW1lbnQgfCBFbGVtZW50W10gfCBVSTVFbGVtZW50W10+IHtcblx0Y29uc3Qgb09wdGlvbnMgPSBvSW5PcHRpb25zIHx8IHt9O1xuXHRpZiAob01vZGlmaWVyICYmIHR5cGVvZiBzRnJhZ21lbnROYW1lID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9Nb2RpZmllci50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChzRnJhZ21lbnROYW1lLCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MsIG9PcHRpb25zLnZpZXcpLnRoZW4oZnVuY3Rpb24gKG9GcmFnbWVudCkge1xuXHRcdFx0Ly8gVGhpcyBpcyByZXF1aXJlZCBhcyBGbGV4IHJldHVybnMgYW4gSFRNTENvbGxlY3Rpb24gYXMgdGVtcGxhdGluZyByZXN1bHQgaW4gWE1MIHRpbWUuXG5cdFx0XHRyZXR1cm4gb01vZGlmaWVyLnRhcmdldHMgPT09IFwieG1sVHJlZVwiICYmIG9GcmFnbWVudC5sZW5ndGggPiAwID8gb0ZyYWdtZW50WzBdIDogb0ZyYWdtZW50O1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGZyYWdtZW50RGF0YSA9XG5cdFx0XHR0eXBlb2Ygc0ZyYWdtZW50TmFtZSA9PT0gXCJzdHJpbmdcIiA/IFhNTFRlbXBsYXRlUHJvY2Vzc29yLmxvYWRUZW1wbGF0ZShzRnJhZ21lbnROYW1lLCBcImZyYWdtZW50XCIpIDogc0ZyYWdtZW50TmFtZTtcblx0XHRjb25zdCBvRnJhZ21lbnQgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhmcmFnbWVudERhdGEsIHsgbmFtZTogc0ZyYWdtZW50TmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRcdGNvbnN0IG9Db250cm9sID0gb0ZyYWdtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2w7XG5cdFx0fVxuXHRcdGxldCBvd25lcjogeyBydW5Bc093bmVyOiA8VD4oZm46ICgpID0+IFQpID0+IFQgfSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5hcHBDb21wb25lbnQgPz8geyBydW5Bc093bmVyOiAoZm4pID0+IGZuKCkgfTtcblx0XHRpZiAob09wdGlvbnMuY29udGFpbmluZ1ZpZXcpIHtcblx0XHRcdGNvbnN0IHZpZXdPd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvT3B0aW9ucy5jb250YWluaW5nVmlldyk7XG5cdFx0XHRpZiAodmlld093bmVyKSB7XG5cdFx0XHRcdG93bmVyID0gdmlld093bmVyO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRsZXQgY29udGFpbmluZ1ZpZXc6IFZpZXcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKG9PcHRpb25zLnZpZXcgJiYgIW9PcHRpb25zLmNvbnRyb2xsZXIpIHtcblx0XHRcdC8vIHRoaXMgaXMgb3ZlcmFsbCBzdHVwaWQsIGluIGNhc2Ugd2UgYXJlIGNvbWluZyBmcm9tIHRoZSBkZWxlZ2F0ZSB3aXRoIGFuIHhtbCBub2RlIGluc3RlYWQgb2YgYSBmcmFnbWVudCB3ZSBuZWVkIHRvIHBhc3MgdGhlIGNvbnRhaW5pbmdWaWV3IGluIHRoZXJlIChkb25lIGJ5IHRoZSBvTW9kaWZpZXIgY2FsbCBmb3IgaW5zdGFuY2UpXG5cdFx0XHQvLyBCdXQgaW4gb3RoZXIgcnVudGltZSBjYXNlIHdoZXJlIHdlIGFyZSBoZXJlIHdlIG5lZWQgdG8gbWFpbnRhaW4gdGhlIGNvbnRyb2xsZXIgYW5kIHRodXMgY2Fubm90IGhhdmUgYSBjb250YWluaW5nVmlldy4uLlxuXHRcdFx0Y29udGFpbmluZ1ZpZXcgPSBvT3B0aW9ucy52aWV3O1xuXHRcdH1cblx0XHRyZXR1cm4gb3duZXIucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gRnJhZ21lbnQubG9hZCh7XG5cdFx0XHRcdGlkOiBvT3B0aW9ucy5pZCxcblx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50IGFzIHVua25vd24gYXMgc3RyaW5nLFxuXHRcdFx0XHRjb250cm9sbGVyOiBvT3B0aW9ucy5jb250cm9sbGVyLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogY29udGFpbmluZ1ZpZXdcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNpbmdsZXRvblBhdGgocGF0aDogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbiksXG5cdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCkhLFxuXHRcdG5hdmlnYXRpb25QYXRoID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0ZW50aXR5U2V0ID0gbmF2aWdhdGlvblBhdGggJiYgbWV0YU1vZGVsLmdldE9iamVjdChgLyR7bmF2aWdhdGlvblBhdGh9YCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBgLyR7c2luZ2xldG9uTmFtZX0vJHtwcm9wZXJ0eU5hbWV9YDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkocGF0aDogc3RyaW5nLCBtb2RlbDogT0RhdGFNb2RlbCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRpZiAoIXBhdGggfHwgIW1vZGVsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcblx0fVxuXHRjb25zdCBtZXRhTW9kZWwgPSBtb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Ly8gRmluZCB0aGUgdW5kZXJseWluZyBlbnRpdHkgc2V0IGZyb20gdGhlIHByb3BlcnR5IHBhdGggYW5kIGNoZWNrIHdoZXRoZXIgaXQgaXMgYSBzaW5nbGV0b24uXG5cdGNvbnN0IHJlc29sdmVkUGF0aCA9IGdldFNpbmdsZXRvblBhdGgocGF0aCwgbWV0YU1vZGVsKTtcblx0aWYgKHJlc29sdmVkUGF0aCkge1xuXHRcdGNvbnN0IHByb3BlcnR5QmluZGluZyA9IG1vZGVsLmJpbmRQcm9wZXJ0eShyZXNvbHZlZFBhdGgpO1xuXHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmcucmVxdWVzdFZhbHVlKCk7XG5cdH1cblxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xufVxuXG4vLyBHZXQgdGhlIHBhdGggZm9yIGFjdGlvbiBwYXJhbWV0ZXJzIHRoYXQgaXMgbmVlZGVkIHRvIHJlYWQgdGhlIGFubm90YXRpb25zXG5mdW5jdGlvbiBnZXRQYXJhbWV0ZXJQYXRoKHNQYXRoOiBzdHJpbmcsIHNQYXJhbWV0ZXI6IHN0cmluZyk6IHN0cmluZyB7XG5cdGxldCBzQ29udGV4dDtcblx0aWYgKHNQYXRoLmluY2x1ZGVzKFwiQCR1aTUub3ZlcmxvYWRcIikpIHtcblx0XHRzQ29udGV4dCA9IHNQYXRoLnNwbGl0KFwiQCR1aTUub3ZlcmxvYWRcIilbMF07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gRm9yIFVuYm91bmQgQWN0aW9ucyBpbiBBY3Rpb24gUGFyYW1ldGVyIERpYWxvZ3Ncblx0XHRjb25zdCBhQWN0aW9uID0gc1BhdGguc3BsaXQoXCIvMFwiKVswXS5zcGxpdChcIi5cIik7XG5cdFx0c0NvbnRleHQgPSBgLyR7YUFjdGlvblthQWN0aW9uLmxlbmd0aCAtIDFdfS9gO1xuXHR9XG5cdHJldHVybiBzQ29udGV4dCArIHNQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogR2V0IHJlc29sdmVkIGV4cHJlc3Npb24gYmluZGluZyB1c2VkIGZvciB0ZXh0cyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4cEJpbmRpbmdcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBBIHN0cmluZyBhZnRlciByZXNvbHV0aW9uLlxuICovXG5mdW5jdGlvbiBfZm50cmFuc2xhdGVkVGV4dEZyb21FeHBCaW5kaW5nU3RyaW5nKGV4cEJpbmRpbmc6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdC8vIFRoZSBpZGVhIGhlcmUgaXMgdG8gY3JlYXRlIGR1bW15IGVsZW1lbnQgd2l0aCB0aGUgZXhwcmVzaW9uIGJpbmRpbmcuXG5cdC8vIEFkZGluZyBpdCBhcyBkZXBlbmRlbnQgdG8gdGhlIHZpZXcvY29udHJvbCB3b3VsZCBwcm9wYWdhdGUgYWxsIHRoZSBtb2RlbHMgdG8gdGhlIGR1bW15IGVsZW1lbnQgYW5kIHJlc29sdmUgdGhlIGJpbmRpbmcuXG5cdC8vIFdlIHJlbW92ZSB0aGUgZHVtbXkgZWxlbWVudCBhZnRlciB0aGF0IGFuZCBkZXN0cm95IGl0LlxuXG5cdGNvbnN0IGFueVJlc291cmNlVGV4dCA9IG5ldyBBbnlFbGVtZW50KHsgYW55VGV4dDogZXhwQmluZGluZyB9KTtcblx0Y29udHJvbC5hZGREZXBlbmRlbnQoYW55UmVzb3VyY2VUZXh0KTtcblx0Y29uc3QgcmVzdWx0VGV4dCA9IGFueVJlc291cmNlVGV4dC5nZXRBbnlUZXh0KCk7XG5cdGNvbnRyb2wucmVtb3ZlRGVwZW5kZW50KGFueVJlc291cmNlVGV4dCk7XG5cdGFueVJlc291cmNlVGV4dC5kZXN0cm95KCk7XG5cblx0cmV0dXJuIHJlc3VsdFRleHQ7XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBjdXJyZW50IGRldmljZSBoYXMgYSBzbWFsbCBzY3JlZW4uXG4gKiBAcmV0dXJucyBBIEJvb2xlYW4uXG4gKi9cbmZ1bmN0aW9uIGlzU21hbGxEZXZpY2UoKTogYm9vbGVhbiB7XG5cdHJldHVybiAhRGV2aWNlLnN5c3RlbS5kZXNrdG9wIHx8IERldmljZS5yZXNpemUud2lkdGggPD0gMzIwO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uIGFuZCBjcmVhdGVzIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlcnMuXG4gKiBAcGFyYW0gY29udHJvbCBNREMgQ2hhcnQsIE1EQyBUYWJsZSBvciBNdWx0aVZpZXcgY29udHJvbCBvbiB3aGljaCB0aGUgZmlsdGVycyBhcmUgYXBwbGllZFxuICogQHBhcmFtIGFubm90YXRpb25QYXRoIFNlbGVjdGlvblZhcmlhbnQgb3IgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIGZpbHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbihjb250cm9sOiBDb250cm9sIHwgTURDQ2hhcnQgfCBNRENUYWJsZSwgYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IEZpbHRlcltdIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wgYXMgQ29udHJvbCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHN2Q29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChgJHtjb250cm9sLmRhdGEoXCJlbnRpdHlUeXBlXCIpfSR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdGNvbnN0IHByb3BlcnR5RmlsdGVyczogUmVjb3JkPHN0cmluZywgRmlsdGVyW10+ID0ge307XG5cdGxldCBhbm5vdGF0aW9uID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhzdkNvbnRleHQpLnRhcmdldE9iamVjdDtcblxuXHRpZiAoaXNBbm5vdGF0aW9uT2ZUeXBlPFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ+KGFubm90YXRpb24sIFVJQW5ub3RhdGlvblR5cGVzLlNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlKSkge1xuXHRcdGFubm90YXRpb24gPSBhbm5vdGF0aW9uLlNlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHRpZiAoIWFubm90YXRpb24gfHwgIWlzQW5ub3RhdGlvbk9mVHlwZTxTZWxlY3Rpb25WYXJpYW50VHlwZT4oYW5ub3RhdGlvbiwgVUlBbm5vdGF0aW9uVHlwZXMuU2VsZWN0aW9uVmFyaWFudFR5cGUpKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0KGFubm90YXRpb24uU2VsZWN0T3B0aW9ucyB8fCBbXSkuZm9yRWFjaCgoc2VsZWN0T3B0aW9uKSA9PiB7XG5cdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LiR0YXJnZXQgJiYgc2VsZWN0T3B0aW9uLlJhbmdlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlUeXBlID0gc2VsZWN0T3B0aW9uLlByb3BlcnR5TmFtZS4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Zm9yIChjb25zdCBqIGluIHNlbGVjdE9wdGlvbi5SYW5nZXMpIHtcblx0XHRcdFx0Y29uc3QgcmFuZ2UgPSBnZXRSYW5nZURlZmluaXRpb24oc2VsZWN0T3B0aW9uLlJhbmdlc1tqXSwgcHJvcGVydHlUeXBlKTtcblx0XHRcdFx0cHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPSAocHJvcGVydHlGaWx0ZXJzW3Byb3BlcnR5UGF0aF0gPz8gW10pLmNvbmNhdChcblx0XHRcdFx0XHRuZXcgRmlsdGVyKHByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBmaWx0ZXJzID0gW107XG5cdGZvciAoY29uc3QgcGF0aCBpbiBwcm9wZXJ0eUZpbHRlcnMpIHtcblx0XHRmaWx0ZXJzLnB1c2goXG5cdFx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdFx0ZmlsdGVyczogcHJvcGVydHlGaWx0ZXJzW3BhdGhdLFxuXHRcdFx0XHRhbmQ6IGZhbHNlXG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIGZpbHRlcnM7XG59XG5cbmZ1bmN0aW9uIGdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKFxuXHRzTWV0YVBhdGg6IHN0cmluZyxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdHNFbnRpdHlTZXQ6IHN0cmluZyxcblx0b0RpYWdub3N0aWNzOiBEaWFnbm9zdGljc1xuKTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNNZXRhUGF0aCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdHJldHVybiBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oc0VudGl0eVNldCwgb0NvbnRleHQgfHwgb01ldGFNb2RlbCwgb0RpYWdub3N0aWNzLCBtZXJnZU9iamVjdHMpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuICogSWYgYSB2aWV3IGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCB0aGUgZHJhZnQgUm9vdCBQYXRoLCB0aGlzIG1ldGhvZCByZXR1cm5zIGl0cyBiaW5kaW5nQ29udGV4dC5cbiAqIFdoZXJlIG5vIHZpZXcgaXMgZm91bmQgYSBuZXcgY3JlYXRlZCBjb250ZXh0IGlzIHJldHVybmVkLlxuICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuICogQHBhcmFtIHByb2dyYW1taW5nTW9kZWxcbiAqIEBwYXJhbSB2aWV3XG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSb290Q29udGV4dChwcm9ncmFtbWluZ01vZGVsOiBzdHJpbmcsIHZpZXc6IFZpZXcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IGNvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQ7XG5cdGlmIChjb250ZXh0KSB7XG5cdFx0Y29uc3Qgcm9vdENvbnRleHRQYXRoID1cblx0XHRcdHByb2dyYW1taW5nTW9kZWwgPT09IFwiRHJhZnRcIiA/IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCkgOiBNb2RlbEhlbHBlci5nZXRTdGlja3lSb290UGF0aChjb250ZXh0KTtcblx0XHRsZXQgc2ltcGxlUm9vdENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xuXHRcdGlmIChyb290Q29udGV4dFBhdGgpIHtcblx0XHRcdC8vIENoZWNrIGlmIGEgdmlldyBtYXRjaGVzIHdpdGggdGhlIGRyYWZ0IHJvb3QgcGF0aFxuXHRcdFx0Y29uc3QgZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSA9IGFwcENvbXBvbmVudFxuXHRcdFx0XHQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0LmdldEluc3RhbmNlZFZpZXdzKClcblx0XHRcdFx0LmZpbmQoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRpZiAoZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSkge1xuXHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdFx0c2ltcGxlUm9vdENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3NpbXBsZVJvb3RDb250ZXh0XCIpO1xuXHRcdFx0aWYgKHNpbXBsZVJvb3RDb250ZXh0Py5nZXRQYXRoKCkgPT09IHJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdHNpbXBsZVJvb3RDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQocm9vdENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGF3YWl0IENvbW1vblV0aWxzLndhaXRGb3JDb250ZXh0UmVxdWVzdGVkKHNpbXBsZVJvb3RDb250ZXh0KTtcblx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9zaW1wbGVSb290Q29udGV4dFwiLCBzaW1wbGVSb290Q29udGV4dCk7XG5cdFx0XHRyZXR1cm4gc2ltcGxlUm9vdENvbnRleHQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5IGZvciB0aGUgZWRpdG1vZGUgb3Igbm90LlxuICogQHBhcmFtIHNvdXJjZVxuICogQHJldHVybnMgSWYgdGhlIHNvdXJjZSBpcyB0byBiZSBkaXNwbGF5ZWQgaW4gZWRpdCBtb2RlXG4gKi9cbmZ1bmN0aW9uIGdldElzRWRpdGFibGUoc291cmNlOiBNYW5hZ2VkT2JqZWN0IHwgUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3QgbWFuYWdlZE9iamVjdCA9IHNvdXJjZS5pc0E8UGFnZUNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcIikgPyBzb3VyY2UuZ2V0VmlldygpIDogc291cmNlO1xuXHRyZXR1cm4gbWFuYWdlZE9iamVjdC5nZXRCaW5kaW5nQ29udGV4dChcInVpXCIpPy5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xufVxuXG5jb25zdCBDb21tb25VdGlscyA9IHtcblx0SU5MSU5FRURJVF9VUERBVEVHUk9VUElEOiBcImlubGluZVwiLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRnZXRDdXJyZW50UGFnZVZpZXc6IGdldEN1cnJlbnRQYWdlVmlldyxcblx0aGFzVHJhbnNpZW50Q29udGV4dDogZm5IYXNUcmFuc2llbnRDb250ZXh0cyxcblx0dXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzOiBmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyxcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5OiBnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHksXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0d2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQ6IHdhaXRGb3JDb250ZXh0UmVxdWVzdGVkLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0c2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlOiBzZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUsXG5cdHNldER5bmFtaWNBY3Rpb25Db250ZXh0czogc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzLFxuXHRyZXF1ZXN0UHJvcGVydHk6IHJlcXVlc3RQcm9wZXJ0eSxcblx0Z2V0UGFyYW1ldGVyUGF0aDogZ2V0UGFyYW1ldGVyUGF0aCxcblx0Z2V0UmVsYXRlZEFwcHNNZW51SXRlbXM6IF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyxcblx0Z2V0VHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZzogX2ZudHJhbnNsYXRlZFRleHRGcm9tRXhwQmluZGluZ1N0cmluZyxcblx0dXBkYXRlUmVsYXRlQXBwc01vZGVsOiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnM6IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zLFxuXHRnZXRGaWx0ZXJzRnJvbUFubm90YXRpb246IGdldEZpbHRlcnNGcm9tQW5ub3RhdGlvbixcblx0Y3JlYXRlUm9vdENvbnRleHQ6IGNyZWF0ZVJvb3RDb250ZXh0LFxuXHR1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5OiB1cGRhdGVNZW51QnV0dG9uVmlzaWJsaXR5LFxuXHRpc1NtYWxsRGV2aWNlLFxuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCxcblx0Z2V0SXNFZGl0YWJsZTogZ2V0SXNFZGl0YWJsZVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tbW9uVXRpbHM7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
|