@sapui5/sap.fe.core 1.111.0 → 1.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +4 -4
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +11 -11
- package/src/sap/fe/core/AppComponent-dbg.js +27 -5
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +58 -3
- package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +10 -1
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +2 -1
- package/src/sap/fe/core/CommonUtils-dbg.js +152 -365
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +201 -478
- package/src/sap/fe/core/ExtensionAPI-dbg.js +2 -1
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +9 -1
- package/src/sap/fe/core/PageController-dbg.js +26 -31
- package/src/sap/fe/core/PageController.js +1 -1
- package/src/sap/fe/core/PageController.js.map +1 -1
- package/src/sap/fe/core/PageController.ts +17 -3
- package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
- package/src/sap/fe/core/ResourceModel.js +6 -0
- package/src/sap/fe/core/ResourceModel.js.map +1 -0
- package/src/sap/fe/core/ResourceModel.ts +67 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +6 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +163 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +169 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +147 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +905 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +279 -335
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +181 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +890 -220
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +974 -239
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +24 -34
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +71 -61
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +24 -0
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +2 -3
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +45 -31
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +52 -42
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +44 -49
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +43 -63
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +77 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +114 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1505 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1985 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -11
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -13
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +43 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +44 -47
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +12 -13
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +32 -13
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
- package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
- package/src/sap/fe/core/controls/FilterBar.ts +5 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +2 -1
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +17 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.ts +16 -0
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +61 -49
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +65 -51
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +65 -16
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +62 -18
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1010 -957
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +8 -8
- package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +28 -26
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -3
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +15 -15
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +97 -69
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +161 -137
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +10 -9
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +48 -44
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +130 -86
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +34 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +62 -45
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +34 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +54 -20
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +3 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +8 -0
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +9 -8
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +8 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +8 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +9 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +25 -33
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +35 -35
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +11 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +7 -1
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
- package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -2
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +5 -5
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +6 -4
- package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
- package/src/sap/fe/core/fpm/Component.ts +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +6 -6
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +8 -8
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +20 -18
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +22 -23
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +4 -5
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +4 -4
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +354 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +408 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +13 -13
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +13 -13
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +26 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +19 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +93 -18
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +70 -17
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +5 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.ts +12 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
- package/src/sap/fe/core/library-dbg.js +2 -2
- package/src/sap/fe/core/library-preload.js +127 -125
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.ts +7 -0
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/messagebundle.properties +33 -0
- package/src/sap/fe/core/messagebundle_ar.properties +12 -10
- package/src/sap/fe/core/messagebundle_bg.properties +11 -9
- package/src/sap/fe/core/messagebundle_ca.properties +11 -9
- package/src/sap/fe/core/messagebundle_cs.properties +11 -9
- package/src/sap/fe/core/messagebundle_cy.properties +11 -9
- package/src/sap/fe/core/messagebundle_da.properties +11 -9
- package/src/sap/fe/core/messagebundle_de.properties +3 -1
- package/src/sap/fe/core/messagebundle_el.properties +11 -9
- package/src/sap/fe/core/messagebundle_en.properties +3 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +20 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +21 -3
- package/src/sap/fe/core/messagebundle_es.properties +11 -9
- package/src/sap/fe/core/messagebundle_es_MX.properties +11 -9
- package/src/sap/fe/core/messagebundle_et.properties +11 -9
- package/src/sap/fe/core/messagebundle_fi.properties +11 -9
- package/src/sap/fe/core/messagebundle_fr.properties +11 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +3 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -0
- package/src/sap/fe/core/messagebundle_hr.properties +11 -9
- package/src/sap/fe/core/messagebundle_hu.properties +11 -9
- package/src/sap/fe/core/messagebundle_id.properties +3 -1
- package/src/sap/fe/core/messagebundle_it.properties +11 -9
- package/src/sap/fe/core/messagebundle_iw.properties +11 -9
- package/src/sap/fe/core/messagebundle_ja.properties +11 -9
- package/src/sap/fe/core/messagebundle_kk.properties +11 -9
- package/src/sap/fe/core/messagebundle_ko.properties +2 -0
- package/src/sap/fe/core/messagebundle_lt.properties +11 -9
- package/src/sap/fe/core/messagebundle_lv.properties +2 -0
- package/src/sap/fe/core/messagebundle_ms.properties +12 -10
- package/src/sap/fe/core/messagebundle_nl.properties +12 -10
- package/src/sap/fe/core/messagebundle_no.properties +11 -9
- package/src/sap/fe/core/messagebundle_pl.properties +2 -0
- package/src/sap/fe/core/messagebundle_pt.properties +11 -9
- package/src/sap/fe/core/messagebundle_pt_PT.properties +11 -9
- package/src/sap/fe/core/messagebundle_ro.properties +3 -1
- package/src/sap/fe/core/messagebundle_ru.properties +3 -1
- package/src/sap/fe/core/messagebundle_sh.properties +11 -9
- package/src/sap/fe/core/messagebundle_sk.properties +11 -9
- package/src/sap/fe/core/messagebundle_sl.properties +11 -9
- package/src/sap/fe/core/messagebundle_sv.properties +2 -0
- package/src/sap/fe/core/messagebundle_th.properties +11 -9
- package/src/sap/fe/core/messagebundle_tr.properties +11 -9
- package/src/sap/fe/core/messagebundle_uk.properties +11 -9
- package/src/sap/fe/core/messagebundle_vi.properties +12 -10
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -0
- package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
- package/src/sap/fe/core/operationsHelper.js +1 -1
- package/src/sap/fe/core/operationsHelper.js.map +1 -1
- package/src/sap/fe/core/operationsHelper.ts +88 -63
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +4 -3
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +15 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +29 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +14 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +502 -333
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +18 -5
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +41 -12
- package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -0
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +185 -86
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +190 -82
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.ts +1 -3
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +4 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
- package/src/sap/fe/core/type/FiscalDate.ts +2 -1
- package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +3 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -932
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
- package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
- package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
- package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
- package/src/sap/fe/core/controls/FileWrapper.js +0 -6
- package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/controls/ListReport/VisualFilters", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "../Common/DataVisualization"], function (Table, VisualFilters, ConfigurableObject, IssueManager, Key, BindingToolkit, ModelHelper, DataVisualization) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var getSelectionVariant = DataVisualization.getSelectionVariant;
|
|
10
|
-
var AvailabilityType = ManifestSettings.AvailabilityType;
|
|
11
10
|
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
12
11
|
var compileExpression = BindingToolkit.compileExpression;
|
|
13
12
|
var KeyHelper = Key.KeyHelper;
|
|
@@ -120,14 +119,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
120
119
|
const _createFilterSelectionField = function (entityType, property, fullPropertyPath, includeHidden, converterContext) {
|
|
121
120
|
var _property$annotations, _property$annotations2, _property$annotations3;
|
|
122
121
|
// ignore complex property types and hidden annotated ones
|
|
123
|
-
if (property
|
|
122
|
+
if (property && property.targetType === undefined && (includeHidden || ((_property$annotations = property.annotations) === null || _property$annotations === void 0 ? void 0 : (_property$annotations2 = _property$annotations.UI) === null || _property$annotations2 === void 0 ? void 0 : (_property$annotations3 = _property$annotations2.Hidden) === null || _property$annotations3 === void 0 ? void 0 : _property$annotations3.valueOf()) !== true)) {
|
|
124
123
|
var _property$annotations4, _property$annotations5, _property$annotations6, _property$annotations7, _property$annotations8, _targetEntityType$ann, _targetEntityType$ann2, _targetEntityType$ann3;
|
|
125
124
|
const targetEntityType = converterContext.getAnnotationEntityType(property);
|
|
126
125
|
return {
|
|
127
126
|
key: KeyHelper.getSelectionFieldKeyFromPath(fullPropertyPath),
|
|
128
127
|
annotationPath: converterContext.getAbsoluteAnnotationPath(fullPropertyPath),
|
|
129
128
|
conditionPath: _getConditionPath(entityType, fullPropertyPath),
|
|
130
|
-
availability: ((_property$annotations4 = property.annotations) === null || _property$annotations4 === void 0 ? void 0 : (_property$annotations5 = _property$annotations4.UI) === null || _property$annotations5 === void 0 ? void 0 : (_property$annotations6 = _property$annotations5.HiddenFilter) === null || _property$annotations6 === void 0 ? void 0 : _property$annotations6.valueOf()) === true ?
|
|
129
|
+
availability: ((_property$annotations4 = property.annotations) === null || _property$annotations4 === void 0 ? void 0 : (_property$annotations5 = _property$annotations4.UI) === null || _property$annotations5 === void 0 ? void 0 : (_property$annotations6 = _property$annotations5.HiddenFilter) === null || _property$annotations6 === void 0 ? void 0 : _property$annotations6.valueOf()) === true ? "Hidden" : "Adaptation",
|
|
131
130
|
label: compileExpression(getExpressionFromAnnotation(((_property$annotations7 = property.annotations.Common) === null || _property$annotations7 === void 0 ? void 0 : (_property$annotations8 = _property$annotations7.Label) === null || _property$annotations8 === void 0 ? void 0 : _property$annotations8.valueOf()) || property.name)),
|
|
132
131
|
group: targetEntityType.name,
|
|
133
132
|
groupLabel: compileExpression(getExpressionFromAnnotation((targetEntityType === null || targetEntityType === void 0 ? void 0 : (_targetEntityType$ann = targetEntityType.annotations) === null || _targetEntityType$ann === void 0 ? void 0 : (_targetEntityType$ann2 = _targetEntityType$ann.Common) === null || _targetEntityType$ann2 === void 0 ? void 0 : (_targetEntityType$ann3 = _targetEntityType$ann2.Label) === null || _targetEntityType$ann3 === void 0 ? void 0 : _targetEntityType$ann3.valueOf()) || targetEntityType.name))
|
|
@@ -190,7 +189,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
190
189
|
// defined SelectionFields are available by default
|
|
191
190
|
if (filterField) {
|
|
192
191
|
var _entityType$annotatio, _entityType$annotatio2;
|
|
193
|
-
filterField.availability = filterField.availability ===
|
|
192
|
+
filterField.availability = filterField.availability === "Hidden" ? "Hidden" : "Default";
|
|
194
193
|
filterField.isParameter = !!((_entityType$annotatio = entityType.annotations) !== null && _entityType$annotatio !== void 0 && (_entityType$annotatio2 = _entityType$annotatio.Common) !== null && _entityType$annotatio2 !== void 0 && _entityType$annotatio2.ResultContext);
|
|
195
194
|
}
|
|
196
195
|
return filterField;
|
|
@@ -206,12 +205,12 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
206
205
|
if (aSelectOptions && aSelectOptions.length > 0) {
|
|
207
206
|
aSelectOptions === null || aSelectOptions === void 0 ? void 0 : aSelectOptions.forEach(selectOption => {
|
|
208
207
|
const propertyName = selectOption.PropertyName;
|
|
209
|
-
const sPropertyPath = propertyName.value;
|
|
208
|
+
const sPropertyPath = propertyName === null || propertyName === void 0 ? void 0 : propertyName.value;
|
|
210
209
|
const currentSelectionFields = {};
|
|
211
210
|
annotatedSelectionFields === null || annotatedSelectionFields === void 0 ? void 0 : annotatedSelectionFields.forEach(SelectionField => {
|
|
212
211
|
currentSelectionFields[SelectionField.value] = true;
|
|
213
212
|
});
|
|
214
|
-
if (!(sPropertyPath in excludedFilterProperties)) {
|
|
213
|
+
if (sPropertyPath && !(sPropertyPath in excludedFilterProperties)) {
|
|
215
214
|
if (!(sPropertyPath in currentSelectionFields)) {
|
|
216
215
|
const FilterField = getFilterField(sPropertyPath, converterContext, entityType);
|
|
217
216
|
if (FilterField) {
|
|
@@ -263,12 +262,13 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
263
262
|
* @param converterContext The converter context
|
|
264
263
|
* @returns The information if the FilterBar search field is hidden or not
|
|
265
264
|
*/
|
|
266
|
-
const
|
|
265
|
+
const getFilterBarHideBasicSearch = function (listReportTables, charts, converterContext) {
|
|
267
266
|
// Check if charts allow search
|
|
268
267
|
const noSearchInCharts = charts.length === 0 || charts.every(chart => !chart.applySupported.enableSearch);
|
|
269
268
|
|
|
270
269
|
// Check if all tables are analytical and none of them allow for search
|
|
271
|
-
|
|
270
|
+
// or all tables are TreeTable and none of them allow for search
|
|
271
|
+
const noSearchInTables = listReportTables.length === 0 || listReportTables.every(table => (table.enableAnalytics || table.control.type === "TreeTable") && !table.enableBasicSearch);
|
|
272
272
|
const contextPath = converterContext.getContextPath();
|
|
273
273
|
if (contextPath && noSearchInCharts && noSearchInTables) {
|
|
274
274
|
return true;
|
|
@@ -284,7 +284,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
284
284
|
* @param converterContext The converter context
|
|
285
285
|
* @returns The filter fields defined in the manifest
|
|
286
286
|
*/
|
|
287
|
-
_exports.
|
|
287
|
+
_exports.getFilterBarHideBasicSearch = getFilterBarHideBasicSearch;
|
|
288
288
|
const getManifestFilterFields = function (entityType, converterContext) {
|
|
289
289
|
const fbConfig = converterContext.getManifestWrapper().getFilterConfiguration();
|
|
290
290
|
const definedFilterFields = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.filterFields) || {};
|
|
@@ -307,7 +307,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
307
307
|
position: filterField.position || {
|
|
308
308
|
placement: Placement.After
|
|
309
309
|
},
|
|
310
|
-
availability: filterField.availability ||
|
|
310
|
+
availability: filterField.availability || "Default",
|
|
311
311
|
settings: filterField.settings,
|
|
312
312
|
visualFilter: visualFilter,
|
|
313
313
|
required: filterField.required
|
|
@@ -321,31 +321,36 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
321
321
|
};
|
|
322
322
|
_exports.getFilterField = getFilterField;
|
|
323
323
|
const getFilterRestrictions = function (oFilterRestrictionsAnnotation, sRestriction) {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
324
|
+
let aProps = [];
|
|
325
|
+
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation[sRestriction]) {
|
|
326
|
+
aProps = oFilterRestrictionsAnnotation[sRestriction].map(function (oProperty) {
|
|
327
|
+
return oProperty.value;
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
return aProps;
|
|
331
|
+
};
|
|
332
|
+
_exports.getFilterRestrictions = getFilterRestrictions;
|
|
333
|
+
const getFilterAllowedExpression = function (oFilterRestrictionsAnnotation) {
|
|
334
|
+
const mAllowedExpressions = {};
|
|
335
|
+
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation.FilterExpressionRestrictions) {
|
|
336
|
+
oFilterRestrictionsAnnotation.FilterExpressionRestrictions.forEach(function (oProperty) {
|
|
337
|
+
var _oProperty$Property;
|
|
338
|
+
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
339
|
+
if ((_oProperty$Property = oProperty.Property) !== null && _oProperty$Property !== void 0 && _oProperty$Property.value && oProperty.AllowedExpressions) {
|
|
340
|
+
var _oProperty$Property2;
|
|
341
|
+
if (mAllowedExpressions[(_oProperty$Property2 = oProperty.Property) === null || _oProperty$Property2 === void 0 ? void 0 : _oProperty$Property2.value]) {
|
|
342
|
+
var _oProperty$Property3;
|
|
343
|
+
mAllowedExpressions[(_oProperty$Property3 = oProperty.Property) === null || _oProperty$Property3 === void 0 ? void 0 : _oProperty$Property3.value].push(oProperty.AllowedExpressions.toString());
|
|
339
344
|
} else {
|
|
340
|
-
|
|
345
|
+
var _oProperty$Property4;
|
|
346
|
+
mAllowedExpressions[(_oProperty$Property4 = oProperty.Property) === null || _oProperty$Property4 === void 0 ? void 0 : _oProperty$Property4.value] = [oProperty.AllowedExpressions.toString()];
|
|
341
347
|
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
return mAllowedExpressions;
|
|
348
|
+
}
|
|
349
|
+
});
|
|
345
350
|
}
|
|
346
|
-
return
|
|
351
|
+
return mAllowedExpressions;
|
|
347
352
|
};
|
|
348
|
-
_exports.
|
|
353
|
+
_exports.getFilterAllowedExpression = getFilterAllowedExpression;
|
|
349
354
|
const getSearchFilterPropertyInfo = function () {
|
|
350
355
|
return {
|
|
351
356
|
name: "$search",
|
|
@@ -378,7 +383,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
378
383
|
const oNavigationRestrictions = (_converterContext$get4 = converterContext.getEntitySet()) === null || _converterContext$get4 === void 0 ? void 0 : (_converterContext$get5 = _converterContext$get4.annotations) === null || _converterContext$get5 === void 0 ? void 0 : (_converterContext$get6 = _converterContext$get5.Capabilities) === null || _converterContext$get6 === void 0 ? void 0 : _converterContext$get6.NavigationRestrictions;
|
|
379
384
|
const aRestrictedProperties = oNavigationRestrictions && oNavigationRestrictions.RestrictedProperties;
|
|
380
385
|
return aRestrictedProperties && aRestrictedProperties.find(function (oRestrictedProperty) {
|
|
381
|
-
return oRestrictedProperty && oRestrictedProperty.NavigationProperty &&
|
|
386
|
+
return oRestrictedProperty && oRestrictedProperty.NavigationProperty && oRestrictedProperty.NavigationProperty.value === sNavigationPath;
|
|
382
387
|
});
|
|
383
388
|
};
|
|
384
389
|
_exports.getNavigationRestrictions = getNavigationRestrictions;
|
|
@@ -592,9 +597,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
592
597
|
}
|
|
593
598
|
const oFilterRestrictions = _oFilterrestrictions;
|
|
594
599
|
const oRet = {};
|
|
595
|
-
oRet
|
|
596
|
-
oRet
|
|
597
|
-
oRet
|
|
600
|
+
oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
|
|
601
|
+
oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
|
|
602
|
+
oRet.FilterAllowedExpressions = getFilterAllowedExpression(oFilterRestrictions);
|
|
598
603
|
const sEntitySetPath = converterContext.getContextPath();
|
|
599
604
|
const aPathParts = sEntitySetPath.split("/");
|
|
600
605
|
if (aPathParts.length > 2) {
|
|
@@ -602,10 +607,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
602
607
|
aPathParts.splice(-1, 1);
|
|
603
608
|
const oNavigationRestrictions = getNavigationRestrictions(converterContext, sNavigationPath);
|
|
604
609
|
const oNavigationFilterRestrictions = oNavigationRestrictions && oNavigationRestrictions.FilterRestrictions;
|
|
605
|
-
oRet.RequiredProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "RequiredProperties") || []);
|
|
606
|
-
oRet.NonFilterableProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "NonFilterableProperties") || []);
|
|
610
|
+
oRet.RequiredProperties = oRet.RequiredProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "RequiredProperties") || []);
|
|
611
|
+
oRet.NonFilterableProperties = oRet.NonFilterableProperties.concat(getFilterRestrictions(oNavigationFilterRestrictions, "NonFilterableProperties") || []);
|
|
607
612
|
oRet.FilterAllowedExpressions = {
|
|
608
|
-
...(
|
|
613
|
+
...(getFilterAllowedExpression(oNavigationFilterRestrictions) || {}),
|
|
609
614
|
...oRet.FilterAllowedExpressions
|
|
610
615
|
};
|
|
611
616
|
}
|
|
@@ -615,7 +620,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
615
620
|
|
|
616
621
|
// process the fields to add necessary properties
|
|
617
622
|
propertyInfoFields.forEach(function (propertyInfoField) {
|
|
618
|
-
|
|
623
|
+
const sPropertyPath = propertyInfoField.conditionPath.replace(/\+|\*/g, "");
|
|
619
624
|
if (aNonFilterableProps.indexOf(sPropertyPath) === -1) {
|
|
620
625
|
const oPropertyInfo = assignDataTypeToPropertyInfo(propertyInfoField, converterContext, aRequiredProps, aTypeConfig);
|
|
621
626
|
aFetchedProperties.push(oPropertyInfo);
|
|
@@ -766,15 +771,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
766
771
|
*
|
|
767
772
|
* @param converterContext The converter context
|
|
768
773
|
* @param filterRestrictionsAnnotation The FilterRestriction annotation
|
|
769
|
-
* @param
|
|
774
|
+
* @param valueList The ValueList annotation
|
|
770
775
|
* @returns The value for expandFilterFields
|
|
771
776
|
*/
|
|
772
777
|
_exports.getSelectionFields = getSelectionFields;
|
|
773
|
-
const getExpandFilterFields = function (converterContext, filterRestrictionsAnnotation,
|
|
778
|
+
const getExpandFilterFields = function (converterContext, filterRestrictionsAnnotation, valueList) {
|
|
774
779
|
const requiredProperties = getFilterRestrictions(filterRestrictionsAnnotation, "RequiredProperties");
|
|
775
780
|
const searchRestrictions = getSearchRestrictions(converterContext);
|
|
776
781
|
const hideBasicSearch = Boolean(searchRestrictions && !searchRestrictions.Searchable);
|
|
777
|
-
const valueList = valueListAnnotation.getObject();
|
|
778
782
|
if (requiredProperties.length > 0 || hideBasicSearch || (valueList === null || valueList === void 0 ? void 0 : valueList.FetchValues) === 2) {
|
|
779
783
|
return true;
|
|
780
784
|
}
|
|
@@ -783,4 +787,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Table", "sap/fe/core/conv
|
|
|
783
787
|
_exports.getExpandFilterFields = getExpandFilterFields;
|
|
784
788
|
return _exports;
|
|
785
789
|
}, false);
|
|
786
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkxhYmVsIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50cyIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJzZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsImNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsIiwibGlzdFJlcG9ydFRhYmxlcyIsImNvbnRleHRQYXRoIiwibGVuZ3RoIiwiZXZlcnkiLCJ2aXN1YWxpemF0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJnZXRTZWxlY3Rpb25WYXJpYW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJtYXAiLCJ0YWJsZUZpbHRlcnMiLCJjb250cm9sIiwiZmlsdGVycyIsInRhYmxlU1ZDb25maWdzIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJhbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJwdXNoIiwic2VsZWN0aW9uVmFyaWFudENvbmZpZyIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic3ZDb25maWdzIiwiY29uY2F0IiwiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ1bmRlZmluZWQiLCJ0YXJnZXRUeXBlIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJjb25kaXRpb25QYXRoIiwiYXZhaWxhYmlsaXR5IiwiSGlkZGVuRmlsdGVyIiwiQXZhaWxhYmlsaXR5VHlwZSIsIkFkYXB0YXRpb24iLCJsYWJlbCIsIm5hbWUiLCJfZ2V0U2VsZWN0aW9uRmllbGRzIiwibmF2aWdhdGlvblBhdGgiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uRmllbGRNYXAiLCJmdWxsUGF0aCIsInNlbGVjdGlvbkZpZWxkIiwiX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCIsInByb3BlcnR5UGF0aHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJsb2NhbFNlbGVjdGlvbkZpZWxkcyIsImVudGl0eVByb3BlcnRpZXMiLCJpbmNsdWRlcyIsInNwbGljZSIsImpvaW4iLCJfZ2V0RmlsdGVyRmllbGQiLCJmaWx0ZXJGaWVsZHMiLCJmaWx0ZXJGaWVsZCIsImdldERpYWdub3N0aWNzIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiQW5ub3RhdGlvbiIsIklzc3VlU2V2ZXJpdHkiLCJIaWdoIiwiSXNzdWVUeXBlIiwiTUlTU0lOR19TRUxFQ1RJT05GSUVMRCIsIkRlZmF1bHQiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiX2dldFBhcmFtZXRlckZpZWxkcyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsImVuYWJsZUFuYWx5dGljc1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJmYkNvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiT2JqZWN0Iiwia2V5cyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwidHlwZSIsIlNsb3QiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwic2xvdE5hbWUiLCJ0ZW1wbGF0ZSIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzZXR0aW5ncyIsInJlcXVpcmVkIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCIkUHJvcGVydHlQYXRoIiwibUFsbG93ZWRFeHByZXNzaW9ucyIsIkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMiLCJQcm9wZXJ0eSIsIkFsbG93ZWRFeHByZXNzaW9ucyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsInNlYXJjaFJlc3RyaWN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNTaW5nbGV0b24iLCJnZXRFbnRpdHlTZXQiLCJjYXBhYmlsaXRlcyIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsImZpbmQiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyIsIm9GaWx0ZXJGaWVsZEluZm8iLCJkaXNwbGF5IiwiY2FzZVNlbnNpdGl2ZSIsIm1lbnUiLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5Iiwic29ydCIsImEiLCJiIiwiZGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJUZXh0Iiwib1RleHRBcnJhbmdtZW50QW5ub3RhdGlvbiIsIlRleHRBcnJhbmdlbWVudCIsImZldGNoUHJvcGVydHlJbmZvIiwib1R5cGVDb25maWciLCJvUHJvcGVydHlJbmZvIiwic0Fubm90YXRpb25QYXRoIiwidGFyZ2V0UHJvcGVydHlPYmplY3QiLCJ0YXJnZXRPYmplY3QiLCJvRm9ybWF0T3B0aW9ucyIsImZvcm1hdE9wdGlvbnMiLCJvQ29uc3RyYWludHMiLCJjb25zdHJhaW50cyIsImFzc2lnbiIsImlzTXVsdGlWYWx1ZSIsImJJc011bHRpVmFsdWUiLCJmaWx0ZXJFeHByZXNzaW9uIiwiX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImVudHJ5IiwiZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhIiwibHJUYWJsZXMiLCJsaW5lSXRlbVRlcm0iLCJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJTZWxlY3Rpb25GaWVsZHMiLCJuYXZQcm9wZXJ0aWVzIiwiZW50aXR5UGF0aCIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwicHJvcGVydHlJbmZvRmllbGRzIiwic3RhcnRzV2l0aCIsImZpbHRlclByb3BlcnR5UGF0aCIsImRlZmF1bHRGaWx0ZXJGaWVsZHMiLCJmZXRjaFR5cGVDb25maWciLCJnZXRUeXBlQ29uZmlnIiwibnVsbGFibGUiLCJwYXJzZUtlZXBzRW1wdHlTdHJpbmciLCJhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvIiwicHJvcGVydHlJbmZvRmllbGQiLCJhUmVxdWlyZWRQcm9wcyIsImFUeXBlQ29uZmlnIiwicmVwbGFjZSIsImlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSIsInByb2Nlc3NTZWxlY3Rpb25GaWVsZHMiLCJkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcyIsInNlbGVjdGlvbkZpZWxkVHlwZXMiLCJwYXJhbWV0ZXJGaWVsZCIsInByb3BlcnR5Q29udmVydHlDb250ZXh0IiwicHJvcGVydHlUYXJnZXRPYmplY3QiLCJfb0ZpbHRlcnJlc3RyaWN0aW9ucyIsIkZpbHRlclJlc3RyaWN0aW9ucyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJvUmV0Iiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJSZXF1aXJlZFByb3BlcnRpZXMiLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsImFOb25GaWx0ZXJhYmxlUHJvcHMiLCJhRmV0Y2hlZFByb3BlcnRpZXMiLCJpc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZCIsImhpZGVCYXNpY1NlYXJjaCIsIkJvb2xlYW4iLCJTZWFyY2hhYmxlIiwiaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyIsImluc2VydEN1c3RvbUVsZW1lbnRzIiwiT3ZlcnJpZGVUeXBlIiwib3ZlcndyaXRlIiwiZ2V0U2VsZWN0aW9uRmllbGRzIiwib0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsInBhcmFtZXRlckZpZWxkcyIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImxvY2FsZUNvbXBhcmUiLCJzRmV0Y2hQcm9wZXJ0aWVzIiwic1Byb3BlcnR5SW5mbyIsInByb3BTZWxlY3Rpb25GaWVsZHMiLCJmaWx0ZXJGYWNldHMiLCJGaWx0ZXJGYWNldHMiLCJhRmllbGRHcm91cHMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsImkiLCJmaWx0ZXJGYWNldCIsIlRhcmdldCIsIiR0YXJnZXQiLCJJRCIsInRvU3RyaW5nIiwiYWxsRmlsdGVycyIsImZpbHRlciIsInNDb250ZXh0UGF0aCIsImFnZ3JlZ2F0ZXMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlS2V5IiwicmVsYXRpdmVQYXRoIiwiaXNDYXNlU2Vuc2l0aXZlIiwiZ2V0RXhwYW5kRmlsdGVyRmllbGRzIiwiZmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInZhbHVlTGlzdEFubm90YXRpb24iLCJyZXF1aXJlZFByb3BlcnRpZXMiLCJ2YWx1ZUxpc3QiLCJnZXRPYmplY3QiLCJGZXRjaFZhbHVlcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmlsdGVyQmFyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblRlcm0sIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbiwgZ2V0VHlwZUNvbmZpZywgaXNGaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L1Zpc3VhbEZpbHRlcnNcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmFibGVPYmplY3QsIEN1c3RvbUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sIEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbiwgRmlsdGVyU2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgQXZhaWxhYmlsaXR5VHlwZSB9IGZyb20gXCIuLi8uLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcIi4uL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuLy9pbXBvcnQgeyBoYXNWYWx1ZUhlbHAgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJGaWVsZCA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0dHlwZT86IHN0cmluZztcblx0Y29uZGl0aW9uUGF0aDogc3RyaW5nO1xuXHRhdmFpbGFiaWxpdHk6IEF2YWlsYWJpbGl0eVR5cGU7XG5cdGFubm90YXRpb25QYXRoOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG5cdHNldHRpbmdzPzogRmlsdGVyU2V0dGluZ3M7XG5cdGlzUGFyYW1ldGVyPzogYm9vbGVhbjtcblx0dmlzdWFsRmlsdGVyPzogVmlzdWFsRmlsdGVycztcblx0Y2FzZVNlbnNpdGl2ZT86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgTWFuaWZlc3RGaWx0ZXJGaWVsZCA9IEZpbHRlckZpZWxkICYge1xuXHRzbG90TmFtZT86IHN0cmluZztcbn07XG5cbnR5cGUgRmlsdGVyR3JvdXAgPSB7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRncm91cExhYmVsPzogc3RyaW5nO1xufTtcblxuZW51bSBmaWx0ZXJGaWVsZFR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdFNsb3QgPSBcIlNsb3RcIlxufVxuXG5jb25zdCBzRWRtU3RyaW5nID0gXCJFZG0uU3RyaW5nXCI7XG5jb25zdCBzU3RyaW5nRGF0YVR5cGUgPSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiO1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQgPSBDdXN0b21FbGVtZW50PE1hbmlmZXN0RmlsdGVyRmllbGQ+O1xuXG4vKipcbiAqIEVudGVyIGFsbCBEYXRhRmllbGRzIG9mIGEgZ2l2ZW4gRmllbGRHcm91cCBpbnRvIHRoZSBmaWx0ZXJGYWNldE1hcC5cbiAqXG4gKiBAcGFyYW0gZmllbGRHcm91cFxuICogQHJldHVybnMgVGhlIG1hcCBvZiBmYWNldHMgZm9yIHRoZSBnaXZlbiBGaWVsZEdyb3VwXG4gKi9cbmZ1bmN0aW9uIGdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoZmllbGRHcm91cDogRmllbGRHcm91cCk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiB7XG5cdGNvbnN0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblx0ZmllbGRHcm91cC5EYXRhLmZvckVhY2goKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCIpIHtcblx0XHRcdGZpbHRlckZhY2V0TWFwW2RhdGFGaWVsZC5WYWx1ZS5wYXRoXSA9IHtcblx0XHRcdFx0Z3JvdXA6IGZpZWxkR3JvdXAuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRncm91cExhYmVsOlxuXHRcdFx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkR3JvdXAuTGFiZWwgfHwgZmllbGRHcm91cC5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCB8fCBmaWVsZEdyb3VwLnF1YWxpZmllcilcblx0XHRcdFx0XHQpIHx8IGZpZWxkR3JvdXAucXVhbGlmaWVyXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBmaWx0ZXJGYWNldE1hcDtcbn1cblxuZnVuY3Rpb24gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKHNlbGVjdGlvblZhcmlhbnRzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuXHRyZXR1cm4gc2VsZWN0aW9uVmFyaWFudHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiwgc2VsZWN0aW9uVmFyaWFudCkgPT4ge1xuXHRcdHNlbGVjdGlvblZhcmlhbnQucHJvcGVydHlOYW1lcy5mb3JFYWNoKChwcm9wZXJ0eU5hbWUpID0+IHtcblx0XHRcdHByZXZpb3VzVmFsdWVbcHJvcGVydHlOYW1lXSA9IHRydWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdH0sIHt9KTtcbn1cblxuLyoqXG4gKiBDaGVjayB0aGF0IGFsbCB0aGUgdGFibGVzIGZvciBhIGRlZGljYXRlZCBlbnRpdHkgc2V0IGFyZSBjb25maWd1cmVkIGFzIGFuYWx5dGljYWwgdGFibGVzLlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIExpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNvbnRleHRQYXRoXG4gKiBAcmV0dXJucyBJcyBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGhpZGRlbiBvciBub3RcbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sIGNvbnRleHRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0aWYgKGNvbnRleHRQYXRoICYmIGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsaXN0UmVwb3J0VGFibGVzLmV2ZXJ5KCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5lbmFibGVBbmFseXRpY3MgJiYgY29udGV4dFBhdGggPT09IHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uVmFyaWFudHMoXG5cdGxyVGFibGVWaXN1YWxpemF0aW9uczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10ge1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdHJldHVybiBsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCB0YWJsZUZpbHRlcnMgPSB2aXN1YWxpemF0aW9uLmNvbnRyb2wuZmlsdGVycztcblx0XHRcdGNvbnN0IHRhYmxlU1ZDb25maWdzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gW107XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiB0YWJsZUZpbHRlcnMpIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFibGVGaWx0ZXJzW2tleV0ucGF0aHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aHMgPSB0YWJsZUZpbHRlcnNba2V5XS5wYXRocztcblx0XHRcdFx0XHRwYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAocGF0aCAmJiBwYXRoLmFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblZhcmlhbnRQYXRocy5pbmRleE9mKHBhdGguYW5ub3RhdGlvblBhdGgpID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aHMucHVzaChwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudENvbmZpZyA9IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uKHBhdGguYW5ub3RhdGlvblBhdGgsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudENvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlU1ZDb25maWdzLnB1c2goc2VsZWN0aW9uVmFyaWFudENvbmZpZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhYmxlU1ZDb25maWdzO1xuXHRcdH0pXG5cdFx0LnJlZHVjZSgoc3ZDb25maWdzLCBzZWxlY3Rpb25WYXJpYW50KSA9PiBzdkNvbmZpZ3MuY29uY2F0KHNlbGVjdGlvblZhcmlhbnQpLCBbXSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY29uZGl0aW9uIHBhdGggcmVxdWlyZWQgZm9yIHRoZSBjb25kaXRpb24gbW9kZWwuIEl0IGxvb2tzIGFzIGZvbGxvd3M6XG4gKiA8MTpOLVByb3BlcnR5TmFtZT4qXFwvPDE6MS1Qcm9wZXJ0eU5hbWU+LzxQcm9wZXJ0eU5hbWU+LlxuICpcbiAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSByb290IEVudGl0eVR5cGVcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGZ1bGwgcGF0aCB0byB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIGNvbmRpdGlvbiBwYXRoXG4gKi9cbmNvbnN0IF9nZXRDb25kaXRpb25QYXRoID0gZnVuY3Rpb24gKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHByb3BlcnR5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgcGFydHMgPSBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpO1xuXHRsZXQgcGFydGlhbFBhdGg7XG5cdGxldCBrZXkgPSBcIlwiO1xuXHR3aGlsZSAocGFydHMubGVuZ3RoKSB7XG5cdFx0bGV0IHBhcnQgPSBwYXJ0cy5zaGlmdCgpIGFzIHN0cmluZztcblx0XHRwYXJ0aWFsUGF0aCA9IHBhcnRpYWxQYXRoID8gYCR7cGFydGlhbFBhdGh9LyR7cGFydH1gIDogcGFydDtcblx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHBhcnRpYWxQYXRoKTtcblx0XHRpZiAocHJvcGVydHkuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgcHJvcGVydHkuaXNDb2xsZWN0aW9uKSB7XG5cdFx0XHRwYXJ0ICs9IFwiKlwiO1xuXHRcdH1cblx0XHRrZXkgPSBrZXkgPyBgJHtrZXl9LyR7cGFydH1gIDogcGFydDtcblx0fVxuXHRyZXR1cm4ga2V5O1xufTtcblxuY29uc3QgX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRwcm9wZXJ0eTogUHJvcGVydHksXG5cdGZ1bGxQcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHQvLyBpZ25vcmUgY29tcGxleCBwcm9wZXJ0eSB0eXBlcyBhbmQgaGlkZGVuIGFubm90YXRlZCBvbmVzXG5cdGlmIChcblx0XHRwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0cHJvcGVydHkudGFyZ2V0VHlwZSA9PT0gdW5kZWZpbmVkICYmXG5cdFx0KGluY2x1ZGVIaWRkZW4gfHwgcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSlcblx0KSB7XG5cdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbkVudGl0eVR5cGUocHJvcGVydHkpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRrZXk6IEtleUhlbHBlci5nZXRTZWxlY3Rpb25GaWVsZEtleUZyb21QYXRoKGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IGNvbnZlcnRlckNvbnRleHQuZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGNvbmRpdGlvblBhdGg6IF9nZXRDb25kaXRpb25QYXRoKGVudGl0eVR5cGUsIGZ1bGxQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0YXZhaWxhYmlsaXR5OlxuXHRcdFx0XHRwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbkZpbHRlcj8udmFsdWVPZigpID09PSB0cnVlID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkFkYXB0YXRpb24sXG5cdFx0XHRsYWJlbDogY29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHByb3BlcnR5LmFubm90YXRpb25zLkNvbW1vbj8uTGFiZWw/LnZhbHVlT2YoKSB8fCBwcm9wZXJ0eS5uYW1lKSksXG5cdFx0XHRncm91cDogdGFyZ2V0RW50aXR5VHlwZS5uYW1lLFxuXHRcdFx0Z3JvdXBMYWJlbDogY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0YXJnZXRFbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHRhcmdldEVudGl0eVR5cGUubmFtZSlcblx0XHRcdClcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBfZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aDogc3RyaW5nLFxuXHRwcm9wZXJ0aWVzOiBBcnJheTxQcm9wZXJ0eT4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkTWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7fTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0Y29uc3QgZnVsbFBhdGg6IHN0cmluZyA9IChuYXZpZ2F0aW9uUGF0aCA/IGAke25hdmlnYXRpb25QYXRofS9gIDogXCJcIikgKyBwcm9wZXJ0eVBhdGg7XG5cdFx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBwcm9wZXJ0eSwgZnVsbFBhdGgsIGluY2x1ZGVIaWRkZW4sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0aWYgKHNlbGVjdGlvbkZpZWxkKSB7XG5cdFx0XHRcdHNlbGVjdGlvbkZpZWxkTWFwW2Z1bGxQYXRoXSA9IHNlbGVjdGlvbkZpZWxkO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZE1hcDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGggPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5UGF0aHM6IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiB7XG5cdGxldCBzZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydHlQYXRocykge1xuXHRcdHByb3BlcnR5UGF0aHMuZm9yRWFjaCgocHJvcGVydHlQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBsb2NhbFNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+O1xuXG5cdFx0XHRjb25zdCBwcm9wZXJ0eTogUHJvcGVydHkgfCBOYXZpZ2F0aW9uUHJvcGVydHkgPSBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCk7XG5cdFx0XHRpZiAocHJvcGVydHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocHJvcGVydHkuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRsb2NhbFNlbGVjdGlvbkZpZWxkcyA9IF9nZXRTZWxlY3Rpb25GaWVsZHMoXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0cHJvcGVydHkudGFyZ2V0VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS50YXJnZXRUeXBlICE9PSB1bmRlZmluZWQgJiYgcHJvcGVydHkudGFyZ2V0VHlwZS5fdHlwZSA9PT0gXCJDb21wbGV4VHlwZVwiKSB7XG5cdFx0XHRcdC8vIGhhbmRsZSBDb21wbGV4VHlwZSBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLnByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHByb3BlcnR5UGF0aC5pbmNsdWRlcyhcIi9cIikgPyBwcm9wZXJ0eVBhdGguc3BsaXQoXCIvXCIpLnNwbGljZSgwLCAxKS5qb2luKFwiL1wiKSA6IFwiXCI7XG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhlbnRpdHlUeXBlLCBuYXZpZ2F0aW9uUGF0aCwgW3Byb3BlcnR5XSwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdGlvbkZpZWxkcyA9IHtcblx0XHRcdFx0Li4uc2VsZWN0aW9uRmllbGRzLFxuXHRcdFx0XHQuLi5sb2NhbFNlbGVjdGlvbkZpZWxkc1xuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuY29uc3QgX2dldEZpbHRlckZpZWxkID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGVcbik6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkIHtcblx0bGV0IGZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdO1xuXHRpZiAoZmlsdGVyRmllbGQpIHtcblx0XHRkZWxldGUgZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmllbGQgPSBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQoZW50aXR5VHlwZSwgZW50aXR5VHlwZS5yZXNvbHZlUGF0aChwcm9wZXJ0eVBhdGgpLCBwcm9wZXJ0eVBhdGgsIHRydWUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHR9XG5cdGlmICghZmlsdGVyRmllbGQpIHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldERpYWdub3N0aWNzKCk/LmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBJc3N1ZVR5cGUuTUlTU0lOR19TRUxFQ1RJT05GSUVMRCk7XG5cdH1cblx0Ly8gZGVmaW5lZCBTZWxlY3Rpb25GaWVsZHMgYXJlIGF2YWlsYWJsZSBieSBkZWZhdWx0XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSA9XG5cdFx0XHRmaWx0ZXJGaWVsZC5hdmFpbGFiaWxpdHkgPT09IEF2YWlsYWJpbGl0eVR5cGUuSGlkZGVuID8gQXZhaWxhYmlsaXR5VHlwZS5IaWRkZW4gOiBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQ7XG5cdFx0ZmlsdGVyRmllbGQuaXNQYXJhbWV0ZXIgPSAhIWVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0fVxuXHRyZXR1cm4gZmlsdGVyRmllbGQ7XG59O1xuXG5jb25zdCBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0YVNlbGVjdE9wdGlvbnM6IGFueVtdLFxuXHRlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IFByb3BlcnR5UGF0aFtdXG4pOiBGaWx0ZXJGaWVsZFtdIHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XG5cdGNvbnN0IFVJU2VsZWN0aW9uRmllbGRzOiBhbnkgPSB7fTtcblx0Y29uc3QgcHJvcGVydGllcyA9IGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcztcblx0Ly8gVXNpbmcgZW50aXR5VHlwZSBpbnN0ZWFkIG9mIGVudGl0eVNldFxuXHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0VUlTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0fSk7XG5cdGlmIChhU2VsZWN0T3B0aW9ucyAmJiBhU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlO1xuXHRcdFx0Y29uc3QgY3VycmVudFNlbGVjdGlvbkZpZWxkczogYW55ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmICghKHNQcm9wZXJ0eVBhdGggaW4gY3VycmVudFNlbGVjdGlvbkZpZWxkcykpIHtcblx0XHRcdFx0XHRjb25zdCBGaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBnZXRGaWx0ZXJGaWVsZChzUHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fSBlbHNlIGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0cHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGNvbnN0IGRlZmF1bHRGaWx0ZXJWYWx1ZSA9IHByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LkZpbHRlckRlZmF1bHRWYWx1ZTtcblx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEZpbHRlclZhbHVlICYmICEocHJvcGVydHlQYXRoIGluIFVJU2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHByb3BlcnR5UGF0aCwgY29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZSk7XG5cdFx0XHRcdFx0aWYgKEZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChGaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcbn07XG5cbi8qKlxuICogR2V0IGFsbCBwYXJhbWV0ZXIgZmlsdGVyIGZpZWxkcyBpbiBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBwYXJhbWV0ZXIgRmlsdGVyRmllbGRzXG4gKi9cbmZ1bmN0aW9uIF9nZXRQYXJhbWV0ZXJGaWVsZHMoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCk6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSBkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0LmVudGl0eVR5cGU7XG5cdGNvbnN0IGlzUGFyYW1ldGVyaXplZCA9ICEhcGFyYW1ldGVyRW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uQ29tbW9uPy5SZXN1bHRDb250ZXh0ICYmICFkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldDtcblx0Y29uc3QgcGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCA9XG5cdFx0aXNQYXJhbWV0ZXJpemVkICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihgLyR7ZGF0YU1vZGVsT2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldC5uYW1lfWApO1xuXG5cdHJldHVybiAoXG5cdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dFxuXHRcdFx0PyBwYXJhbWV0ZXJFbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHRcdFx0XHRcdHJldHVybiBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0XHR7fSBhcyBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4sXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eS5uYW1lLFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHBhcmFtZXRlckVudGl0eVR5cGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXVxuXHQpIGFzIEZpbHRlckZpZWxkW107XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgRmlsdGVyQmFyIHNlYXJjaCBmaWVsZCBpcyBoaWRkZW4gb3Igbm90LlxuICpcbiAqIEBwYXJhbSBsaXN0UmVwb3J0VGFibGVzIFRoZSBsaXN0IHJlcG9ydCB0YWJsZXNcbiAqIEBwYXJhbSBjaGFydHMgVGhlIEFMUCBjaGFydHNcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGluZm9ybWF0aW9uIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZpbHRlckJhcmhpZGVCYXNpY1NlYXJjaCA9IGZ1bmN0aW9uIChcblx0bGlzdFJlcG9ydFRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10sXG5cdGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10sXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBjaGFydHMgYWxsb3cgc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5DaGFydHMgPSBjaGFydHMubGVuZ3RoID09PSAwIHx8IGNoYXJ0cy5ldmVyeSgoY2hhcnQpID0+ICFjaGFydC5hcHBseVN1cHBvcnRlZC5lbmFibGVTZWFyY2gpO1xuXG5cdC8vIENoZWNrIGlmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgYW5kIG5vbmUgb2YgdGhlbSBhbGxvdyBmb3Igc2VhcmNoXG5cdGNvbnN0IG5vU2VhcmNoSW5UYWJsZXMgPVxuXHRcdGxpc3RSZXBvcnRUYWJsZXMubGVuZ3RoID09PSAwIHx8IGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiB0YWJsZS5lbmFibGVBbmFseXRpY3MgJiYgIXRhYmxlLmVuYWJsZUFuYWx5dGljc1NlYXJjaCk7XG5cblx0Y29uc3QgY29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cdGlmIChjb250ZXh0UGF0aCAmJiBub1NlYXJjaEluQ2hhcnRzICYmIG5vU2VhcmNoSW5UYWJsZXMpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbi8qKlxuICogUmV0cmlldmVzIGZpbHRlciBmaWVsZHMgZnJvbSB0aGUgbWFuaWZlc3QuXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgZW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyIGZpZWxkcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuICovXG5leHBvcnQgY29uc3QgZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbik6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4ge1xuXHRjb25zdCBmYkNvbmZpZzogRmlsdGVyTWFuaWZlc3RDb25maWd1cmF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRGaWx0ZXJDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGRlZmluZWRGaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkTWFuaWZlc3RDb25maWd1cmF0aW9uPiA9IGZiQ29uZmlnPy5maWx0ZXJGaWVsZHMgfHwge307XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0gX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRlbnRpdHlUeXBlLFxuXHRcdE9iamVjdC5rZXlzKGRlZmluZWRGaWx0ZXJGaWVsZHMpLm1hcCgoa2V5KSA9PiBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShrZXkpKSxcblx0XHR0cnVlLFxuXHRcdGNvbnZlcnRlckNvbnRleHRcblx0KTtcblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+ID0ge307XG5cblx0Zm9yIChjb25zdCBzS2V5IGluIGRlZmluZWRGaWx0ZXJGaWVsZHMpIHtcblx0XHRjb25zdCBmaWx0ZXJGaWVsZCA9IGRlZmluZWRGaWx0ZXJGaWVsZHNbc0tleV07XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lID0gS2V5SGVscGVyLmdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkoc0tleSk7XG5cdFx0Y29uc3Qgc2VsZWN0aW9uRmllbGQgPSBzZWxlY3Rpb25GaWVsZHNbcHJvcGVydHlOYW1lXTtcblx0XHRjb25zdCB0eXBlID0gZmlsdGVyRmllbGQudHlwZSA9PT0gXCJTbG90XCIgPyBmaWx0ZXJGaWVsZFR5cGUuU2xvdCA6IGZpbHRlckZpZWxkVHlwZS5EZWZhdWx0O1xuXHRcdGNvbnN0IHZpc3VhbEZpbHRlciA9XG5cdFx0XHRmaWx0ZXJGaWVsZCAmJiBmaWx0ZXJGaWVsZD8udmlzdWFsRmlsdGVyXG5cdFx0XHRcdD8gZ2V0VmlzdWFsRmlsdGVycyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCBzS2V5LCBkZWZpbmVkRmlsdGVyRmllbGRzKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRmaWx0ZXJGaWVsZHNbc0tleV0gPSB7XG5cdFx0XHRrZXk6IHNLZXksXG5cdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0c2xvdE5hbWU6IGZpbHRlckZpZWxkPy5zbG90TmFtZSB8fCBzS2V5LFxuXHRcdFx0YW5ub3RhdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5hbm5vdGF0aW9uUGF0aCxcblx0XHRcdGNvbmRpdGlvblBhdGg6IHNlbGVjdGlvbkZpZWxkPy5jb25kaXRpb25QYXRoIHx8IHByb3BlcnR5TmFtZSxcblx0XHRcdHRlbXBsYXRlOiBmaWx0ZXJGaWVsZC50ZW1wbGF0ZSxcblx0XHRcdGxhYmVsOiBmaWx0ZXJGaWVsZC5sYWJlbCxcblx0XHRcdHBvc2l0aW9uOiBmaWx0ZXJGaWVsZC5wb3NpdGlvbiB8fCB7IHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyIH0sXG5cdFx0XHRhdmFpbGFiaWxpdHk6IGZpbHRlckZpZWxkLmF2YWlsYWJpbGl0eSB8fCBBdmFpbGFiaWxpdHlUeXBlLkRlZmF1bHQsXG5cdFx0XHRzZXR0aW5nczogZmlsdGVyRmllbGQuc2V0dGluZ3MsXG5cdFx0XHR2aXN1YWxGaWx0ZXI6IHZpc3VhbEZpbHRlcixcblx0XHRcdHJlcXVpcmVkOiBmaWx0ZXJGaWVsZC5yZXF1aXJlZFxuXHRcdH07XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgZW50aXR5VHlwZTogRW50aXR5VHlwZSkge1xuXHRyZXR1cm4gX2dldEZpbHRlckZpZWxkKHt9LCBwcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbHRlclJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LCBzUmVzdHJpY3Rpb246IGFueSkge1xuXHRpZiAoc1Jlc3RyaWN0aW9uID09PSBcIlJlcXVpcmVkUHJvcGVydGllc1wiIHx8IHNSZXN0cmljdGlvbiA9PT0gXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB7XG5cdFx0bGV0IGFQcm9wcyA9IFtdO1xuXHRcdGlmIChvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dKSB7XG5cdFx0XHRhUHJvcHMgPSBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbltzUmVzdHJpY3Rpb25dLm1hcChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoIHx8IG9Qcm9wZXJ0eS52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BzO1xuXHR9IGVsc2UgaWYgKHNSZXN0cmljdGlvbiA9PT0gXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIikge1xuXHRcdGNvbnN0IG1BbGxvd2VkRXhwcmVzc2lvbnMgPSB7fSBhcyBhbnk7XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdKSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkudmFsdWVdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0cmV0dXJuIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJHNlYXJjaFwiLFxuXHRcdHBhdGg6IFwiJHNlYXJjaFwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0bWF4Q29uZGl0aW9uczogMVxuXHR9O1xufTtcblxuY29uc3QgZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCkge1xuXHRyZXR1cm4ge1xuXHRcdG5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdHBhdGg6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdGdyb3VwTGFiZWw6IFwiXCIsXG5cdFx0Z3JvdXA6IFwiXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRoaWRkZW5GaWx0ZXI6IGZhbHNlXG5cdH07XG59O1xuXG5jb25zdCBnZXRTZWFyY2hSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRsZXQgc2VhcmNoUmVzdHJpY3Rpb25zO1xuXHRpZiAoIU1vZGVsSGVscGVyLmlzU2luZ2xldG9uKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCkpKSB7XG5cdFx0Y29uc3QgY2FwYWJpbGl0ZXMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcztcblx0XHRzZWFyY2hSZXN0cmljdGlvbnMgPSBjYXBhYmlsaXRlcz8uU2VhcmNoUmVzdHJpY3Rpb25zO1xuXHR9XG5cdHJldHVybiBzZWFyY2hSZXN0cmljdGlvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LCBzTmF2aWdhdGlvblBhdGg6IHN0cmluZykge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9uczogYW55ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcz8uTmF2aWdhdGlvblJlc3RyaWN0aW9ucztcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHk6IGFueSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHQob1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aCB8fFxuXHRcdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkuTmF2aWdhdGlvblByb3BlcnR5LnZhbHVlID09PSBzTmF2aWdhdGlvblBhdGgpXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG5jb25zdCBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyRmllbGRJbmZvOiBhbnkpIHtcblx0cmV0dXJuIHtcblx0XHRrZXk6IG9GaWx0ZXJGaWVsZEluZm8ua2V5LFxuXHRcdGFubm90YXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdGNvbmRpdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRuYW1lOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZFxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUV4cHJlc3Npb25zOiBhbnkpIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gW1xuXHRcdFwiU2luZ2xlVmFsdWVcIixcblx0XHRcIk11bHRpVmFsdWVcIixcblx0XHRcIlNpbmdsZVJhbmdlXCIsXG5cdFx0XCJNdWx0aVJhbmdlXCIsXG5cdFx0XCJTZWFyY2hFeHByZXNzaW9uXCIsXG5cdFx0XCJNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXCJcblx0XTtcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LCBvQ29sbGVjdGlvbkFubm90YXRpb25zOiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9GaWx0ZXJGaWVsZEluZm86IGFueSwgb1R5cGVDb25maWc6IGFueSkge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvKG9GaWx0ZXJGaWVsZEluZm8pO1xuXHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoO1xuXG5cdGlmICghc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG5cdH1cblx0Y29uc3QgdGFyZ2V0UHJvcGVydHlPYmplY3QgPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlckNvbnRleHRGb3Ioc0Fubm90YXRpb25QYXRoKS5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCkudGFyZ2V0T2JqZWN0O1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gdGFyZ2V0UHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zO1xuXHRjb25zdCBvQ29sbGVjdGlvbkFubm90YXRpb25zID0gY29udmVydGVyQ29udGV4dD8uZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM7XG5cblx0Y29uc3Qgb0Zvcm1hdE9wdGlvbnMgPSBvVHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zO1xuXHRjb25zdCBvQ29uc3RyYWludHMgPSBvVHlwZUNvbmZpZy5jb25zdHJhaW50cztcblx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdGZvcm1hdE9wdGlvbnM6IG9Gb3JtYXRPcHRpb25zLFxuXHRcdGNvbnN0cmFpbnRzOiBvQ29uc3RyYWludHMsXG5cdFx0ZGlzcGxheTogZGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnMsIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMpXG5cdH0pO1xuXHRyZXR1cm4gb1Byb3BlcnR5SW5mbztcbn07XG5cbmV4cG9ydCBjb25zdCBpc011bHRpVmFsdWUgPSBmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0bGV0IGJJc011bHRpVmFsdWUgPSB0cnVlO1xuXHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdHN3aXRjaCAob1Byb3BlcnR5LmZpbHRlckV4cHJlc3Npb24pIHtcblx0XHRjYXNlIFwiU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdGNhc2UgXCJTaW5nbGVWYWx1ZVwiOlxuXHRcdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGJyZWFrO1xuXHR9XG5cdGlmIChvUHJvcGVydHkudHlwZSAmJiBvUHJvcGVydHkudHlwZS5pbmRleE9mKFwiQm9vbGVhblwiKSA+IDApIHtcblx0XHRiSXNNdWx0aVZhbHVlID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGJJc011bHRpVmFsdWU7XG59O1xuXG5jb25zdCBfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRlbnRyeTogRGF0YUZpZWxkQWJzdHJhY3RUeXBlc1xuKTogZW50cnkgaXMgQW5ub3RhdGlvblRlcm08RGF0YUZpZWxkIHwgRGF0YUZpZWxkV2l0aFVybCB8IERhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aD4ge1xuXHRyZXR1cm4gKFxuXHRcdChlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRlbnRyeS4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkgJiZcblx0XHRlbnRyeS5WYWx1ZS5wYXRoLmluY2x1ZGVzKFwiL1wiKVxuXHQpO1xufTtcblxuY29uc3QgZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW46IGJvb2xlYW4gPSBmYWxzZSxcblx0bGluZUl0ZW1UZXJtPzogc3RyaW5nXG4pIHtcblx0Ly8gRmV0Y2ggYWxsIHNlbGVjdGlvblZhcmlhbnRzIGRlZmluZWQgaW4gdGhlIGRpZmZlcmVudCB2aXN1YWxpemF0aW9ucyBhbmQgZGlmZmVyZW50IHZpZXdzIChtdWx0aSB0YWJsZSBtb2RlKVxuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50czogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSA9IGdldFNlbGVjdGlvblZhcmlhbnRzKGxyVGFibGVzLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0gZ2V0RXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKHNlbGVjdGlvblZhcmlhbnRzKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHQvL0ZpbHRlcnMgd2hpY2ggaGFzIHRvIGJlIGFkZGVkIHdoaWNoIGlzIHBhcnQgb2YgU1YvRGVmYXVsdCBhbm5vdGF0aW9ucyBidXQgbm90IHByZXNlbnQgaW4gdGhlIFNlbGVjdGlvbkZpZWxkc1xuXHRjb25zdCBhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHMgPSAoKGFubm90YXRpb25QYXRoICYmIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oYW5ub3RhdGlvblBhdGgpPy5hbm5vdGF0aW9uKSB8fFxuXHRcdGVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LlVJPy5TZWxlY3Rpb25GaWVsZHMgfHxcblx0XHRbXSkgYXMgUHJvcGVydHlQYXRoW107XG5cblx0Y29uc3QgbmF2UHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblx0aWYgKGxyVGFibGVzLmxlbmd0aCA9PT0gMCAmJiAhIWxpbmVJdGVtVGVybSkge1xuXHRcdChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKGxpbmVJdGVtVGVybSkuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbSk/LmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0XHRpZiAoX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eShlbnRyeSkpIHtcblx0XHRcdFx0Y29uc3QgZW50aXR5UGF0aCA9IGVudHJ5LlZhbHVlLnBhdGguc2xpY2UoMCwgZW50cnkuVmFsdWUucGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdFx0XHRpZiAoIW5hdlByb3BlcnRpZXMuaW5jbHVkZXMoZW50aXR5UGF0aCkpIHtcblx0XHRcdFx0XHRuYXZQcm9wZXJ0aWVzLnB1c2goZW50aXR5UGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSB7XG5cdFx0Ly8gLi4ubm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIHRoZSBlbnRpdHlcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIFwiXCIsIGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcywgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Ly8gLi4uIG5vbiBoaWRkZW4gcHJvcGVydGllcyBvZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKGVudGl0eVR5cGUsIG5hdlByb3BlcnRpZXMsIGZhbHNlLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi5hZGRpdGlvbmFsIG1hbmlmZXN0IGRlZmluZWQgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Li4uX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aChcblx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKS5uYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRcdGluY2x1ZGVIaWRkZW4sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0KVxuXHR9O1xuXHRsZXQgYVNlbGVjdE9wdGlvbnM6IGFueVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBhbnkgPVxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcz8ucmVkdWNlKChzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10sIHNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBzZWxlY3Rpb25GaWVsZC52YWx1ZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGxldCBuYXZpZ2F0aW9uUGF0aDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5TZWxlY3Rpb25GaWVsZHNcIikpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IFwiXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBhbm5vdGF0aW9uUGF0aC5zcGxpdChcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZmlsdGVyUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGggPyBuYXZpZ2F0aW9uUGF0aCArIFwiL1wiICsgcHJvcGVydHlQYXRoIDogcHJvcGVydHlQYXRoO1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJGaWVsZDogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQgPSBfZ2V0RmlsdGVyRmllbGQoXG5cdFx0XHRcdFx0ZmlsdGVyRmllbGRzLFxuXHRcdFx0XHRcdGZpbHRlclByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGVudGl0eVR5cGVcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0XHRcdFx0ZmlsdGVyRmllbGQuZ3JvdXAgPSBcIlwiO1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwTGFiZWwgPSBcIlwiO1xuXHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKGZpbHRlckZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkcztcblx0XHR9LCBbXSkgfHwgW107XG5cblx0Y29uc3QgZGVmYXVsdEZpbHRlckZpZWxkcyA9IF9nZXREZWZhdWx0RmlsdGVyRmllbGRzKFxuXHRcdGFTZWxlY3RPcHRpb25zLFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHRleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcyxcblx0XHRlbnRpdHlUeXBlOiBlbnRpdHlUeXBlLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzLFxuXHRcdGZpbHRlckZpZWxkczogZmlsdGVyRmllbGRzLFxuXHRcdHByb3BlcnR5SW5mb0ZpZWxkczogcHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGRlZmF1bHRGaWx0ZXJGaWVsZHM6IGRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaFR5cGVDb25maWcgPSBmdW5jdGlvbiAocHJvcGVydHk6IFByb3BlcnR5KSB7XG5cdGNvbnN0IG9UeXBlQ29uZmlnID0gZ2V0VHlwZUNvbmZpZyhwcm9wZXJ0eSwgcHJvcGVydHk/LnR5cGUpO1xuXHRpZiAocHJvcGVydHk/LnR5cGUgPT09IHNFZG1TdHJpbmcgJiYgKG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB1bmRlZmluZWQgfHwgb1R5cGVDb25maWcuY29uc3RyYWludHMubnVsbGFibGUgPT09IHRydWUpKSB7XG5cdFx0b1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucy5wYXJzZUtlZXBzRW1wdHlTdHJpbmcgPSBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb1R5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGQ6IGFueSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YVJlcXVpcmVkUHJvcHM6IGFueSxcblx0YVR5cGVDb25maWc6IGFueVxuKSB7XG5cdGxldCBvUHJvcGVydHlJbmZvOiBhbnkgPSBmZXRjaFByb3BlcnR5SW5mbyhjb252ZXJ0ZXJDb250ZXh0LCBwcm9wZXJ0eUluZm9GaWVsZCwgYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XSksXG5cdFx0c1Byb3BlcnR5UGF0aDogc3RyaW5nID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluZGV4T2Yoc1Byb3BlcnR5UGF0aCkgPj0gMCksXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRkYXRhVHlwZTogYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBhbnksXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGRlZmF1bHRWYWx1ZVByb3BlcnR5RmllbGRzPzogYW55XG4pIHtcblx0Ly9nZXQgVHlwZUNvbmZpZyBmdW5jdGlvblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZFR5cGVzOiBhbnkgPSBbXTtcblx0Y29uc3QgYVR5cGVDb25maWc6IGFueSA9IHt9O1xuXG5cdGlmIChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcykge1xuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHByb3BlcnR5SW5mb0ZpZWxkcy5jb25jYXQoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpO1xuXHR9XG5cdC8vYWRkIHR5cGVDb25maWdcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtZXRlckZpZWxkOiBhbnkpIHtcblx0XHRpZiAocGFyYW1ldGVyRmllbGQuYW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdGNvbnN0IHByb3BlcnR5Q29udmVydHlDb250ZXh0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHByb3BlcnR5VGFyZ2V0T2JqZWN0ID0gcHJvcGVydHlDb252ZXJ0eUNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblx0XHRcdHNlbGVjdGlvbkZpZWxkVHlwZXMucHVzaChwcm9wZXJ0eVRhcmdldE9iamVjdD8udHlwZSk7XG5cdFx0XHRjb25zdCBvVHlwZUNvbmZpZyA9IGZldGNoVHlwZUNvbmZpZyhwcm9wZXJ0eVRhcmdldE9iamVjdCk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0gb1R5cGVDb25maWc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdGlvbkZpZWxkVHlwZXMucHVzaChzRWRtU3RyaW5nKTtcblx0XHRcdGFUeXBlQ29uZmlnW3BhcmFtZXRlckZpZWxkLmtleV0gPSB7IHR5cGU6IHNTdHJpbmdEYXRhVHlwZSB9O1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gZmlsdGVyUmVzdHJpY3Rpb25zXG5cdGxldCBfb0ZpbHRlcnJlc3RyaWN0aW9ucztcblx0aWYgKCFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdF9vRmlsdGVycmVzdHJpY3Rpb25zID0gKGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk/LmFubm90YXRpb25zPy5DYXBhYmlsaXRpZXMgYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQ2FwYWJpbGl0aWVzKVxuXHRcdFx0Py5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdH1cblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IF9vRmlsdGVycmVzdHJpY3Rpb25zO1xuXHRjb25zdCBvUmV0ID0ge30gYXMgYW55O1xuXHRvUmV0W1wiUmVxdWlyZWRQcm9wZXJ0aWVzXCJdID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdO1xuXHRvUmV0W1wiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIl0gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldFtcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiKSB8fCB7fTtcblxuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblx0aWYgKGFQYXRoUGFydHMubGVuZ3RoID4gMikge1xuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIHNOYXZpZ2F0aW9uUGF0aCk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMuY29uY2F0KGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW10pO1xuXHRcdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMuY29uY2F0KGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXSk7XG5cdFx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSB7XG5cdFx0XHQuLi4oZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zLCBcIkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1wiKSB8fCB7fSksXG5cdFx0XHQuLi5vUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1xuXHRcdH07XG5cdH1cblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllczogYW55ID0gW107XG5cblx0Ly8gcHJvY2VzcyB0aGUgZmllbGRzIHRvIGFkZCBuZWNlc3NhcnkgcHJvcGVydGllc1xuXHRwcm9wZXJ0eUluZm9GaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlJbmZvRmllbGQ6IGFueSkge1xuXHRcdGxldCBzUHJvcGVydHlQYXRoO1xuXHRcdGlmIChhTm9uRmlsdGVyYWJsZVByb3BzLmluZGV4T2Yoc1Byb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyhwcm9wZXJ0eUluZm9GaWVsZCwgY29udmVydGVyQ29udGV4dCwgYVJlcXVpcmVkUHJvcHMsIGFUeXBlQ29uZmlnKTtcblx0XHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKG9Qcm9wZXJ0eUluZm8pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly9hZGQgZWRpdFxuXHRjb25zdCBkYXRhTW9kZWxPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdGlmIChNb2RlbEhlbHBlci5pc09iamVjdFBhdGhEcmFmdFN1cHBvcnRlZChkYXRhTW9kZWxPYmplY3RQYXRoKSkge1xuXHRcdGFGZXRjaGVkUHJvcGVydGllcy5wdXNoKGdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbygpKTtcblx0fVxuXHQvLyBhZGQgc2VhcmNoXG5cdGNvbnN0IHNlYXJjaFJlc3RyaWN0aW9ucyA9IGdldFNlYXJjaFJlc3RyaWN0aW9ucyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gQm9vbGVhbihzZWFyY2hSZXN0cmljdGlvbnMgJiYgIXNlYXJjaFJlc3RyaWN0aW9ucy5TZWFyY2hhYmxlKTtcblx0aWYgKHNFbnRpdHlTZXRQYXRoICYmIGhpZGVCYXNpY1NlYXJjaCAhPT0gdHJ1ZSkge1xuXHRcdGlmICghc2VhcmNoUmVzdHJpY3Rpb25zIHx8IHNlYXJjaFJlc3RyaWN0aW9ucz8uU2VhcmNoYWJsZSkge1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhRmV0Y2hlZFByb3BlcnRpZXM7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyA9IGZ1bmN0aW9uIChcblx0ZmlsdGVyRmllbGRzOiBNYW5pZmVzdEZpbHRlckZpZWxkW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcbikge1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoZmlsdGVyRmllbGRzLCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSwge1xuXHRcdGF2YWlsYWJpbGl0eTogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRsYWJlbDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHR0eXBlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHBvc2l0aW9uOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNsb3ROYW1lOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHRlbXBsYXRlOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHNldHRpbmdzOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHZpc3VhbEZpbHRlcjogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZSxcblx0XHRyZXF1aXJlZDogT3ZlcnJpZGVUeXBlLm92ZXJ3cml0ZVxuXHR9KTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWxlY3Rpb24gZmllbGRzIHRoYXQgd2lsbCBiZSB1c2VkIHdpdGhpbiB0aGUgZmlsdGVyIGJhclxuICogVGhpcyBjb25maWd1cmF0aW9uIHRha2VzIGludG8gYWNjb3VudCB0aGUgYW5ub3RhdGlvbiBhbmQgdGhlIHNlbGVjdGlvbiB2YXJpYW50cy5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGxyVGFibGVzXG4gKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcbiAqIEBwYXJhbSBbaW5jbHVkZUhpZGRlbl1cbiAqIEBwYXJhbSBbbGluZUl0ZW1UZXJtXVxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc2VsZWN0aW9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0aW9uRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRsclRhYmxlczogVGFibGVWaXN1YWxpemF0aW9uW10gPSBbXSxcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZyA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbik6IGFueSB7XG5cdGNvbnN0IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEgPSBnZXRBbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEoXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRsclRhYmxlcyxcblx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdGxpbmVJdGVtVGVybVxuXHQpO1xuXHRjb25zdCBwYXJhbWV0ZXJGaWVsZHMgPSBfZ2V0UGFyYW1ldGVyRmllbGRzKGNvbnZlcnRlckNvbnRleHQpO1xuXHRsZXQgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5lbnRpdHlUeXBlO1xuXG5cdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHBhcmFtZXRlckZpZWxkcy5jb25jYXQocHJvcGVydHlJbmZvRmllbGRzKTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKHByb3BlcnR5SW5mb0ZpZWxkcywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Y29uc3QgYUZldGNoZWRQcm9wZXJ0aWVzID0gcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyhcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmRlZmF1bHRGaWx0ZXJGaWVsZHNcblx0KTtcblx0YUZldGNoZWRQcm9wZXJ0aWVzLnNvcnQoZnVuY3Rpb24gKGE6IGFueSwgYjogYW55KSB7XG5cdFx0aWYgKGEuZ3JvdXBMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGEuZ3JvdXBMYWJlbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpZiAoYi5ncm91cExhYmVsID09PSB1bmRlZmluZWQgfHwgYi5ncm91cExhYmVsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gMTtcblx0XHR9XG5cdFx0cmV0dXJuIGEuZ3JvdXBMYWJlbC5sb2NhbGVDb21wYXJlKGIuZ3JvdXBMYWJlbCk7XG5cdH0pO1xuXG5cdGxldCBzRmV0Y2hQcm9wZXJ0aWVzID0gSlNPTi5zdHJpbmdpZnkoYUZldGNoZWRQcm9wZXJ0aWVzKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx7L2csIFwiXFxcXHtcIik7XG5cdHNGZXRjaFByb3BlcnRpZXMgPSBzRmV0Y2hQcm9wZXJ0aWVzLnJlcGxhY2UoL1xcfS9nLCBcIlxcXFx9XCIpO1xuXHRjb25zdCBzUHJvcGVydHlJbmZvID0gc0ZldGNoUHJvcGVydGllcztcblx0Ly8gZW5kIG9mIHByb3BlcnR5RmllbGRzIHByb2Nlc3NpbmdcblxuXHQvLyB0byBwb3B1bGF0ZSBzZWxlY3Rpb24gZmllbGRzXG5cdGxldCBwcm9wU2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLnByb3BlcnR5SW5mb0ZpZWxkcykpO1xuXHRwcm9wU2VsZWN0aW9uRmllbGRzID0gcGFyYW1ldGVyRmllbGRzLmNvbmNhdChwcm9wU2VsZWN0aW9uRmllbGRzKTtcblx0Ly8gY3JlYXRlIGEgbWFwIG9mIHByb3BlcnRpZXMgdG8gYmUgdXNlZCBpbiBzZWxlY3Rpb24gdmFyaWFudHNcblx0Y29uc3QgZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzO1xuXHRjb25zdCBmaWx0ZXJGYWNldHMgPSBlbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uVUk/LkZpbHRlckZhY2V0cztcblx0bGV0IGZpbHRlckZhY2V0TWFwOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4gPSB7fTtcblxuXHRjb25zdCBhRmllbGRHcm91cHMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiVUlcIiwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cCk7XG5cblx0aWYgKGZpbHRlckZhY2V0cyA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlckZhY2V0cy5sZW5ndGggPCAwKSB7XG5cdFx0Zm9yIChjb25zdCBpIGluIGFGaWVsZEdyb3Vwcykge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXAgPSB7XG5cdFx0XHRcdC4uLmZpbHRlckZhY2V0TWFwLFxuXHRcdFx0XHQuLi5nZXRGaWVsZEdyb3VwRmlsdGVyR3JvdXBzKGFGaWVsZEdyb3Vwc1tpXSlcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZpbHRlckZhY2V0TWFwID0gZmlsdGVyRmFjZXRzLnJlZHVjZSgocHJldmlvdXNWYWx1ZTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+LCBmaWx0ZXJGYWNldDogUmVmZXJlbmNlRmFjZXRUeXBlcykgPT4ge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCAoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YT8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0cHJldmlvdXNWYWx1ZVsoKGZpbHRlckZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cCk/LkRhdGFbaV0gYXMgRGF0YUZpZWxkVHlwZXMpPy5WYWx1ZT8ucGF0aF0gPSB7XG5cdFx0XHRcdFx0Z3JvdXA6IGZpbHRlckZhY2V0Py5JRD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRncm91cExhYmVsOiBmaWx0ZXJGYWNldD8uTGFiZWw/LnRvU3RyaW5nKClcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwcmV2aW91c1ZhbHVlO1xuXHRcdH0sIHt9KTtcblx0fVxuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBhbGwgcG90ZW50aWFsIGZpbHRlciBmaWVsZHMgYmFzZWQgb24uLi5cblx0Y29uc3QgZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhLmZpbHRlckZpZWxkcztcblxuXHQvLyBmaW5hbGx5IGNyZWF0ZSBmaW5hbCBsaXN0IG9mIGZpbHRlciBmaWVsZHMgYnkgYWRkaW5nIHRoZSBTZWxlY3Rpb25GaWVsZHMgZmlyc3QgKG9yZGVyIG1hdHRlcnMpLi4uXG5cdGxldCBhbGxGaWx0ZXJzID0gcHJvcFNlbGVjdGlvbkZpZWxkc1xuXG5cdFx0Ly8gLi4uYW5kIGFkZGluZyByZW1haW5pbmcgZmlsdGVyIGZpZWxkcywgdGhhdCBhcmUgbm90IHVzZWQgaW4gYSBTZWxlY3Rpb25WYXJpYW50IChvcmRlciBkb2Vzbid0IG1hdHRlcilcblx0XHQuY29uY2F0KFxuXHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyRmllbGRzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wZXJ0eVBhdGgpID0+ICEocHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5UGF0aCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBPYmplY3QuYXNzaWduKGZpbHRlckZpZWxkc1twcm9wZXJ0eVBhdGhdLCBmaWx0ZXJGYWNldE1hcFtwcm9wZXJ0eVBhdGhdKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRjb25zdCBzQ29udGV4dFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKCk7XG5cblx0Ly9pZiBhbGwgdGFibGVzIGFyZSBhbmFseXRpY2FsIHRhYmxlcyBcImFnZ3JlZ2F0YWJsZVwiIHByb3BlcnRpZXMgbXVzdCBiZSBleGNsdWRlZFxuXHRpZiAoY2hlY2tBbGxUYWJsZUZvckVudGl0eVNldEFyZUFuYWx5dGljYWwobHJUYWJsZXMsIHNDb250ZXh0UGF0aCkpIHtcblx0XHQvLyBDdXJyZW50bHkgYWxsIGFncmVnYXRlcyBhcmUgcm9vdCBlbnRpdHkgcHJvcGVydGllcyAobm8gcHJvcGVydGllcyBjb21pbmcgZnJvbSBuYXZpZ2F0aW9uKSBhbmQgYWxsXG5cdFx0Ly8gdGFibGVzIHdpdGggc2FtZSBlbnRpdHlTZXQgZ2V0cyBzYW1lIGFnZ3JlYWd0ZSBjb25maWd1cmF0aW9uIHRoYXQncyB3aHkgd2UgY2FuIHVzZSBmaXJzdCB0YWJsZSBpbnRvXG5cdFx0Ly8gTFIgdG8gZ2V0IGFnZ3JlZ2F0ZXMgKHdpdGhvdXQgY3VycmVuY3kvdW5pdCBwcm9wZXJ0aWVzIHNpbmNlIHdlIGV4cGVjdCB0byBiZSBhYmxlIHRvIGZpbHRlciB0aGVtKS5cblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gbHJUYWJsZXNbMF0uYWdncmVnYXRlcztcblx0XHRpZiAoYWdncmVnYXRlcykge1xuXHRcdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydGllczogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5tYXAoKGFnZ3JlZ2F0ZUtleSkgPT4gYWdncmVnYXRlc1thZ2dyZWdhdGVLZXldLnJlbGF0aXZlUGF0aCk7XG5cdFx0XHRhbGxGaWx0ZXJzID0gYWxsRmlsdGVycy5maWx0ZXIoKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmluZGV4T2YoZmlsdGVyRmllbGQua2V5KSA9PT0gLTE7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzKGFsbEZpbHRlcnMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIEFkZCBjYXNlU2Vuc2l0aXZlIHByb3BlcnR5IHRvIGFsbCBzZWxlY3Rpb24gZmllbGRzLlxuXHRjb25zdCBpc0Nhc2VTZW5zaXRpdmUgPSBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCk7XG5cdHNlbGVjdGlvbkZpZWxkcy5mb3JFYWNoKChmaWx0ZXJGaWVsZCkgPT4ge1xuXHRcdGZpbHRlckZpZWxkLmNhc2VTZW5zaXRpdmUgPSBpc0Nhc2VTZW5zaXRpdmU7XG5cdH0pO1xuXG5cdHJldHVybiB7IHNlbGVjdGlvbkZpZWxkcywgc1Byb3BlcnR5SW5mbyB9O1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbHRlciBiYXIgaW5zaWRlIGEgdmFsdWUgaGVscCBkaWFsb2cgc2hvdWxkIGJlIGV4cGFuZGVkLiBUaGlzIGlzIHRydWUgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkOlxuICogKDEpIGEgZmlsdGVyIHByb3BlcnR5IGlzIG1hbmRhdG9yeSxcbiAqICgyKSBubyBzZWFyY2ggZmllbGQgZXhpc3RzIChlbnRpdHkgaXNuJ3Qgc2VhcmNoIGVuYWJsZWQpLFxuICogKDMpIHdoZW4gdGhlIGRhdGEgaXNuJ3QgbG9hZGVkIGJ5IGRlZmF1bHQgKGFubm90YXRpb24gRmV0Y2hWYWx1ZXMgPSAyKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEBwYXJhbSBmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIFRoZSBGaWx0ZXJSZXN0cmljdGlvbiBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gdmFsdWVMaXN0QW5ub3RhdGlvbiBUaGUgVmFsdWVMaXN0IGFubm90YXRpb25cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBmb3IgZXhwYW5kRmlsdGVyRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFeHBhbmRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IGFueSxcblx0dmFsdWVMaXN0QW5ub3RhdGlvbjogYW55XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlTGlzdEFubm90YXRpb24uZ2V0T2JqZWN0KCk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01Bd0RLQSxlQUFlO0VBQUEsV0FBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7RUFBQSxHQUFmQSxlQUFlLEtBQWZBLGVBQWU7RUFLcEIsTUFBTUMsVUFBVSxHQUFHLFlBQVk7RUFDL0IsTUFBTUMsZUFBZSxHQUFHLGdDQUFnQztFQUl4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyx5QkFBeUIsQ0FBQ0MsVUFBc0IsRUFBK0I7SUFDdkYsTUFBTUMsY0FBMkMsR0FBRyxDQUFDLENBQUM7SUFDdERELFVBQVUsQ0FBQ0UsSUFBSSxDQUFDQyxPQUFPLENBQUVDLFNBQWlDLElBQUs7TUFDOUQsSUFBSUEsU0FBUyxDQUFDQyxLQUFLLEtBQUssc0NBQXNDLEVBQUU7UUFBQTtRQUMvREosY0FBYyxDQUFDRyxTQUFTLENBQUNFLEtBQUssQ0FBQ0MsSUFBSSxDQUFDLEdBQUc7VUFDdENDLEtBQUssRUFBRVIsVUFBVSxDQUFDUyxrQkFBa0I7VUFDcENDLFVBQVUsRUFDVEMsaUJBQWlCLENBQ2hCQywyQkFBMkIsQ0FBQ1osVUFBVSxDQUFDYSxLQUFLLDhCQUFJYixVQUFVLENBQUNjLFdBQVcsb0ZBQXRCLHNCQUF3QkMs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
|
|
790
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWx0ZXJGaWVsZFR5cGUiLCJzRWRtU3RyaW5nIiwic1N0cmluZ0RhdGFUeXBlIiwiZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyIsImZpZWxkR3JvdXAiLCJmaWx0ZXJGYWNldE1hcCIsIkRhdGEiLCJmb3JFYWNoIiwiZGF0YUZpZWxkIiwiJFR5cGUiLCJWYWx1ZSIsInBhdGgiLCJncm91cCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImdyb3VwTGFiZWwiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkxhYmVsIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJxdWFsaWZpZXIiLCJnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50cyIsInJlZHVjZSIsInByZXZpb3VzVmFsdWUiLCJzZWxlY3Rpb25WYXJpYW50IiwicHJvcGVydHlOYW1lcyIsInByb3BlcnR5TmFtZSIsImNoZWNrQWxsVGFibGVGb3JFbnRpdHlTZXRBcmVBbmFseXRpY2FsIiwibGlzdFJlcG9ydFRhYmxlcyIsImNvbnRleHRQYXRoIiwibGVuZ3RoIiwiZXZlcnkiLCJ2aXN1YWxpemF0aW9uIiwiZW5hYmxlQW5hbHl0aWNzIiwiYW5ub3RhdGlvbiIsImNvbGxlY3Rpb24iLCJnZXRTZWxlY3Rpb25WYXJpYW50cyIsImxyVGFibGVWaXN1YWxpemF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJzZWxlY3Rpb25WYXJpYW50UGF0aHMiLCJtYXAiLCJ0YWJsZUZpbHRlcnMiLCJjb250cm9sIiwiZmlsdGVycyIsInRhYmxlU1ZDb25maWdzIiwia2V5IiwiQXJyYXkiLCJpc0FycmF5IiwicGF0aHMiLCJhbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJwdXNoIiwic2VsZWN0aW9uVmFyaWFudENvbmZpZyIsImdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uIiwic3ZDb25maWdzIiwiY29uY2F0IiwiX2dldENvbmRpdGlvblBhdGgiLCJlbnRpdHlUeXBlIiwicHJvcGVydHlQYXRoIiwicGFydHMiLCJzcGxpdCIsInBhcnRpYWxQYXRoIiwicGFydCIsInNoaWZ0IiwicHJvcGVydHkiLCJyZXNvbHZlUGF0aCIsIl90eXBlIiwiaXNDb2xsZWN0aW9uIiwiX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkIiwiZnVsbFByb3BlcnR5UGF0aCIsImluY2x1ZGVIaWRkZW4iLCJ0YXJnZXRUeXBlIiwidW5kZWZpbmVkIiwiVUkiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwidGFyZ2V0RW50aXR5VHlwZSIsImdldEFubm90YXRpb25FbnRpdHlUeXBlIiwiS2V5SGVscGVyIiwiZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aCIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJjb25kaXRpb25QYXRoIiwiYXZhaWxhYmlsaXR5IiwiSGlkZGVuRmlsdGVyIiwibGFiZWwiLCJuYW1lIiwiX2dldFNlbGVjdGlvbkZpZWxkcyIsIm5hdmlnYXRpb25QYXRoIiwicHJvcGVydGllcyIsInNlbGVjdGlvbkZpZWxkTWFwIiwiZnVsbFBhdGgiLCJzZWxlY3Rpb25GaWVsZCIsIl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgiLCJwcm9wZXJ0eVBhdGhzIiwic2VsZWN0aW9uRmllbGRzIiwibG9jYWxTZWxlY3Rpb25GaWVsZHMiLCJlbnRpdHlQcm9wZXJ0aWVzIiwiaW5jbHVkZXMiLCJzcGxpY2UiLCJqb2luIiwiX2dldEZpbHRlckZpZWxkIiwiZmlsdGVyRmllbGRzIiwiZmlsdGVyRmllbGQiLCJnZXREaWFnbm9zdGljcyIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiSGlnaCIsIklzc3VlVHlwZSIsIk1JU1NJTkdfU0VMRUNUSU9ORklFTEQiLCJpc1BhcmFtZXRlciIsIlJlc3VsdENvbnRleHQiLCJfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyIsImFTZWxlY3RPcHRpb25zIiwiZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzIiwiYW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzIiwiVUlTZWxlY3Rpb25GaWVsZHMiLCJTZWxlY3Rpb25GaWVsZCIsInZhbHVlIiwic2VsZWN0T3B0aW9uIiwiUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5UGF0aCIsImN1cnJlbnRTZWxlY3Rpb25GaWVsZHMiLCJGaWx0ZXJGaWVsZCIsImdldEZpbHRlckZpZWxkIiwiZGVmYXVsdEZpbHRlclZhbHVlIiwiRmlsdGVyRGVmYXVsdFZhbHVlIiwiX2dldFBhcmFtZXRlckZpZWxkcyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwicGFyYW1ldGVyRW50aXR5VHlwZSIsInN0YXJ0aW5nRW50aXR5U2V0IiwiaXNQYXJhbWV0ZXJpemVkIiwidGFyZ2V0RW50aXR5U2V0IiwicGFyYW1ldGVyQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRGaWx0ZXJCYXJIaWRlQmFzaWNTZWFyY2giLCJjaGFydHMiLCJub1NlYXJjaEluQ2hhcnRzIiwiY2hhcnQiLCJhcHBseVN1cHBvcnRlZCIsImVuYWJsZVNlYXJjaCIsIm5vU2VhcmNoSW5UYWJsZXMiLCJ0YWJsZSIsInR5cGUiLCJlbmFibGVCYXNpY1NlYXJjaCIsImdldENvbnRleHRQYXRoIiwiZ2V0TWFuaWZlc3RGaWx0ZXJGaWVsZHMiLCJmYkNvbmZpZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldEZpbHRlckNvbmZpZ3VyYXRpb24iLCJkZWZpbmVkRmlsdGVyRmllbGRzIiwiT2JqZWN0Iiwia2V5cyIsImdldFBhdGhGcm9tU2VsZWN0aW9uRmllbGRLZXkiLCJzS2V5IiwiU2xvdCIsIkRlZmF1bHQiLCJ2aXN1YWxGaWx0ZXIiLCJnZXRWaXN1YWxGaWx0ZXJzIiwic2xvdE5hbWUiLCJ0ZW1wbGF0ZSIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJzZXR0aW5ncyIsInJlcXVpcmVkIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJhUHJvcHMiLCJvUHJvcGVydHkiLCJnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbiIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJ0b1N0cmluZyIsImdldFNlYXJjaEZpbHRlclByb3BlcnR5SW5mbyIsImRhdGFUeXBlIiwibWF4Q29uZGl0aW9ucyIsImdldEVkaXRTdGF0ZUZpbHRlclByb3BlcnR5SW5mbyIsImhpZGRlbkZpbHRlciIsImdldFNlYXJjaFJlc3RyaWN0aW9ucyIsInNlYXJjaFJlc3RyaWN0aW9ucyIsIk1vZGVsSGVscGVyIiwiaXNTaW5nbGV0b24iLCJnZXRFbnRpdHlTZXQiLCJjYXBhYmlsaXRlcyIsIkNhcGFiaWxpdGllcyIsIlNlYXJjaFJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzTmF2aWdhdGlvblBhdGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsIk5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJhUmVzdHJpY3RlZFByb3BlcnRpZXMiLCJSZXN0cmljdGVkUHJvcGVydGllcyIsImZpbmQiLCJvUmVzdHJpY3RlZFByb3BlcnR5IiwiTmF2aWdhdGlvblByb3BlcnR5IiwiX2ZldGNoQmFzaWNQcm9wZXJ0eUluZm8iLCJvRmlsdGVyRmllbGRJbmZvIiwiZGlzcGxheSIsImNhc2VTZW5zaXRpdmUiLCJtZW51IiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsInNvcnQiLCJhIiwiYiIsImRpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwiVGV4dCIsIm9UZXh0QXJyYW5nbWVudEFubm90YXRpb24iLCJUZXh0QXJyYW5nZW1lbnQiLCJmZXRjaFByb3BlcnR5SW5mbyIsIm9UeXBlQ29uZmlnIiwib1Byb3BlcnR5SW5mbyIsInNBbm5vdGF0aW9uUGF0aCIsInRhcmdldFByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0Zvcm1hdE9wdGlvbnMiLCJmb3JtYXRPcHRpb25zIiwib0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHMiLCJhc3NpZ24iLCJpc011bHRpVmFsdWUiLCJiSXNNdWx0aVZhbHVlIiwiZmlsdGVyRXhwcmVzc2lvbiIsIl9pc0ZpbHRlcmFibGVOYXZpZ2F0aW9uUHJvcGVydHkiLCJlbnRyeSIsImdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSIsImxyVGFibGVzIiwibGluZUl0ZW1UZXJtIiwiZ2V0RW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiU2VsZWN0aW9uRmllbGRzIiwibmF2UHJvcGVydGllcyIsImVudGl0eVBhdGgiLCJzbGljZSIsImxhc3RJbmRleE9mIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0T3B0aW9ucyIsInByb3BlcnR5SW5mb0ZpZWxkcyIsInN0YXJ0c1dpdGgiLCJmaWx0ZXJQcm9wZXJ0eVBhdGgiLCJkZWZhdWx0RmlsdGVyRmllbGRzIiwiZmV0Y2hUeXBlQ29uZmlnIiwiZ2V0VHlwZUNvbmZpZyIsIm51bGxhYmxlIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiYXNzaWduRGF0YVR5cGVUb1Byb3BlcnR5SW5mbyIsInByb3BlcnR5SW5mb0ZpZWxkIiwiYVJlcXVpcmVkUHJvcHMiLCJhVHlwZUNvbmZpZyIsInJlcGxhY2UiLCJpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJwcm9jZXNzU2VsZWN0aW9uRmllbGRzIiwiZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMiLCJzZWxlY3Rpb25GaWVsZFR5cGVzIiwicGFyYW1ldGVyRmllbGQiLCJwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCIsInByb3BlcnR5VGFyZ2V0T2JqZWN0IiwiX29GaWx0ZXJyZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwib1JldCIsIlJlcXVpcmVkUHJvcGVydGllcyIsIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0VudGl0eVNldFBhdGgiLCJhUGF0aFBhcnRzIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiYUZldGNoZWRQcm9wZXJ0aWVzIiwiaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQiLCJoaWRlQmFzaWNTZWFyY2giLCJCb29sZWFuIiwiU2VhcmNoYWJsZSIsImluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsIk92ZXJyaWRlVHlwZSIsIm92ZXJ3cml0ZSIsImdldFNlbGVjdGlvbkZpZWxkcyIsIm9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEiLCJwYXJhbWV0ZXJGaWVsZHMiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJsb2NhbGVDb21wYXJlIiwic0ZldGNoUHJvcGVydGllcyIsInNQcm9wZXJ0eUluZm8iLCJwcm9wU2VsZWN0aW9uRmllbGRzIiwiZmlsdGVyRmFjZXRzIiwiRmlsdGVyRmFjZXRzIiwiYUZpZWxkR3JvdXBzIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJpIiwiZmlsdGVyRmFjZXQiLCJUYXJnZXQiLCIkdGFyZ2V0IiwiSUQiLCJhbGxGaWx0ZXJzIiwiZmlsdGVyIiwic0NvbnRleHRQYXRoIiwiYWdncmVnYXRlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGVLZXkiLCJyZWxhdGl2ZVBhdGgiLCJpc0Nhc2VTZW5zaXRpdmUiLCJnZXRFeHBhbmRGaWx0ZXJGaWVsZHMiLCJmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uIiwidmFsdWVMaXN0IiwicmVxdWlyZWRQcm9wZXJ0aWVzIiwiRmV0Y2hWYWx1ZXMiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZpbHRlckJhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtLCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5LCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSxcblx0RmlsdGVyRXhwcmVzc2lvblR5cGUsXG5cdEZpbHRlclJlc3RyaWN0aW9ucyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NhcGFiaWxpdGllc19FZG1cIjtcbmltcG9ydCB0eXBlIHsgRW50aXR5VHlwZUFubm90YXRpb25zLCBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHRGaWVsZEdyb3VwLFxuXHRMaW5lSXRlbSxcblx0UmVmZXJlbmNlRmFjZXRUeXBlcyxcblx0U2VsZWN0T3B0aW9uVHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0VmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9DaGFydFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eVR5cGVDb25maWcsIFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBUYWJsZVZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uLCBnZXRUeXBlQ29uZmlnLCBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgVmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgZ2V0VmlzdWFsRmlsdGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ3VzdG9tRWxlbWVudCwgUG9zaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0NvbmZpZ3VyYWJsZU9iamVjdFwiO1xuaW1wb3J0IHsgaW5zZXJ0Q3VzdG9tRWxlbWVudHMsIE92ZXJyaWRlVHlwZSwgUGxhY2VtZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHksIElzc3VlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlIZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0tleVwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QXZhaWxhYmlsaXR5VHlwZSxcblx0RmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG5cdEZpbHRlck1hbmlmZXN0Q29uZmlndXJhdGlvbixcblx0RmlsdGVyU2V0dGluZ3Ncbn0gZnJvbSBcIi4uLy4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwiLi4vQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG4vL2ltcG9ydCB7IGhhc1ZhbHVlSGVscCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckZpZWxkID0gQ29uZmlndXJhYmxlT2JqZWN0ICYge1xuXHR0eXBlPzogc3RyaW5nO1xuXHRjb25kaXRpb25QYXRoOiBzdHJpbmc7XG5cdGF2YWlsYWJpbGl0eTogQXZhaWxhYmlsaXR5VHlwZTtcblx0YW5ub3RhdGlvblBhdGg6IHN0cmluZztcblx0bGFiZWw/OiBzdHJpbmc7XG5cdHRlbXBsYXRlPzogc3RyaW5nO1xuXHRncm91cD86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0c2V0dGluZ3M/OiBGaWx0ZXJTZXR0aW5ncztcblx0aXNQYXJhbWV0ZXI/OiBib29sZWFuO1xuXHR2aXN1YWxGaWx0ZXI/OiBWaXN1YWxGaWx0ZXJzO1xuXHRjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBNYW5pZmVzdEZpbHRlckZpZWxkID0gRmlsdGVyRmllbGQgJiB7XG5cdHNsb3ROYW1lPzogc3RyaW5nO1xufTtcblxudHlwZSBGaWx0ZXJHcm91cCA9IHtcblx0Z3JvdXA/OiBzdHJpbmc7XG5cdGdyb3VwTGFiZWw/OiBzdHJpbmc7XG59O1xuXG5lbnVtIGZpbHRlckZpZWxkVHlwZSB7XG5cdERlZmF1bHQgPSBcIkRlZmF1bHRcIixcblx0U2xvdCA9IFwiU2xvdFwiXG59XG5cbmNvbnN0IHNFZG1TdHJpbmcgPSBcIkVkbS5TdHJpbmdcIjtcbmNvbnN0IHNTdHJpbmdEYXRhVHlwZSA9IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCI7XG5cbmV4cG9ydCB0eXBlIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCA9IEN1c3RvbUVsZW1lbnQ8TWFuaWZlc3RGaWx0ZXJGaWVsZD47XG5cbi8qKlxuICogRW50ZXIgYWxsIERhdGFGaWVsZHMgb2YgYSBnaXZlbiBGaWVsZEdyb3VwIGludG8gdGhlIGZpbHRlckZhY2V0TWFwLlxuICpcbiAqIEBwYXJhbSBmaWVsZEdyb3VwXG4gKiBAcmV0dXJucyBUaGUgbWFwIG9mIGZhY2V0cyBmb3IgdGhlIGdpdmVuIEZpZWxkR3JvdXBcbiAqL1xuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZpbHRlckdyb3VwcyhmaWVsZEdyb3VwOiBGaWVsZEdyb3VwKTogUmVjb3JkPHN0cmluZywgRmlsdGVyR3JvdXA+IHtcblx0Y29uc3QgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXHRmaWVsZEdyb3VwLkRhdGEuZm9yRWFjaCgoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKSA9PiB7XG5cdFx0aWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0ZmlsdGVyRmFjZXRNYXBbZGF0YUZpZWxkLlZhbHVlLnBhdGhdID0ge1xuXHRcdFx0XHRncm91cDogZmllbGRHcm91cC5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGdyb3VwTGFiZWw6XG5cdFx0XHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGRHcm91cC5MYWJlbCB8fCBmaWVsZEdyb3VwLmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsIHx8IGZpZWxkR3JvdXAucXVhbGlmaWVyKVxuXHRcdFx0XHRcdCkgfHwgZmllbGRHcm91cC5xdWFsaWZpZXJcblx0XHRcdH07XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGZpbHRlckZhY2V0TWFwO1xufVxuXG5mdW5jdGlvbiBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHM6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG5cdHJldHVybiBzZWxlY3Rpb25WYXJpYW50cy5yZWR1Y2UoKHByZXZpb3VzVmFsdWU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBzZWxlY3Rpb25WYXJpYW50KSA9PiB7XG5cdFx0c2VsZWN0aW9uVmFyaWFudC5wcm9wZXJ0eU5hbWVzLmZvckVhY2goKHByb3BlcnR5TmFtZSkgPT4ge1xuXHRcdFx0cHJldmlvdXNWYWx1ZVtwcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0fSwge30pO1xufVxuXG4vKipcbiAqIENoZWNrIHRoYXQgYWxsIHRoZSB0YWJsZXMgZm9yIGEgZGVkaWNhdGVkIGVudGl0eSBzZXQgYXJlIGNvbmZpZ3VyZWQgYXMgYW5hbHl0aWNhbCB0YWJsZXMuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgTGlzdCByZXBvcnQgdGFibGVzXG4gKiBAcGFyYW0gY29udGV4dFBhdGhcbiAqIEByZXR1cm5zIElzIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaGlkZGVuIG9yIG5vdFxuICovXG5mdW5jdGlvbiBjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSwgY29udGV4dFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY29udGV4dFBhdGggJiYgbGlzdFJlcG9ydFRhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0cmV0dXJuIGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmVuYWJsZUFuYWx5dGljcyAmJiBjb250ZXh0UGF0aCA9PT0gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb247XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25WYXJpYW50cyhcblx0bHJUYWJsZVZpc3VhbGl6YXRpb25zOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogU2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb25bXSB7XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRQYXRoczogc3RyaW5nW10gPSBbXTtcblx0cmV0dXJuIGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdGNvbnN0IHRhYmxlRmlsdGVycyA9IHZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzO1xuXHRcdFx0Y29uc3QgdGFibGVTVkNvbmZpZ3M6IFNlbGVjdGlvblZhcmlhbnRDb25maWd1cmF0aW9uW10gPSBbXTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIHRhYmxlRmlsdGVycykge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YWJsZUZpbHRlcnNba2V5XS5wYXRocykpIHtcblx0XHRcdFx0XHRjb25zdCBwYXRocyA9IHRhYmxlRmlsdGVyc1trZXldLnBhdGhzO1xuXHRcdFx0XHRcdHBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChwYXRoICYmIHBhdGguYW5ub3RhdGlvblBhdGggJiYgc2VsZWN0aW9uVmFyaWFudFBhdGhzLmluZGV4T2YocGF0aC5hbm5vdGF0aW9uUGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRocy5wdXNoKHBhdGguYW5ub3RhdGlvblBhdGgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzZWxlY3Rpb25WYXJpYW50Q29uZmlnID0gZ2V0U2VsZWN0aW9uVmFyaWFudENvbmZpZ3VyYXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFibGVTVkNvbmZpZ3MucHVzaChzZWxlY3Rpb25WYXJpYW50Q29uZmlnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGFibGVTVkNvbmZpZ3M7XG5cdFx0fSlcblx0XHQucmVkdWNlKChzdkNvbmZpZ3MsIHNlbGVjdGlvblZhcmlhbnQpID0+IHN2Q29uZmlncy5jb25jYXQoc2VsZWN0aW9uVmFyaWFudCksIFtdKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25kaXRpb24gcGF0aCByZXF1aXJlZCBmb3IgdGhlIGNvbmRpdGlvbiBtb2RlbC4gSXQgbG9va3MgYXMgZm9sbG93czpcbiAqIDwxOk4tUHJvcGVydHlOYW1lPipcXC88MToxLVByb3BlcnR5TmFtZT4vPFByb3BlcnR5TmFtZT4uXG4gKlxuICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIHJvb3QgRW50aXR5VHlwZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aCBUaGUgZnVsbCBwYXRoIHRvIHRoZSB0YXJnZXQgcHJvcGVydHlcbiAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgY29uZGl0aW9uIHBhdGhcbiAqL1xuY29uc3QgX2dldENvbmRpdGlvblBhdGggPSBmdW5jdGlvbiAoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIik7XG5cdGxldCBwYXJ0aWFsUGF0aDtcblx0bGV0IGtleSA9IFwiXCI7XG5cdHdoaWxlIChwYXJ0cy5sZW5ndGgpIHtcblx0XHRsZXQgcGFydCA9IHBhcnRzLnNoaWZ0KCkgYXMgc3RyaW5nO1xuXHRcdHBhcnRpYWxQYXRoID0gcGFydGlhbFBhdGggPyBgJHtwYXJ0aWFsUGF0aH0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocGFydGlhbFBhdGgpO1xuXHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiAmJiBwcm9wZXJ0eS5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdHBhcnQgKz0gXCIqXCI7XG5cdFx0fVxuXHRcdGtleSA9IGtleSA/IGAke2tleX0vJHtwYXJ0fWAgOiBwYXJ0O1xuXHR9XG5cdHJldHVybiBrZXk7XG59O1xuXG5jb25zdCBfY3JlYXRlRmlsdGVyU2VsZWN0aW9uRmllbGQgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdHByb3BlcnR5OiBQcm9wZXJ0eSxcblx0ZnVsbFByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRpbmNsdWRlSGlkZGVuOiBib29sZWFuLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0XG4pOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCB7XG5cdC8vIGlnbm9yZSBjb21wbGV4IHByb3BlcnR5IHR5cGVzIGFuZCBoaWRkZW4gYW5ub3RhdGVkIG9uZXNcblx0aWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LnRhcmdldFR5cGUgPT09IHVuZGVmaW5lZCAmJiAoaW5jbHVkZUhpZGRlbiB8fCBwcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpICE9PSB0cnVlKSkge1xuXHRcdGNvbnN0IHRhcmdldEVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25FbnRpdHlUeXBlKHByb3BlcnR5KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2V0U2VsZWN0aW9uRmllbGRLZXlGcm9tUGF0aChmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGFubm90YXRpb25QYXRoOiBjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgoZnVsbFByb3BlcnR5UGF0aCksXG5cdFx0XHRjb25kaXRpb25QYXRoOiBfZ2V0Q29uZGl0aW9uUGF0aChlbnRpdHlUeXBlLCBmdWxsUHJvcGVydHlQYXRoKSxcblx0XHRcdGF2YWlsYWJpbGl0eTogcHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKSA9PT0gdHJ1ZSA/IFwiSGlkZGVuXCIgOiBcIkFkYXB0YXRpb25cIixcblx0XHRcdGxhYmVsOiBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24ocHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbW9uPy5MYWJlbD8udmFsdWVPZigpIHx8IHByb3BlcnR5Lm5hbWUpKSxcblx0XHRcdGdyb3VwOiB0YXJnZXRFbnRpdHlUeXBlLm5hbWUsXG5cdFx0XHRncm91cExhYmVsOiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRhcmdldEVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy52YWx1ZU9mKCkgfHwgdGFyZ2V0RW50aXR5VHlwZS5uYW1lKVxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IF9nZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdG5hdmlnYXRpb25QYXRoOiBzdHJpbmcsXG5cdHByb3BlcnRpZXM6IEFycmF5PFByb3BlcnR5PiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IHByb3BlcnR5Lm5hbWU7XG5cdFx0XHRjb25zdCBmdWxsUGF0aDogc3RyaW5nID0gKG5hdmlnYXRpb25QYXRoID8gYCR7bmF2aWdhdGlvblBhdGh9L2AgOiBcIlwiKSArIHByb3BlcnR5UGF0aDtcblx0XHRcdGNvbnN0IHNlbGVjdGlvbkZpZWxkID0gX2NyZWF0ZUZpbHRlclNlbGVjdGlvbkZpZWxkKGVudGl0eVR5cGUsIHByb3BlcnR5LCBmdWxsUGF0aCwgaW5jbHVkZUhpZGRlbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRpZiAoc2VsZWN0aW9uRmllbGQpIHtcblx0XHRcdFx0c2VsZWN0aW9uRmllbGRNYXBbZnVsbFBhdGhdID0gc2VsZWN0aW9uRmllbGQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHNlbGVjdGlvbkZpZWxkTWFwO1xufTtcblxuY29uc3QgX2dldFNlbGVjdGlvbkZpZWxkc0J5UGF0aCA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0cHJvcGVydHlQYXRoczogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZCxcblx0aW5jbHVkZUhpZGRlbjogYm9vbGVhbixcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+IHtcblx0bGV0IHNlbGVjdGlvbkZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+ID0ge307XG5cdGlmIChwcm9wZXJ0eVBhdGhzKSB7XG5cdFx0cHJvcGVydHlQYXRocy5mb3JFYWNoKChwcm9wZXJ0eVBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IGxvY2FsU2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD47XG5cblx0XHRcdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eSA9IGVudGl0eVR5cGUucmVzb2x2ZVBhdGgocHJvcGVydHlQYXRoKTtcblx0XHRcdGlmIChwcm9wZXJ0eSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChwcm9wZXJ0eS5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHQvLyBoYW5kbGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdGxvY2FsU2VsZWN0aW9uRmllbGRzID0gX2dldFNlbGVjdGlvbkZpZWxkcyhcblx0XHRcdFx0XHRlbnRpdHlUeXBlLFxuXHRcdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0XHRwcm9wZXJ0eS50YXJnZXRUeXBlLmVudGl0eVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LnRhcmdldFR5cGUgIT09IHVuZGVmaW5lZCAmJiBwcm9wZXJ0eS50YXJnZXRUeXBlLl90eXBlID09PSBcIkNvbXBsZXhUeXBlXCIpIHtcblx0XHRcdFx0Ly8gaGFuZGxlIENvbXBsZXhUeXBlIHByb3BlcnRpZXNcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKFxuXHRcdFx0XHRcdGVudGl0eVR5cGUsXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdHByb3BlcnR5LnRhcmdldFR5cGUucHJvcGVydGllcyxcblx0XHRcdFx0XHRpbmNsdWRlSGlkZGVuLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoID0gcHJvcGVydHlQYXRoLmluY2x1ZGVzKFwiL1wiKSA/IHByb3BlcnR5UGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDEpLmpvaW4oXCIvXCIpIDogXCJcIjtcblx0XHRcdFx0bG9jYWxTZWxlY3Rpb25GaWVsZHMgPSBfZ2V0U2VsZWN0aW9uRmllbGRzKGVudGl0eVR5cGUsIG5hdmlnYXRpb25QYXRoLCBbcHJvcGVydHldLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0aW9uRmllbGRzID0ge1xuXHRcdFx0XHQuLi5zZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRcdC4uLmxvY2FsU2VsZWN0aW9uRmllbGRzXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG59O1xuXG5jb25zdCBfZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAoXG5cdGZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGQ+LFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZVxuKTogRmlsdGVyRmllbGQgfCB1bmRlZmluZWQge1xuXHRsZXQgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF07XG5cdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdGRlbGV0ZSBmaWx0ZXJGaWVsZHNbcHJvcGVydHlQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRmaWx0ZXJGaWVsZCA9IF9jcmVhdGVGaWx0ZXJTZWxlY3Rpb25GaWVsZChlbnRpdHlUeXBlLCBlbnRpdHlUeXBlLnJlc29sdmVQYXRoKHByb3BlcnR5UGF0aCksIHByb3BlcnR5UGF0aCwgdHJ1ZSwgY29udmVydGVyQ29udGV4dCk7XG5cdH1cblx0aWYgKCFmaWx0ZXJGaWVsZCkge1xuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKT8uYWRkSXNzdWUoSXNzdWVDYXRlZ29yeS5Bbm5vdGF0aW9uLCBJc3N1ZVNldmVyaXR5LkhpZ2gsIElzc3VlVHlwZS5NSVNTSU5HX1NFTEVDVElPTkZJRUxEKTtcblx0fVxuXHQvLyBkZWZpbmVkIFNlbGVjdGlvbkZpZWxkcyBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHRcblx0aWYgKGZpbHRlckZpZWxkKSB7XG5cdFx0ZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID0gZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiID8gXCJIaWRkZW5cIiA6IFwiRGVmYXVsdFwiO1xuXHRcdGZpbHRlckZpZWxkLmlzUGFyYW1ldGVyID0gISFlbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQ7XG5cdH1cblx0cmV0dXJuIGZpbHRlckZpZWxkO1xufTtcblxuY29uc3QgX2dldERlZmF1bHRGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGFTZWxlY3RPcHRpb25zOiBTZWxlY3RPcHRpb25UeXBlW10sXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG5cdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkczogUHJvcGVydHlQYXRoW11cbik6IEZpbHRlckZpZWxkW10ge1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcblx0Y29uc3QgVUlTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXM7XG5cdC8vIFVzaW5nIGVudGl0eVR5cGUgaW5zdGVhZCBvZiBlbnRpdHlTZXRcblx0YW5ub3RhdGVkU2VsZWN0aW9uRmllbGRzPy5mb3JFYWNoKChTZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFVJU2VsZWN0aW9uRmllbGRzW1NlbGVjdGlvbkZpZWxkLnZhbHVlXSA9IHRydWU7XG5cdH0pO1xuXHRpZiAoYVNlbGVjdE9wdGlvbnMgJiYgYVNlbGVjdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdGFTZWxlY3RPcHRpb25zPy5mb3JFYWNoKChzZWxlY3RPcHRpb246IFNlbGVjdE9wdGlvblR5cGUpID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5TmFtZSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU7XG5cdFx0XHRjb25zdCBzUHJvcGVydHlQYXRoID0gcHJvcGVydHlOYW1lPy52YWx1ZTtcblx0XHRcdGNvbnN0IGN1cnJlbnRTZWxlY3Rpb25GaWVsZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cdFx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LmZvckVhY2goKFNlbGVjdGlvbkZpZWxkKSA9PiB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3Rpb25GaWVsZHNbU2VsZWN0aW9uRmllbGQudmFsdWVdID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKHNQcm9wZXJ0eVBhdGggJiYgIShzUHJvcGVydHlQYXRoIGluIGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllcykpIHtcblx0XHRcdFx0aWYgKCEoc1Byb3BlcnR5UGF0aCBpbiBjdXJyZW50U2VsZWN0aW9uRmllbGRzKSkge1xuXHRcdFx0XHRcdGNvbnN0IEZpbHRlckZpZWxkOiBGaWx0ZXJGaWVsZCB8IHVuZGVmaW5lZCA9IGdldEZpbHRlckZpZWxkKHNQcm9wZXJ0eVBhdGgsIGNvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGUpO1xuXHRcdFx0XHRcdGlmIChGaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdFx0c2VsZWN0aW9uRmllbGRzLnB1c2goRmlsdGVyRmllbGQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHByb3BlcnRpZXMpIHtcblx0XHRwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmlsdGVyRGVmYXVsdFZhbHVlO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gcHJvcGVydHkubmFtZTtcblx0XHRcdGlmICghKHByb3BlcnR5UGF0aCBpbiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMpKSB7XG5cdFx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgJiYgIShwcm9wZXJ0eVBhdGggaW4gVUlTZWxlY3Rpb25GaWVsZHMpKSB7XG5cdFx0XHRcdFx0Y29uc3QgRmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gZ2V0RmlsdGVyRmllbGQocHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcblx0XHRcdFx0XHRpZiAoRmlsdGVyRmllbGQpIHtcblx0XHRcdFx0XHRcdHNlbGVjdGlvbkZpZWxkcy5wdXNoKEZpbHRlckZpZWxkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0aW9uRmllbGRzO1xufTtcblxuLyoqXG4gKiBHZXQgYWxsIHBhcmFtZXRlciBmaWx0ZXIgZmllbGRzIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHBhcmFtZXRlciBGaWx0ZXJGaWVsZHNcbiAqL1xuZnVuY3Rpb24gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogRmlsdGVyRmllbGRbXSB7XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0Y29uc3QgcGFyYW1ldGVyRW50aXR5VHlwZSA9IGRhdGFNb2RlbE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0Y29uc3QgaXNQYXJhbWV0ZXJpemVkID0gISFwYXJhbWV0ZXJFbnRpdHlUeXBlLmFubm90YXRpb25zPy5Db21tb24/LlJlc3VsdENvbnRleHQgJiYgIWRhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0O1xuXHRjb25zdCBwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0ID1cblx0XHRpc1BhcmFtZXRlcml6ZWQgJiYgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKGAvJHtkYXRhTW9kZWxPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWV9YCk7XG5cblx0cmV0dXJuIChcblx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQ/IHBhcmFtZXRlckVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdFx0XHRcdFx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZChcblx0XHRcdFx0XHRcdHt9IGFzIFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPixcblx0XHRcdFx0XHRcdHByb3BlcnR5Lm5hbWUsXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJDb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0cGFyYW1ldGVyRW50aXR5VHlwZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdXG5cdCkgYXMgRmlsdGVyRmllbGRbXTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBGaWx0ZXJCYXIgc2VhcmNoIGZpZWxkIGlzIGhpZGRlbiBvciBub3QuXG4gKlxuICogQHBhcmFtIGxpc3RSZXBvcnRUYWJsZXMgVGhlIGxpc3QgcmVwb3J0IHRhYmxlc1xuICogQHBhcmFtIGNoYXJ0cyBUaGUgQUxQIGNoYXJ0c1xuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgaW5mb3JtYXRpb24gaWYgdGhlIEZpbHRlckJhciBzZWFyY2ggZmllbGQgaXMgaGlkZGVuIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQmFySGlkZUJhc2ljU2VhcmNoID0gZnVuY3Rpb24gKFxuXHRsaXN0UmVwb3J0VGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSxcblx0Y2hhcnRzOiBDaGFydFZpc3VhbGl6YXRpb25bXSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIGNoYXJ0cyBhbGxvdyBzZWFyY2hcblx0Y29uc3Qgbm9TZWFyY2hJbkNoYXJ0cyA9IGNoYXJ0cy5sZW5ndGggPT09IDAgfHwgY2hhcnRzLmV2ZXJ5KChjaGFydCkgPT4gIWNoYXJ0LmFwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCk7XG5cblx0Ly8gQ2hlY2sgaWYgYWxsIHRhYmxlcyBhcmUgYW5hbHl0aWNhbCBhbmQgbm9uZSBvZiB0aGVtIGFsbG93IGZvciBzZWFyY2hcblx0Ly8gb3IgYWxsIHRhYmxlcyBhcmUgVHJlZVRhYmxlIGFuZCBub25lIG9mIHRoZW0gYWxsb3cgZm9yIHNlYXJjaFxuXHRjb25zdCBub1NlYXJjaEluVGFibGVzID1cblx0XHRsaXN0UmVwb3J0VGFibGVzLmxlbmd0aCA9PT0gMCB8fFxuXHRcdGxpc3RSZXBvcnRUYWJsZXMuZXZlcnkoKHRhYmxlKSA9PiAodGFibGUuZW5hYmxlQW5hbHl0aWNzIHx8IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikgJiYgIXRhYmxlLmVuYWJsZUJhc2ljU2VhcmNoKTtcblxuXHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0aWYgKGNvbnRleHRQYXRoICYmIG5vU2VhcmNoSW5DaGFydHMgJiYgbm9TZWFyY2hJblRhYmxlcykge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLyoqXG4gKiBSZXRyaWV2ZXMgZmlsdGVyIGZpZWxkcyBmcm9tIHRoZSBtYW5pZmVzdC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBlbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBmaWx0ZXIgZmllbGRzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uIChcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudEZpbHRlckZpZWxkPiB7XG5cdGNvbnN0IGZiQ29uZmlnOiBGaWx0ZXJNYW5pZmVzdENvbmZpZ3VyYXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZGVmaW5lZEZpbHRlckZpZWxkczogUmVjb3JkPHN0cmluZywgRmlsdGVyRmllbGRNYW5pZmVzdENvbmZpZ3VyYXRpb24+ID0gZmJDb25maWc/LmZpbHRlckZpZWxkcyB8fCB7fTtcblx0Y29uc3Qgc2VsZWN0aW9uRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJGaWVsZD4gPSBfZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdGVudGl0eVR5cGUsXG5cdFx0T2JqZWN0LmtleXMoZGVmaW5lZEZpbHRlckZpZWxkcykubWFwKChrZXkpID0+IEtleUhlbHBlci5nZXRQYXRoRnJvbVNlbGVjdGlvbkZpZWxkS2V5KGtleSkpLFxuXHRcdHRydWUsXG5cdFx0Y29udmVydGVyQ29udGV4dFxuXHQpO1xuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZD4gPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gZGVmaW5lZEZpbHRlckZpZWxkcykge1xuXHRcdGNvbnN0IGZpbHRlckZpZWxkID0gZGVmaW5lZEZpbHRlckZpZWxkc1tzS2V5XTtcblx0XHRjb25zdCBwcm9wZXJ0eU5hbWUgPSBLZXlIZWxwZXIuZ2V0UGF0aEZyb21TZWxlY3Rpb25GaWVsZEtleShzS2V5KTtcblx0XHRjb25zdCBzZWxlY3Rpb25GaWVsZCA9IHNlbGVjdGlvbkZpZWxkc1twcm9wZXJ0eU5hbWVdO1xuXHRcdGNvbnN0IHR5cGUgPSBmaWx0ZXJGaWVsZC50eXBlID09PSBcIlNsb3RcIiA/IGZpbHRlckZpZWxkVHlwZS5TbG90IDogZmlsdGVyRmllbGRUeXBlLkRlZmF1bHQ7XG5cdFx0Y29uc3QgdmlzdWFsRmlsdGVyID1cblx0XHRcdGZpbHRlckZpZWxkICYmIGZpbHRlckZpZWxkPy52aXN1YWxGaWx0ZXJcblx0XHRcdFx0PyBnZXRWaXN1YWxGaWx0ZXJzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIHNLZXksIGRlZmluZWRGaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGZpbHRlckZpZWxkc1tzS2V5XSA9IHtcblx0XHRcdGtleTogc0tleSxcblx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRzbG90TmFtZTogZmlsdGVyRmllbGQ/LnNsb3ROYW1lIHx8IHNLZXksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmFubm90YXRpb25QYXRoLFxuXHRcdFx0Y29uZGl0aW9uUGF0aDogc2VsZWN0aW9uRmllbGQ/LmNvbmRpdGlvblBhdGggfHwgcHJvcGVydHlOYW1lLFxuXHRcdFx0dGVtcGxhdGU6IGZpbHRlckZpZWxkLnRlbXBsYXRlLFxuXHRcdFx0bGFiZWw6IGZpbHRlckZpZWxkLmxhYmVsLFxuXHRcdFx0cG9zaXRpb246IGZpbHRlckZpZWxkLnBvc2l0aW9uIHx8IHsgcGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXIgfSxcblx0XHRcdGF2YWlsYWJpbGl0eTogZmlsdGVyRmllbGQuYXZhaWxhYmlsaXR5IHx8IFwiRGVmYXVsdFwiLFxuXHRcdFx0c2V0dGluZ3M6IGZpbHRlckZpZWxkLnNldHRpbmdzLFxuXHRcdFx0dmlzdWFsRmlsdGVyOiB2aXN1YWxGaWx0ZXIsXG5cdFx0XHRyZXF1aXJlZDogZmlsdGVyRmllbGQucmVxdWlyZWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiBmaWx0ZXJGaWVsZHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyRmllbGQgPSBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGVudGl0eVR5cGU6IEVudGl0eVR5cGUpIHtcblx0cmV0dXJuIF9nZXRGaWx0ZXJGaWVsZCh7fSwgcHJvcGVydHlQYXRoLCBjb252ZXJ0ZXJDb250ZXh0LCBlbnRpdHlUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWx0ZXJSZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoXG5cdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnNUeXBlIHwgdW5kZWZpbmVkLFxuXHRzUmVzdHJpY3Rpb246IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIgfCBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCJcbikge1xuXHRsZXQgYVByb3BzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBvUHJvcGVydHkudmFsdWU7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGFQcm9wcztcbn07XG5leHBvcnQgY29uc3QgZ2V0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb246IEZpbHRlclJlc3RyaWN0aW9uc1R5cGUgfCB1bmRlZmluZWQpIHtcblx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT4gPSB7fTtcblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbi5GaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9uVHlwZSkge1xuXHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0aWYgKG9Qcm9wZXJ0eS5Qcm9wZXJ0eT8udmFsdWUgJiYgb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucykge1xuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHk/LnZhbHVlXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0ucHVzaChvUHJvcGVydHkuQWxsb3dlZEV4cHJlc3Npb25zLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5Py52YWx1ZV0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucy50b1N0cmluZygpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBtQWxsb3dlZEV4cHJlc3Npb25zO1xufTtcblxuY29uc3QgZ2V0U2VhcmNoRmlsdGVyUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKCk6IFByb3BlcnR5SW5mbyB7XG5cdHJldHVybiB7XG5cdFx0bmFtZTogXCIkc2VhcmNoXCIsXG5cdFx0cGF0aDogXCIkc2VhcmNoXCIsXG5cdFx0ZGF0YVR5cGU6IHNTdHJpbmdEYXRhVHlwZSxcblx0XHRtYXhDb25kaXRpb25zOiAxXG5cdH07XG59O1xuXG5jb25zdCBnZXRFZGl0U3RhdGVGaWx0ZXJQcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRwYXRoOiBcIiRlZGl0U3RhdGVcIixcblx0XHRncm91cExhYmVsOiBcIlwiLFxuXHRcdGdyb3VwOiBcIlwiLFxuXHRcdGRhdGFUeXBlOiBzU3RyaW5nRGF0YVR5cGUsXG5cdFx0aGlkZGVuRmlsdGVyOiBmYWxzZVxuXHR9O1xufTtcblxuY29uc3QgZ2V0U2VhcmNoUmVzdHJpY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0bGV0IHNlYXJjaFJlc3RyaWN0aW9ucztcblx0aWYgKCFNb2RlbEhlbHBlci5pc1NpbmdsZXRvbihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpKSkge1xuXHRcdGNvbnN0IGNhcGFiaWxpdGVzID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKT8uYW5ub3RhdGlvbnM/LkNhcGFiaWxpdGllcyBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19DYXBhYmlsaXRpZXM7XG5cdFx0c2VhcmNoUmVzdHJpY3Rpb25zID0gY2FwYWJpbGl0ZXM/LlNlYXJjaFJlc3RyaWN0aW9ucztcblx0fVxuXHRyZXR1cm4gc2VhcmNoUmVzdHJpY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBmdW5jdGlvbiAoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgc05hdmlnYXRpb25QYXRoOiBzdHJpbmcpIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzPy5OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVzdHJpY3RlZFByb3BlcnRpZXMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5SZXN0cmljdGVkUHJvcGVydGllcztcblx0cmV0dXJuIChcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMgJiZcblx0XHRhUmVzdHJpY3RlZFByb3BlcnRpZXMuZmluZChmdW5jdGlvbiAob1Jlc3RyaWN0ZWRQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS52YWx1ZSA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59O1xuXG50eXBlIFByb3BlcnR5SW5mbyA9IHtcblx0a2V5Pzogc3RyaW5nO1xuXHRhbm5vdGF0aW9uUGF0aD86IHN0cmluZztcblx0Y29uZGl0aW9uUGF0aD86IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRsYWJlbD86IHN0cmluZztcblx0Z3JvdXBMYWJlbD86IHN0cmluZztcblx0bWF4Q29uZGl0aW9ucz86IG51bWJlcjtcblx0ZGF0YVR5cGU/OiBzdHJpbmc7XG5cdGdyb3VwPzogc3RyaW5nO1xuXHRoaWRkZW5GaWx0ZXI/OiBib29sZWFuO1xuXHRkaXNwbGF5Pzogc3RyaW5nO1xuXHRpc1BhcmFtZXRlcj86IGJvb2xlYW47XG5cdGNhc2VTZW5zaXRpdmU/OiBib29sZWFuO1xuXHRhdmFpbGFiaWxpdHk/OiBBdmFpbGFiaWxpdHlUeXBlO1xuXHRwb3NpdGlvbj86IFBvc2l0aW9uO1xuXHR0eXBlPzogc3RyaW5nO1xuXHR0ZW1wbGF0ZT86IHN0cmluZztcblx0bWVudT86IHN0cmluZztcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRmaWx0ZXJFeHByZXNzaW9uPzogc3RyaW5nO1xufTtcbmNvbnN0IF9mZXRjaEJhc2ljUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKG9GaWx0ZXJGaWVsZEluZm86IEZpbHRlckZpZWxkKTogUHJvcGVydHlJbmZvIHtcblx0cmV0dXJuIHtcblx0XHRrZXk6IG9GaWx0ZXJGaWVsZEluZm8ua2V5LFxuXHRcdGFubm90YXRpb25QYXRoOiBvRmlsdGVyRmllbGRJbmZvLmFubm90YXRpb25QYXRoLFxuXHRcdGNvbmRpdGlvblBhdGg6IG9GaWx0ZXJGaWVsZEluZm8uY29uZGl0aW9uUGF0aCxcblx0XHRuYW1lOiBvRmlsdGVyRmllbGRJbmZvLmNvbmRpdGlvblBhdGgsXG5cdFx0bGFiZWw6IG9GaWx0ZXJGaWVsZEluZm8ubGFiZWwsXG5cdFx0aGlkZGVuRmlsdGVyOiBvRmlsdGVyRmllbGRJbmZvLmF2YWlsYWJpbGl0eSA9PT0gXCJIaWRkZW5cIixcblx0XHRkaXNwbGF5OiBcIlZhbHVlXCIsXG5cdFx0aXNQYXJhbWV0ZXI6IG9GaWx0ZXJGaWVsZEluZm8uaXNQYXJhbWV0ZXIsXG5cdFx0Y2FzZVNlbnNpdGl2ZTogb0ZpbHRlckZpZWxkSW5mby5jYXNlU2Vuc2l0aXZlLFxuXHRcdGF2YWlsYWJpbGl0eTogb0ZpbHRlckZpZWxkSW5mby5hdmFpbGFiaWxpdHksXG5cdFx0cG9zaXRpb246IG9GaWx0ZXJGaWVsZEluZm8ucG9zaXRpb24sXG5cdFx0dHlwZTogb0ZpbHRlckZpZWxkSW5mby50eXBlLFxuXHRcdHRlbXBsYXRlOiBvRmlsdGVyRmllbGRJbmZvLnRlbXBsYXRlLFxuXHRcdG1lbnU6IG9GaWx0ZXJGaWVsZEluZm8ubWVudSxcblx0XHRyZXF1aXJlZDogb0ZpbHRlckZpZWxkSW5mby5yZXF1aXJlZFxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoYUV4cHJlc3Npb25zOiBzdHJpbmdbXSkge1xuXHRjb25zdCBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkgPSBbXG5cdFx0XCJTaW5nbGVWYWx1ZVwiLFxuXHRcdFwiTXVsdGlWYWx1ZVwiLFxuXHRcdFwiU2luZ2xlUmFuZ2VcIixcblx0XHRcIk11bHRpUmFuZ2VcIixcblx0XHRcIlNlYXJjaEV4cHJlc3Npb25cIixcblx0XHRcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIlxuXHRdO1xuXG5cdGFFeHByZXNzaW9ucy5zb3J0KGZ1bmN0aW9uIChhOiBzdHJpbmcsIGI6IHN0cmluZykge1xuXHRcdHJldHVybiBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihhKSAtIGFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eS5pbmRleE9mKGIpO1xuXHR9KTtcblxuXHRyZXR1cm4gYUV4cHJlc3Npb25zWzBdO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpc3BsYXlNb2RlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zOiBFbnRpdHlUeXBlQW5ub3RhdGlvbnMpIHtcblx0Y29uc3Qgb1RleHRBbm5vdGF0aW9uID0gb1Byb3BlcnR5QW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dCxcblx0XHRvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJiBvUHJvcGVydHlBbm5vdGF0aW9ucz8uQ29tbW9uPy5UZXh0Py5hbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkgfHxcblx0XHRcdFx0KG9Db2xsZWN0aW9uQW5ub3RhdGlvbnMgJiYgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz8uVUk/LlRleHRBcnJhbmdlbWVudCkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ21lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nbWVudEFubm90YXRpb24udmFsdWVPZigpID09PSBcIlVJLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7IC8vVGV4dEZpcnN0XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufTtcblxuZXhwb3J0IGNvbnN0IGZldGNoUHJvcGVydHlJbmZvID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRvRmlsdGVyRmllbGRJbmZvOiBGaWx0ZXJGaWVsZCxcblx0b1R5cGVDb25maWc6IFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPlxuKTogUHJvcGVydHlJbmZvIHtcblx0bGV0IG9Qcm9wZXJ0eUluZm8gPSBfZmV0Y2hCYXNpY1Byb3BlcnR5SW5mbyhvRmlsdGVyRmllbGRJbmZvKTtcblx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0ZpbHRlckZpZWxkSW5mby5hbm5vdGF0aW9uUGF0aDtcblxuXHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiBvUHJvcGVydHlJbmZvO1xuXHR9XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5T2JqZWN0ID0gY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yKHNBbm5vdGF0aW9uUGF0aCkuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLnRhcmdldE9iamVjdDtcblxuXHRjb25zdCBvUHJvcGVydHlBbm5vdGF0aW9ucyA9IHRhcmdldFByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0Y29uc3Qgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyA9IGNvbnZlcnRlckNvbnRleHQ/LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zO1xuXG5cdGNvbnN0IG9Gb3JtYXRPcHRpb25zID0gb1R5cGVDb25maWcuZm9ybWF0T3B0aW9ucztcblx0Y29uc3Qgb0NvbnN0cmFpbnRzID0gb1R5cGVDb25maWcuY29uc3RyYWludHM7XG5cdG9Qcm9wZXJ0eUluZm8gPSBPYmplY3QuYXNzaWduKG9Qcm9wZXJ0eUluZm8sIHtcblx0XHRmb3JtYXRPcHRpb25zOiBvRm9ybWF0T3B0aW9ucyxcblx0XHRjb25zdHJhaW50czogb0NvbnN0cmFpbnRzLFxuXHRcdGRpc3BsYXk6IGRpc3BsYXlNb2RlKG9Qcm9wZXJ0eUFubm90YXRpb25zLCBvQ29sbGVjdGlvbkFubm90YXRpb25zKVxuXHR9KTtcblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHlJbmZvKSB7XG5cdGxldCBiSXNNdWx0aVZhbHVlID0gdHJ1ZTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRzd2l0Y2ggKG9Qcm9wZXJ0eS5maWx0ZXJFeHByZXNzaW9uKSB7XG5cdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdGJJc011bHRpVmFsdWUgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXHRpZiAob1Byb3BlcnR5LnR5cGUgJiYgb1Byb3BlcnR5LnR5cGUuaW5kZXhPZihcIkJvb2xlYW5cIikgPiAwKSB7XG5cdFx0YklzTXVsdGlWYWx1ZSA9IGZhbHNlO1xuXHR9XG5cdHJldHVybiBiSXNNdWx0aVZhbHVlO1xufTtcblxuY29uc3QgX2lzRmlsdGVyYWJsZU5hdmlnYXRpb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50cnk6IERhdGFGaWVsZEFic3RyYWN0VHlwZXNcbik6IGVudHJ5IGlzIEFubm90YXRpb25UZXJtPERhdGFGaWVsZCB8IERhdGFGaWVsZFdpdGhVcmwgfCBEYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg+IHtcblx0cmV0dXJuIChcblx0XHQoZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0ZW50cnkuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwgfHxcblx0XHRcdGVudHJ5LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgpICYmXG5cdFx0ZW50cnkuVmFsdWUucGF0aC5pbmNsdWRlcyhcIi9cIilcblx0KTtcbn07XG5cbmNvbnN0IGdldEFubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YSA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0bHJUYWJsZXM6IFRhYmxlVmlzdWFsaXphdGlvbltdID0gW10sXG5cdGFubm90YXRpb25QYXRoID0gXCJcIixcblx0aW5jbHVkZUhpZGRlbiA9IGZhbHNlLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbikge1xuXHQvLyBGZXRjaCBhbGwgc2VsZWN0aW9uVmFyaWFudHMgZGVmaW5lZCBpbiB0aGUgZGlmZmVyZW50IHZpc3VhbGl6YXRpb25zIGFuZCBkaWZmZXJlbnQgdmlld3MgKG11bHRpIHRhYmxlIG1vZGUpXG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnRzOiBTZWxlY3Rpb25WYXJpYW50Q29uZmlndXJhdGlvbltdID0gZ2V0U2VsZWN0aW9uVmFyaWFudHMobHJUYWJsZXMsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdC8vIGNyZWF0ZSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQgaW4gc2VsZWN0aW9uIHZhcmlhbnRzXG5cdGNvbnN0IGV4Y2x1ZGVkRmlsdGVyUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSBnZXRFeGNsdWRlZEZpbHRlclByb3BlcnRpZXMoc2VsZWN0aW9uVmFyaWFudHMpO1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdC8vRmlsdGVycyB3aGljaCBoYXMgdG8gYmUgYWRkZWQgd2hpY2ggaXMgcGFydCBvZiBTVi9EZWZhdWx0IGFubm90YXRpb25zIGJ1dCBub3QgcHJlc2VudCBpbiB0aGUgU2VsZWN0aW9uRmllbGRzXG5cdGNvbnN0IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyA9ICgoYW5ub3RhdGlvblBhdGggJiYgY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihhbm5vdGF0aW9uUGF0aCk/LmFubm90YXRpb24pIHx8XG5cdFx0ZW50aXR5VHlwZS5hbm5vdGF0aW9ucz8uVUk/LlNlbGVjdGlvbkZpZWxkcyB8fFxuXHRcdFtdKSBhcyBQcm9wZXJ0eVBhdGhbXTtcblxuXHRjb25zdCBuYXZQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRpZiAobHJUYWJsZXMubGVuZ3RoID09PSAwICYmICEhbGluZUl0ZW1UZXJtKSB7XG5cdFx0KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24obGluZUl0ZW1UZXJtKS5hbm5vdGF0aW9uIGFzIExpbmVJdGVtKT8uZm9yRWFjaCgoZW50cnkpID0+IHtcblx0XHRcdGlmIChfaXNGaWx0ZXJhYmxlTmF2aWdhdGlvblByb3BlcnR5KGVudHJ5KSkge1xuXHRcdFx0XHRjb25zdCBlbnRpdHlQYXRoID0gZW50cnkuVmFsdWUucGF0aC5zbGljZSgwLCBlbnRyeS5WYWx1ZS5wYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0XHRcdGlmICghbmF2UHJvcGVydGllcy5pbmNsdWRlcyhlbnRpdHlQYXRoKSkge1xuXHRcdFx0XHRcdG5hdlByb3BlcnRpZXMucHVzaChlbnRpdHlQYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IHtcblx0XHQvLyAuLi5ub24gaGlkZGVuIHByb3BlcnRpZXMgb2YgdGhlIGVudGl0eVxuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHMoZW50aXR5VHlwZSwgXCJcIiwgZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLCBpbmNsdWRlSGlkZGVuLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHQvLyAuLi4gbm9uIGhpZGRlbiBwcm9wZXJ0aWVzIG9mIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdC4uLl9nZXRTZWxlY3Rpb25GaWVsZHNCeVBhdGgoZW50aXR5VHlwZSwgbmF2UHJvcGVydGllcywgZmFsc2UsIGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdC8vIC4uLmFkZGl0aW9uYWwgbWFuaWZlc3QgZGVmaW5lZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQuLi5fZ2V0U2VsZWN0aW9uRmllbGRzQnlQYXRoKFxuXHRcdFx0ZW50aXR5VHlwZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLFxuXHRcdFx0aW5jbHVkZUhpZGRlbixcblx0XHRcdGNvbnZlcnRlckNvbnRleHRcblx0XHQpXG5cdH07XG5cdGxldCBhU2VsZWN0T3B0aW9uczogU2VsZWN0T3B0aW9uVHlwZVtdID0gW107XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25WYXJpYW50KGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zO1xuXHR9XG5cblx0Y29uc3QgcHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdID1cblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM/LnJlZHVjZSgoc2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdLCBzZWxlY3Rpb25GaWVsZCkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoID0gc2VsZWN0aW9uRmllbGQudmFsdWU7XG5cdFx0XHRpZiAoIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSkge1xuXHRcdFx0XHRsZXQgbmF2aWdhdGlvblBhdGg6IHN0cmluZztcblx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuU2VsZWN0aW9uRmllbGRzXCIpKSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGggPSBcIlwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGguc3BsaXQoXCIvQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlNlbGVjdGlvbkZpZWxkc1wiKVswXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGZpbHRlclByb3BlcnR5UGF0aCA9IG5hdmlnYXRpb25QYXRoID8gbmF2aWdhdGlvblBhdGggKyBcIi9cIiArIHByb3BlcnR5UGF0aCA6IHByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZmlsdGVyRmllbGQ6IEZpbHRlckZpZWxkIHwgdW5kZWZpbmVkID0gX2dldEZpbHRlckZpZWxkKFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkcyxcblx0XHRcdFx0XHRmaWx0ZXJQcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRlbnRpdHlUeXBlXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChmaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRcdGZpbHRlckZpZWxkLmdyb3VwID0gXCJcIjtcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZC5ncm91cExhYmVsID0gXCJcIjtcblx0XHRcdFx0XHRzZWxlY3Rpb25GaWVsZHMucHVzaChmaWx0ZXJGaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzZWxlY3Rpb25GaWVsZHM7XG5cdFx0fSwgW10pIHx8IFtdO1xuXG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJGaWVsZHMgPSBfZ2V0RGVmYXVsdEZpbHRlckZpZWxkcyhcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRlbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzLFxuXHRcdGFubm90YXRlZFNlbGVjdGlvbkZpZWxkc1xuXHQpO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzOiBleGNsdWRlZEZpbHRlclByb3BlcnRpZXMsXG5cdFx0ZW50aXR5VHlwZTogZW50aXR5VHlwZSxcblx0XHRhbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZHM6IGFubm90YXRlZFNlbGVjdGlvbkZpZWxkcyxcblx0XHRmaWx0ZXJGaWVsZHM6IGZpbHRlckZpZWxkcyxcblx0XHRwcm9wZXJ0eUluZm9GaWVsZHM6IHByb3BlcnR5SW5mb0ZpZWxkcyxcblx0XHRkZWZhdWx0RmlsdGVyRmllbGRzOiBkZWZhdWx0RmlsdGVyRmllbGRzXG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZmV0Y2hUeXBlQ29uZmlnID0gZnVuY3Rpb24gKHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuXHRjb25zdCBvVHlwZUNvbmZpZyA9IGdldFR5cGVDb25maWcocHJvcGVydHksIHByb3BlcnR5Py50eXBlKTtcblx0aWYgKHByb3BlcnR5Py50eXBlID09PSBzRWRtU3RyaW5nICYmIChvVHlwZUNvbmZpZy5jb25zdHJhaW50cy5udWxsYWJsZSA9PT0gdW5kZWZpbmVkIHx8IG9UeXBlQ29uZmlnLmNvbnN0cmFpbnRzLm51bGxhYmxlID09PSB0cnVlKSkge1xuXHRcdG9UeXBlQ29uZmlnLmZvcm1hdE9wdGlvbnMucGFyc2VLZWVwc0VtcHR5U3RyaW5nID0gZmFsc2U7XG5cdH1cblx0cmV0dXJuIG9UeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkRhdGFUeXBlVG9Qcm9wZXJ0eUluZm8gPSBmdW5jdGlvbiAoXG5cdHByb3BlcnR5SW5mb0ZpZWxkOiBGaWx0ZXJGaWVsZCxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YVJlcXVpcmVkUHJvcHM6IHVua25vd25bXSxcblx0YVR5cGVDb25maWc6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8UHJvcGVydHlUeXBlQ29uZmlnPj5cbikge1xuXHRsZXQgb1Byb3BlcnR5SW5mbyA9IGZldGNoUHJvcGVydHlJbmZvKGNvbnZlcnRlckNvbnRleHQsIHByb3BlcnR5SW5mb0ZpZWxkLCBhVHlwZUNvbmZpZ1twcm9wZXJ0eUluZm9GaWVsZC5rZXldKSxcblx0XHRzUHJvcGVydHlQYXRoID0gXCJcIjtcblx0aWYgKHByb3BlcnR5SW5mb0ZpZWxkLmNvbmRpdGlvblBhdGgpIHtcblx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlJbmZvRmllbGQuY29uZGl0aW9uUGF0aC5yZXBsYWNlKC9cXCt8XFwqL2csIFwiXCIpO1xuXHR9XG5cdGlmIChvUHJvcGVydHlJbmZvKSB7XG5cdFx0b1Byb3BlcnR5SW5mbyA9IE9iamVjdC5hc3NpZ24ob1Byb3BlcnR5SW5mbywge1xuXHRcdFx0bWF4Q29uZGl0aW9uczogIW9Qcm9wZXJ0eUluZm8uaXNQYXJhbWV0ZXIgJiYgaXNNdWx0aVZhbHVlKG9Qcm9wZXJ0eUluZm8pID8gLTEgOiAxLFxuXHRcdFx0cmVxdWlyZWQ6IHByb3BlcnR5SW5mb0ZpZWxkLnJlcXVpcmVkID8/IChvUHJvcGVydHlJbmZvLmlzUGFyYW1ldGVyIHx8IGFSZXF1aXJlZFByb3BzLmluZGV4T2Yoc1Byb3BlcnR5UGF0aCkgPj0gMCksXG5cdFx0XHRjYXNlU2Vuc2l0aXZlOiBpc0ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUoY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRkYXRhVHlwZTogYVR5cGVDb25maWdbcHJvcGVydHlJbmZvRmllbGQua2V5XS50eXBlXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIG9Qcm9wZXJ0eUluZm87XG59O1xuXG5leHBvcnQgY29uc3QgcHJvY2Vzc1NlbGVjdGlvbkZpZWxkcyA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlJbmZvRmllbGRzOiBGaWx0ZXJGaWVsZFtdLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcz86IEZpbHRlckZpZWxkW11cbikge1xuXHQvL2dldCBUeXBlQ29uZmlnIGZ1bmN0aW9uXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkVHlwZXM6IHVua25vd25bXSA9IFtdO1xuXHRjb25zdCBhVHlwZUNvbmZpZzogUmVjb3JkPHN0cmluZywgUGFydGlhbDxQcm9wZXJ0eVR5cGVDb25maWc+PiA9IHt9O1xuXG5cdGlmIChkZWZhdWx0VmFsdWVQcm9wZXJ0eUZpZWxkcykge1xuXHRcdHByb3BlcnR5SW5mb0ZpZWxkcyA9IHByb3BlcnR5SW5mb0ZpZWxkcy5jb25jYXQoZGVmYXVsdFZhbHVlUHJvcGVydHlGaWVsZHMpO1xuXHR9XG5cdC8vYWRkIHR5cGVDb25maWdcblx0cHJvcGVydHlJbmZvRmllbGRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtZXRlckZpZWxkKSB7XG5cdFx0aWYgKHBhcmFtZXRlckZpZWxkLmFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eUNvbnZlcnR5Q29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihwYXJhbWV0ZXJGaWVsZC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eVRhcmdldE9iamVjdCA9IHByb3BlcnR5Q29udmVydHlDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKS50YXJnZXRPYmplY3Q7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZFR5cGVzLnB1c2gocHJvcGVydHlUYXJnZXRPYmplY3Q/LnR5cGUpO1xuXHRcdFx0Y29uc3Qgb1R5cGVDb25maWcgPSBmZXRjaFR5cGVDb25maWcocHJvcGVydHlUYXJnZXRPYmplY3QpO1xuXHRcdFx0YVR5cGVDb25maWdbcGFyYW1ldGVyRmllbGQua2V5XSA9IG9UeXBlQ29uZmlnO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3Rpb25GaWVsZFR5cGVzLnB1c2goc0VkbVN0cmluZyk7XG5cdFx0XHRhVHlwZUNvbmZpZ1twYXJhbWV0ZXJGaWVsZC5rZXldID0geyB0eXBlOiBzU3RyaW5nRGF0YVR5cGUgfTtcblx0XHR9XG5cdH0pO1xuXG5cdC8vIGZpbHRlclJlc3RyaWN0aW9uc1xuXHRsZXQgX29GaWx0ZXJyZXN0cmljdGlvbnM7XG5cdGlmICghTW9kZWxIZWxwZXIuaXNTaW5nbGV0b24oY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKSkpIHtcblx0XHRfb0ZpbHRlcnJlc3RyaWN0aW9ucyA9IChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpPy5hbm5vdGF0aW9ucz8uQ2FwYWJpbGl0aWVzIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NhcGFiaWxpdGllcylcblx0XHRcdD8uRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHR9XG5cdGNvbnN0IG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBfb0ZpbHRlcnJlc3RyaWN0aW9ucztcblx0Y29uc3Qgb1JldDoge1xuXHRcdFJlcXVpcmVkUHJvcGVydGllcz86IHN0cmluZ1tdO1xuXHRcdE5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0RmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zPzogUmVjb3JkPHN0cmluZywgRmlsdGVyRXhwcmVzc2lvblR5cGVbXT47XG5cdH0gPSB7fTtcblx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJSZXF1aXJlZFByb3BlcnRpZXNcIikgfHwgW107XG5cdG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiKSB8fCBbXTtcblx0b1JldC5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgPSBnZXRGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zKTtcblxuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblx0aWYgKGFQYXRoUGFydHMubGVuZ3RoID4gMikge1xuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQsIHNOYXZpZ2F0aW9uUGF0aCk7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMgPSBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdFx0b1JldC5SZXF1aXJlZFByb3BlcnRpZXMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcy5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0Lk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gb1JldC5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIFwiTm9uRmlsdGVyYWJsZVByb3BlcnRpZXNcIikgfHwgW11cblx0XHQpO1xuXHRcdG9SZXQuRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zID0ge1xuXHRcdFx0Li4uKGdldEZpbHRlckFsbG93ZWRFeHByZXNzaW9uKG9OYXZpZ2F0aW9uRmlsdGVyUmVzdHJpY3Rpb25zKSB8fCB7fSksXG5cdFx0XHQuLi5vUmV0LkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1xuXHRcdH07XG5cdH1cblx0Y29uc3QgYVJlcXVpcmVkUHJvcHMgPSBvUmV0LlJlcXVpcmVkUHJvcGVydGllcztcblx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wcyA9IG9SZXQuTm9uRmlsdGVyYWJsZVByb3BlcnRpZXM7XG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllczogUHJvcGVydHlJbmZvW10gPSBbXTtcblxuXHQvLyBwcm9jZXNzIHRoZSBmaWVsZHMgdG8gYWRkIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzXG5cdHByb3BlcnR5SW5mb0ZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eUluZm9GaWVsZCkge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eUluZm9GaWVsZC5jb25kaXRpb25QYXRoLnJlcGxhY2UoL1xcK3xcXCovZywgXCJcIik7XG5cdFx0aWYgKGFOb25GaWx0ZXJhYmxlUHJvcHMuaW5kZXhPZihzUHJvcGVydHlQYXRoKSA9PT0gLTEpIHtcblx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBhc3NpZ25EYXRhVHlwZVRvUHJvcGVydHlJbmZvKHByb3BlcnR5SW5mb0ZpZWxkLCBjb252ZXJ0ZXJDb250ZXh0LCBhUmVxdWlyZWRQcm9wcywgYVR5cGVDb25maWcpO1xuXHRcdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2gob1Byb3BlcnR5SW5mbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvL2FkZCBlZGl0XG5cdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0aWYgKE1vZGVsSGVscGVyLmlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkKGRhdGFNb2RlbE9iamVjdFBhdGgpKSB7XG5cdFx0YUZldGNoZWRQcm9wZXJ0aWVzLnB1c2goZ2V0RWRpdFN0YXRlRmlsdGVyUHJvcGVydHlJbmZvKCkpO1xuXHR9XG5cdC8vIGFkZCBzZWFyY2hcblx0Y29uc3Qgc2VhcmNoUmVzdHJpY3Rpb25zID0gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBCb29sZWFuKHNlYXJjaFJlc3RyaWN0aW9ucyAmJiAhc2VhcmNoUmVzdHJpY3Rpb25zLlNlYXJjaGFibGUpO1xuXHRpZiAoc0VudGl0eVNldFBhdGggJiYgaGlkZUJhc2ljU2VhcmNoICE9PSB0cnVlKSB7XG5cdFx0aWYgKCFzZWFyY2hSZXN0cmljdGlvbnMgfHwgc2VhcmNoUmVzdHJpY3Rpb25zPy5TZWFyY2hhYmxlKSB7XG5cdFx0XHRhRmV0Y2hlZFByb3BlcnRpZXMucHVzaChnZXRTZWFyY2hGaWx0ZXJQcm9wZXJ0eUluZm8oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFGZXRjaGVkUHJvcGVydGllcztcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDdXN0b21NYW5pZmVzdEVsZW1lbnRzID0gZnVuY3Rpb24gKFxuXHRmaWx0ZXJGaWVsZHM6IE1hbmlmZXN0RmlsdGVyRmllbGRbXSxcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuKSB7XG5cdHJldHVybiBpbnNlcnRDdXN0b21FbGVtZW50cyhmaWx0ZXJGaWVsZHMsIGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpLCB7XG5cdFx0YXZhaWxhYmlsaXR5OiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdGxhYmVsOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHR5cGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0cG9zaXRpb246IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2xvdE5hbWU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dGVtcGxhdGU6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0c2V0dGluZ3M6IE92ZXJyaWRlVHlwZS5vdmVyd3JpdGUsXG5cdFx0dmlzdWFsRmlsdGVyOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlLFxuXHRcdHJlcXVpcmVkOiBPdmVycmlkZVR5cGUub3ZlcndyaXRlXG5cdH0pO1xufTtcblxuLyoqXG4gKiBSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiBmaWVsZHMgdGhhdCB3aWxsIGJlIHVzZWQgd2l0aGluIHRoZSBmaWx0ZXIgYmFyXG4gKiBUaGlzIGNvbmZpZ3VyYXRpb24gdGFrZXMgaW50byBhY2NvdW50IHRoZSBhbm5vdGF0aW9uIGFuZCB0aGUgc2VsZWN0aW9uIHZhcmlhbnRzLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcGFyYW0gbHJUYWJsZXNcbiAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuICogQHBhcmFtIFtpbmNsdWRlSGlkZGVuXVxuICogQHBhcmFtIFtsaW5lSXRlbVRlcm1dXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzZWxlY3Rpb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3Rpb25GaWVsZHMgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGxyVGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdLFxuXHRhbm5vdGF0aW9uUGF0aCA9IFwiXCIsXG5cdGluY2x1ZGVIaWRkZW4/OiBib29sZWFuLFxuXHRsaW5lSXRlbVRlcm0/OiBzdHJpbmdcbikge1xuXHRjb25zdCBvQW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhID0gZ2V0QW5ub3RhdGVkU2VsZWN0aW9uRmllbGREYXRhKFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0bHJUYWJsZXMsXG5cdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0aW5jbHVkZUhpZGRlbixcblx0XHRsaW5lSXRlbVRlcm1cblx0KTtcblx0Y29uc3QgcGFyYW1ldGVyRmllbGRzID0gX2dldFBhcmFtZXRlckZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0KTtcblx0bGV0IHByb3BlcnR5SW5mb0ZpZWxkczogRmlsdGVyRmllbGRbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5wcm9wZXJ0eUluZm9GaWVsZHMpKTtcblx0Y29uc3QgZW50aXR5VHlwZSA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZW50aXR5VHlwZTtcblxuXHRwcm9wZXJ0eUluZm9GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BlcnR5SW5mb0ZpZWxkcyk7XG5cblx0cHJvcGVydHlJbmZvRmllbGRzID0gaW5zZXJ0Q3VzdG9tTWFuaWZlc3RFbGVtZW50cyhwcm9wZXJ0eUluZm9GaWVsZHMsIGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdGNvbnN0IGFGZXRjaGVkUHJvcGVydGllcyA9IHByb2Nlc3NTZWxlY3Rpb25GaWVsZHMoXG5cdFx0cHJvcGVydHlJbmZvRmllbGRzLFxuXHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0b0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5kZWZhdWx0RmlsdGVyRmllbGRzXG5cdCk7XG5cdGFGZXRjaGVkUHJvcGVydGllcy5zb3J0KGZ1bmN0aW9uIChhOiBGaWx0ZXJHcm91cCwgYjogRmlsdGVyR3JvdXApIHtcblx0XHRpZiAoYS5ncm91cExhYmVsID09PSB1bmRlZmluZWQgfHwgYS5ncm91cExhYmVsID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRcdGlmIChiLmdyb3VwTGFiZWwgPT09IHVuZGVmaW5lZCB8fCBiLmdyb3VwTGFiZWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblx0XHRyZXR1cm4gYS5ncm91cExhYmVsLmxvY2FsZUNvbXBhcmUoYi5ncm91cExhYmVsKTtcblx0fSk7XG5cblx0bGV0IHNGZXRjaFByb3BlcnRpZXMgPSBKU09OLnN0cmluZ2lmeShhRmV0Y2hlZFByb3BlcnRpZXMpO1xuXHRzRmV0Y2hQcm9wZXJ0aWVzID0gc0ZldGNoUHJvcGVydGllcy5yZXBsYWNlKC9cXHsvZywgXCJcXFxce1wiKTtcblx0c0ZldGNoUHJvcGVydGllcyA9IHNGZXRjaFByb3BlcnRpZXMucmVwbGFjZSgvXFx9L2csIFwiXFxcXH1cIik7XG5cdGNvbnN0IHNQcm9wZXJ0eUluZm8gPSBzRmV0Y2hQcm9wZXJ0aWVzO1xuXHQvLyBlbmQgb2YgcHJvcGVydHlGaWVsZHMgcHJvY2Vzc2luZ1xuXG5cdC8vIHRvIHBvcHVsYXRlIHNlbGVjdGlvbiBmaWVsZHNcblx0bGV0IHByb3BTZWxlY3Rpb25GaWVsZHM6IEZpbHRlckZpZWxkW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEucHJvcGVydHlJbmZvRmllbGRzKSk7XG5cdHByb3BTZWxlY3Rpb25GaWVsZHMgPSBwYXJhbWV0ZXJGaWVsZHMuY29uY2F0KHByb3BTZWxlY3Rpb25GaWVsZHMpO1xuXHQvLyBjcmVhdGUgYSBtYXAgb2YgcHJvcGVydGllcyB0byBiZSB1c2VkIGluIHNlbGVjdGlvbiB2YXJpYW50c1xuXHRjb25zdCBleGNsdWRlZEZpbHRlclByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0gb0Fubm90YXRlZFNlbGVjdGlvbkZpZWxkRGF0YS5leGNsdWRlZEZpbHRlclByb3BlcnRpZXM7XG5cdGNvbnN0IGZpbHRlckZhY2V0cyA9IGVudGl0eVR5cGU/LmFubm90YXRpb25zPy5VST8uRmlsdGVyRmFjZXRzO1xuXHRsZXQgZmlsdGVyRmFjZXRNYXA6IFJlY29yZDxzdHJpbmcsIEZpbHRlckdyb3VwPiA9IHt9O1xuXG5cdGNvbnN0IGFGaWVsZEdyb3VwcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJVSVwiLCBVSUFubm90YXRpb25UZXJtcy5GaWVsZEdyb3VwKTtcblxuXHRpZiAoZmlsdGVyRmFjZXRzID09PSB1bmRlZmluZWQgfHwgZmlsdGVyRmFjZXRzLmxlbmd0aCA8IDApIHtcblx0XHRmb3IgKGNvbnN0IGkgaW4gYUZpZWxkR3JvdXBzKSB7XG5cdFx0XHRmaWx0ZXJGYWNldE1hcCA9IHtcblx0XHRcdFx0Li4uZmlsdGVyRmFjZXRNYXAsXG5cdFx0XHRcdC4uLmdldEZpZWxkR3JvdXBGaWx0ZXJHcm91cHMoYUZpZWxkR3JvdXBzW2ldKVxuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0ZmlsdGVyRmFjZXRNYXAgPSBmaWx0ZXJGYWNldHMucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJHcm91cD4sIGZpbHRlckZhY2V0OiBSZWZlcmVuY2VGYWNldFR5cGVzKSA9PiB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChmaWx0ZXJGYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXApPy5EYXRhPy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRwcmV2aW91c1ZhbHVlWygoZmlsdGVyRmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YVtpXSBhcyBEYXRhRmllbGRUeXBlcyk/LlZhbHVlPy5wYXRoXSA9IHtcblx0XHRcdFx0XHRncm91cDogZmlsdGVyRmFjZXQ/LklEPy50b1N0cmluZygpLFxuXHRcdFx0XHRcdGdyb3VwTGFiZWw6IGZpbHRlckZhY2V0Py5MYWJlbD8udG9TdHJpbmcoKVxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXZpb3VzVmFsdWU7XG5cdFx0fSwge30pO1xuXHR9XG5cblx0Ly8gY3JlYXRlIGEgbWFwIG9mIGFsbCBwb3RlbnRpYWwgZmlsdGVyIGZpZWxkcyBiYXNlZCBvbi4uLlxuXHRjb25zdCBmaWx0ZXJGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckZpZWxkPiA9IG9Bbm5vdGF0ZWRTZWxlY3Rpb25GaWVsZERhdGEuZmlsdGVyRmllbGRzO1xuXG5cdC8vIGZpbmFsbHkgY3JlYXRlIGZpbmFsIGxpc3Qgb2YgZmlsdGVyIGZpZWxkcyBieSBhZGRpbmcgdGhlIFNlbGVjdGlvbkZpZWxkcyBmaXJzdCAob3JkZXIgbWF0dGVycykuLi5cblx0bGV0IGFsbEZpbHRlcnMgPSBwcm9wU2VsZWN0aW9uRmllbGRzXG5cblx0XHQvLyAuLi5hbmQgYWRkaW5nIHJlbWFpbmluZyBmaWx0ZXIgZmllbGRzLCB0aGF0IGFyZSBub3QgdXNlZCBpbiBhIFNlbGVjdGlvblZhcmlhbnQgKG9yZGVyIGRvZXNuJ3QgbWF0dGVyKVxuXHRcdC5jb25jYXQoXG5cdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXJGaWVsZHMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BlcnR5UGF0aCkgPT4gIShwcm9wZXJ0eVBhdGggaW4gZXhjbHVkZWRGaWx0ZXJQcm9wZXJ0aWVzKSlcblx0XHRcdFx0Lm1hcCgocHJvcGVydHlQYXRoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oZmlsdGVyRmllbGRzW3Byb3BlcnR5UGF0aF0sIGZpbHRlckZhY2V0TWFwW3Byb3BlcnR5UGF0aF0pO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHQvL2lmIGFsbCB0YWJsZXMgYXJlIGFuYWx5dGljYWwgdGFibGVzIFwiYWdncmVnYXRhYmxlXCIgcHJvcGVydGllcyBtdXN0IGJlIGV4Y2x1ZGVkXG5cdGlmIChjaGVja0FsbFRhYmxlRm9yRW50aXR5U2V0QXJlQW5hbHl0aWNhbChsclRhYmxlcywgc0NvbnRleHRQYXRoKSkge1xuXHRcdC8vIEN1cnJlbnRseSBhbGwgYWdyZWdhdGVzIGFyZSByb290IGVudGl0eSBwcm9wZXJ0aWVzIChubyBwcm9wZXJ0aWVzIGNvbWluZyBmcm9tIG5hdmlnYXRpb24pIGFuZCBhbGxcblx0XHQvLyB0YWJsZXMgd2l0aCBzYW1lIGVudGl0eVNldCBnZXRzIHNhbWUgYWdncmVhZ3RlIGNvbmZpZ3VyYXRpb24gdGhhdCdzIHdoeSB3ZSBjYW4gdXNlIGZpcnN0IHRhYmxlIGludG9cblx0XHQvLyBMUiB0byBnZXQgYWdncmVnYXRlcyAod2l0aG91dCBjdXJyZW5jeS91bml0IHByb3BlcnRpZXMgc2luY2Ugd2UgZXhwZWN0IHRvIGJlIGFibGUgdG8gZmlsdGVyIHRoZW0pLlxuXHRcdGNvbnN0IGFnZ3JlZ2F0ZXMgPSBsclRhYmxlc1swXS5hZ2dyZWdhdGVzO1xuXHRcdGlmIChhZ2dyZWdhdGVzKSB7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZXMpLm1hcCgoYWdncmVnYXRlS2V5KSA9PiBhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0ucmVsYXRpdmVQYXRoKTtcblx0XHRcdGFsbEZpbHRlcnMgPSBhbGxGaWx0ZXJzLmZpbHRlcigoZmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMuaW5kZXhPZihmaWx0ZXJGaWVsZC5rZXkpID09PSAtMTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGluc2VydEN1c3RvbU1hbmlmZXN0RWxlbWVudHMoYWxsRmlsdGVycywgZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cblx0Ly8gQWRkIGNhc2VTZW5zaXRpdmUgcHJvcGVydHkgdG8gYWxsIHNlbGVjdGlvbiBmaWVsZHMuXG5cdGNvbnN0IGlzQ2FzZVNlbnNpdGl2ZSA9IGlzRmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZShjb252ZXJ0ZXJDb250ZXh0KTtcblx0c2VsZWN0aW9uRmllbGRzLmZvckVhY2goKGZpbHRlckZpZWxkKSA9PiB7XG5cdFx0ZmlsdGVyRmllbGQuY2FzZVNlbnNpdGl2ZSA9IGlzQ2FzZVNlbnNpdGl2ZTtcblx0fSk7XG5cblx0cmV0dXJuIHsgc2VsZWN0aW9uRmllbGRzLCBzUHJvcGVydHlJbmZvIH07XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgZmlsdGVyIGJhciBpbnNpZGUgYSB2YWx1ZSBoZWxwIGRpYWxvZyBzaG91bGQgYmUgZXhwYW5kZWQuIFRoaXMgaXMgdHJ1ZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGhvbGQ6XG4gKiAoMSkgYSBmaWx0ZXIgcHJvcGVydHkgaXMgbWFuZGF0b3J5LFxuICogKDIpIG5vIHNlYXJjaCBmaWVsZCBleGlzdHMgKGVudGl0eSBpc24ndCBzZWFyY2ggZW5hYmxlZCksXG4gKiAoMykgd2hlbiB0aGUgZGF0YSBpc24ndCBsb2FkZWQgYnkgZGVmYXVsdCAoYW5ub3RhdGlvbiBGZXRjaFZhbHVlcyA9IDIpLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gVGhlIEZpbHRlclJlc3RyaWN0aW9uIGFubm90YXRpb25cbiAqIEBwYXJhbSB2YWx1ZUxpc3QgVGhlIFZhbHVlTGlzdCBhbm5vdGF0aW9uXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgZm9yIGV4cGFuZEZpbHRlckZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgZ2V0RXhwYW5kRmlsdGVyRmllbGRzID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHRmaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBGaWx0ZXJSZXN0cmljdGlvbnMgfCB1bmRlZmluZWQsXG5cdHZhbHVlTGlzdDogYW55XG4pOiBib29sZWFuIHtcblx0Y29uc3QgcmVxdWlyZWRQcm9wZXJ0aWVzID0gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKGZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24sIFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIpO1xuXHRjb25zdCBzZWFyY2hSZXN0cmljdGlvbnMgPSBnZXRTZWFyY2hSZXN0cmljdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhpZGVCYXNpY1NlYXJjaCA9IEJvb2xlYW4oc2VhcmNoUmVzdHJpY3Rpb25zICYmICFzZWFyY2hSZXN0cmljdGlvbnMuU2VhcmNoYWJsZSk7XG5cdGlmIChyZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoID4gMCB8fCBoaWRlQmFzaWNTZWFyY2ggfHwgdmFsdWVMaXN0Py5GZXRjaFZhbHVlcyA9PT0gMikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFvRUtBLGVBQWU7RUFBQSxXQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtFQUFBLEdBQWZBLGVBQWUsS0FBZkEsZUFBZTtFQUtwQixNQUFNQyxVQUFVLEdBQUcsWUFBWTtFQUMvQixNQUFNQyxlQUFlLEdBQUcsZ0NBQWdDO0VBSXhEO0FBQ0E7QUFD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
|