@sapui5/sap.fe.core 1.102.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/helpers/IssueManager", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticDateOperators", "sap/fe/core/helpers/SemanticKeyHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/MessageBox", "sap/m/Title", "sap/ui/core/Component", "sap/ui/core/Core", "sap/ui/core/Fragment", "sap/ui/core/mvc/View", "sap/ui/core/util/XMLPreprocessor", "sap/ui/core/XMLTemplateProcessor", "sap/ui/Device", "sap/ui/mdc/condition/FilterOperatorUtil", "sap/ui/mdc/odata/v4/TypeUtil", "sap/ui/model/json/JSONModel", "./controllerextensions/messageHandler/messageHandling", "./templating/FilterHelper"], function (Log, mergeObjects, IssueManager, BindingToolkit, ModelHelper, SemanticDateOperators, SemanticKeyHelper, StableIdHelper, Bar, Button, Dialog, MessageBox, Title, Component, Core, Fragment, View, XMLPreprocessor, XMLTemplateProcessor, Device, FilterOperatorUtil, TypeUtil, JSONModel, messageHandling, FilterHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getConditions = FilterHelper.getConditions;
|
|
9
9
|
var system = Device.system;
|
|
10
10
|
var generate = StableIdHelper.generate;
|
|
11
|
-
var transformRecursively =
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
11
|
+
var transformRecursively = BindingToolkit.transformRecursively;
|
|
12
|
+
var pathInModel = BindingToolkit.pathInModel;
|
|
13
|
+
var or = BindingToolkit.or;
|
|
14
|
+
var not = BindingToolkit.not;
|
|
15
|
+
var constant = BindingToolkit.constant;
|
|
16
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
16
17
|
var IssueSeverity = IssueManager.IssueSeverity;
|
|
17
18
|
var IssueCategoryType = IssueManager.IssueCategoryType;
|
|
18
19
|
var IssueCategory = IssueManager.IssueCategory;
|
|
@@ -26,7 +27,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
26
27
|
|
|
27
28
|
return sSearchTerm.replace(/"/g, " ").split(/\s+/).reduce(function (sNormalized, sCurrentWord) {
|
|
28
29
|
if (sCurrentWord !== "") {
|
|
29
|
-
sNormalized = (sNormalized ? sNormalized
|
|
30
|
+
sNormalized = "".concat(sNormalized ? "".concat(sNormalized, " ") : "", "\"").concat(sCurrentWord, "\"");
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
return sNormalized;
|
|
@@ -100,14 +101,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
100
101
|
return oNavigationRestrictions["SearchRestrictions"];
|
|
101
102
|
}
|
|
102
103
|
|
|
103
|
-
sPath = sPath
|
|
104
|
+
sPath = "".concat(sPath, "/$NavigationPropertyBinding/").concat(aNavigationParts[i]);
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
return oMetaModel.getObject(sFullPath
|
|
107
|
+
return oMetaModel.getObject("".concat(sFullPath, "@Org.OData.Capabilities.V1.SearchRestrictions"));
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
function getNavigationRestrictions(oModel, sEntitySetPath, sNavigationPath) {
|
|
110
|
-
var oNavigationRestrictions = oModel.getObject(sEntitySetPath
|
|
111
|
+
var oNavigationRestrictions = oModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.NavigationRestrictions"));
|
|
111
112
|
var aRestrictedProperties = oNavigationRestrictions && oNavigationRestrictions.RestrictedProperties;
|
|
112
113
|
return aRestrictedProperties && aRestrictedProperties.find(function (oRestrictedProperty) {
|
|
113
114
|
return oRestrictedProperty && oRestrictedProperty.NavigationProperty && oRestrictedProperty.NavigationProperty.$NavigationPropertyPath === sNavigationPath;
|
|
@@ -116,7 +117,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
116
117
|
|
|
117
118
|
function _isInNonFilterableProperties(oModel, sEntitySetPath, sContextPath) {
|
|
118
119
|
var bIsNotFilterable = false;
|
|
119
|
-
var oAnnotation = oModel.getObject(sEntitySetPath
|
|
120
|
+
var oAnnotation = oModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.FilterRestrictions"));
|
|
120
121
|
|
|
121
122
|
if (oAnnotation && oAnnotation.NonFilterableProperties) {
|
|
122
123
|
bIsNotFilterable = oAnnotation.NonFilterableProperties.some(function (property) {
|
|
@@ -129,7 +130,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
129
130
|
|
|
130
131
|
|
|
131
132
|
function _isContextPathFilterable(oModel, sEntitySetPath, sContexPath) {
|
|
132
|
-
var sFullPath = sEntitySetPath
|
|
133
|
+
var sFullPath = "".concat(sEntitySetPath, "/").concat(sContexPath),
|
|
133
134
|
aESParts = sFullPath.split("/").splice(0, 2),
|
|
134
135
|
aContext = sFullPath.split("/").splice(2);
|
|
135
136
|
var bIsNotFilterable = false,
|
|
@@ -137,7 +138,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
137
138
|
sEntitySetPath = aESParts.join("/");
|
|
138
139
|
bIsNotFilterable = aContext.some(function (item, index, array) {
|
|
139
140
|
if (sContext.length > 0) {
|
|
140
|
-
sContext += "/"
|
|
141
|
+
sContext += "/".concat(item);
|
|
141
142
|
} else {
|
|
142
143
|
sContext = item;
|
|
143
144
|
}
|
|
@@ -159,12 +160,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
159
160
|
if (index === array.length - 1) {
|
|
160
161
|
//last path segment
|
|
161
162
|
bIsNotFilterable = _isInNonFilterableProperties(oModel, sEntitySetPath, sContext);
|
|
162
|
-
} else if (oModel.getObject(sEntitySetPath
|
|
163
|
+
} else if (oModel.getObject("".concat(sEntitySetPath, "/$NavigationPropertyBinding/").concat(item))) {
|
|
163
164
|
//check existing context path and initialize it
|
|
164
165
|
bIsNotFilterable = _isInNonFilterableProperties(oModel, sEntitySetPath, sContext);
|
|
165
166
|
sContext = ""; //set the new EntitySet
|
|
166
167
|
|
|
167
|
-
sEntitySetPath = "/"
|
|
168
|
+
sEntitySetPath = "/".concat(oModel.getObject("".concat(sEntitySetPath, "/$NavigationPropertyBinding/").concat(item)));
|
|
168
169
|
}
|
|
169
170
|
|
|
170
171
|
return bIsNotFilterable === true;
|
|
@@ -180,28 +181,29 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
180
181
|
|
|
181
182
|
var bIsFilterable; // Parameters should be rendered as filterfields
|
|
182
183
|
|
|
183
|
-
if (oModel.getObject(sEntitySetPath
|
|
184
|
+
if (oModel.getObject("".concat(sEntitySetPath, "/@com.sap.vocabularies.Common.v1.ResultContext")) === true) {
|
|
184
185
|
return true;
|
|
185
186
|
}
|
|
186
187
|
|
|
187
|
-
var oNavigationContext = oModel.createBindingContext(sEntitySetPath
|
|
188
|
+
var oNavigationContext = oModel.createBindingContext("".concat(sEntitySetPath, "/").concat(sProperty));
|
|
188
189
|
|
|
189
|
-
if (
|
|
190
|
-
if (oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.Hidden") === true) {
|
|
190
|
+
if (!bSkipHiddenFilter) {
|
|
191
|
+
if (oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.Hidden") === true || oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.HiddenFilter") === true) {
|
|
191
192
|
return false;
|
|
192
193
|
}
|
|
193
194
|
|
|
194
195
|
var sHiddenPath = oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.Hidden/$Path");
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
196
|
+
var sHiddenFilterPath = oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.HiddenFilter/$Path");
|
|
197
|
+
|
|
198
|
+
if (sHiddenPath && sHiddenFilterPath) {
|
|
199
|
+
return compileExpression(not(or(pathInModel(sHiddenPath), pathInModel(sHiddenFilterPath))));
|
|
200
|
+
} else if (sHiddenPath) {
|
|
201
|
+
return compileExpression(not(pathInModel(sHiddenPath)));
|
|
202
|
+
} else if (sHiddenFilterPath) {
|
|
203
|
+
return compileExpression(not(pathInModel(sHiddenFilterPath)));
|
|
198
204
|
}
|
|
199
205
|
}
|
|
200
206
|
|
|
201
|
-
if (!bSkipHiddenFilter && oNavigationContext.getProperty("@com.sap.vocabularies.UI.v1.HiddenFilter")) {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
207
|
if (sEntitySetPath.split("/").length === 2 && sProperty.indexOf("/") < 0) {
|
|
206
208
|
// there is no navigation in entitySet path and property path
|
|
207
209
|
bIsFilterable = !_isInNonFilterableProperties(oModel, sEntitySetPath, sProperty);
|
|
@@ -325,7 +327,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
325
327
|
}
|
|
326
328
|
} else {
|
|
327
329
|
// fallback to Technical Keys if no Semantic Key is present
|
|
328
|
-
var aTechnicalKeys = oMetaModel.getObject(oMetaPath
|
|
330
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(oMetaPath, "/$Type/$Key"));
|
|
329
331
|
|
|
330
332
|
for (var key in aTechnicalKeys) {
|
|
331
333
|
var sObjKey = aTechnicalKeys[key];
|
|
@@ -365,8 +367,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
365
367
|
if (aLinks && aLinks.length > 0) {
|
|
366
368
|
var oTargetParams = {};
|
|
367
369
|
var aAnnotationsSOItems = [];
|
|
368
|
-
var sEntitySetPath = oMetaPath
|
|
369
|
-
var sEntityTypePath = oMetaPath
|
|
370
|
+
var sEntitySetPath = "".concat(oMetaPath, "@");
|
|
371
|
+
var sEntityTypePath = "".concat(oMetaPath, "/@");
|
|
370
372
|
var oEntitySetAnnotations = oMetaModel.getObject(sEntitySetPath);
|
|
371
373
|
oSemanticObjectAnnotations = _getSemanticObjectAnnotations(oEntitySetAnnotations, sCurrentSemObj);
|
|
372
374
|
|
|
@@ -413,8 +415,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
413
415
|
|
|
414
416
|
if (key.indexOf("#") > -1) {
|
|
415
417
|
sQualifier = key.split("#")[1];
|
|
416
|
-
sAnnotationMappingTerm = sAnnotationMappingTerm
|
|
417
|
-
sAnnotationActionTerm = sAnnotationActionTerm
|
|
418
|
+
sAnnotationMappingTerm = "".concat(sAnnotationMappingTerm, "#").concat(sQualifier);
|
|
419
|
+
sAnnotationActionTerm = "".concat(sAnnotationActionTerm, "#").concat(sQualifier);
|
|
418
420
|
}
|
|
419
421
|
|
|
420
422
|
oSemanticObjectAnnotations.aMappings = oSemanticObjectAnnotations.aMappings.concat(oEntityAnnotations[sAnnotationMappingTerm]);
|
|
@@ -432,15 +434,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
432
434
|
var oPath = oBindingContext && oBindingContext.getPath();
|
|
433
435
|
var oMetaPath = oMetaModel.getMetaPath(oPath); // Semantic Key Vocabulary
|
|
434
436
|
|
|
435
|
-
var sSemanticKeyVocabulary = oMetaPath
|
|
437
|
+
var sSemanticKeyVocabulary = "".concat(oMetaPath, "/") + "@com.sap.vocabularies.Common.v1.SemanticKey"; //Semantic Keys
|
|
436
438
|
|
|
437
439
|
var aSemKeys = oMetaModel.getObject(sSemanticKeyVocabulary); // Unavailable Actions
|
|
438
440
|
|
|
439
441
|
var oEntry = oBindingContext.getObject();
|
|
440
442
|
|
|
441
443
|
if (!oEntry) {
|
|
442
|
-
oBindingContext.requestObject().then(function (
|
|
443
|
-
return updateRelateAppsModel(oBindingContext,
|
|
444
|
+
oBindingContext.requestObject().then(function (requestedObject) {
|
|
445
|
+
return updateRelateAppsModel(oBindingContext, requestedObject, oObjectPageLayout, aSemKeys, oMetaModel, oMetaPath);
|
|
444
446
|
}).catch(function (oError) {
|
|
445
447
|
Log.error("Cannot update the related app details", oError);
|
|
446
448
|
});
|
|
@@ -524,7 +526,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
524
526
|
|
|
525
527
|
for (var j = 0; j < aProperties.length; j++) {
|
|
526
528
|
var sProp = aProperties[j],
|
|
527
|
-
aPropertyAnnotations = oMetaModel.getObject("/"
|
|
529
|
+
aPropertyAnnotations = oMetaModel.getObject("/".concat(sEntitySet, "/").concat(sProp, "@"));
|
|
528
530
|
|
|
529
531
|
if (aPropertyAnnotations) {
|
|
530
532
|
if (aPropertyAnnotations["@com.sap.vocabularies.PersonalData.v1.IsPotentiallySensitive"] || aPropertyAnnotations["@com.sap.vocabularies.UI.v1.ExcludeFromNavigationContext"] || aPropertyAnnotations["@com.sap.vocabularies.Analytics.v1.Measure"]) {
|
|
@@ -558,7 +560,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
558
560
|
}
|
|
559
561
|
|
|
560
562
|
function fnGetContextPathProperties(oMetaModel, sContextPath, oFilter) {
|
|
561
|
-
var oEntityType = oMetaModel.getObject(sContextPath
|
|
563
|
+
var oEntityType = oMetaModel.getObject("".concat(sContextPath, "/")) || {},
|
|
562
564
|
oProperties = {};
|
|
563
565
|
|
|
564
566
|
for (var sKey in oEntityType) {
|
|
@@ -576,7 +578,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
576
578
|
var aMandatoryFilterFields;
|
|
577
579
|
|
|
578
580
|
if (oMetaModel && sContextPath) {
|
|
579
|
-
aMandatoryFilterFields = oMetaModel.getObject(sContextPath
|
|
581
|
+
aMandatoryFilterFields = oMetaModel.getObject("".concat(sContextPath, "@Org.OData.Capabilities.V1.FilterRestrictions/RequiredProperties"));
|
|
580
582
|
}
|
|
581
583
|
|
|
582
584
|
return aMandatoryFilterFields;
|
|
@@ -660,11 +662,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
660
662
|
// hence check if text exists (using "hasText") in the resource bundle before calling "getText"
|
|
661
663
|
// "hasText" only checks for the key in the immediate resource bundle and not it's custom bundles
|
|
662
664
|
// hence we need to do this recurrsively to check if the key exists in any of the bundles the forms the FE resource bundle
|
|
663
|
-
var bResourceKeyExists = _checkIfResourceKeyExists(oResourceBundle.aCustomBundles, sFrameworkKey
|
|
665
|
+
var bResourceKeyExists = _checkIfResourceKeyExists(oResourceBundle.aCustomBundles, "".concat(sFrameworkKey, "|").concat(sEntitySetName)); // if resource key with entity set name for instance specific text overriding is provided by the application
|
|
664
666
|
// then use the same key otherwise use the Framework key
|
|
665
667
|
|
|
666
668
|
|
|
667
|
-
sResourceKey = bResourceKeyExists ? sFrameworkKey
|
|
669
|
+
sResourceKey = bResourceKeyExists ? "".concat(sFrameworkKey, "|").concat(sEntitySetName) : sFrameworkKey;
|
|
668
670
|
}
|
|
669
671
|
|
|
670
672
|
return oResourceBundle.getText(sResourceKey, oParams);
|
|
@@ -698,20 +700,20 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
698
700
|
var sEntityName = getEntitySetName(oAction.getModel(), sEntityTypeName);
|
|
699
701
|
|
|
700
702
|
if (sEntityName) {
|
|
701
|
-
sContextPath = "/"
|
|
703
|
+
sContextPath = "/".concat(sEntityName);
|
|
702
704
|
}
|
|
703
705
|
|
|
704
706
|
if (bCheckStaticValue) {
|
|
705
|
-
return oAction.getObject(sContextPath
|
|
707
|
+
return oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "@Org.OData.Core.V1.OperationAvailable"));
|
|
706
708
|
}
|
|
707
709
|
|
|
708
710
|
if (bReturnOnlyPath) {
|
|
709
|
-
return sContextPath
|
|
711
|
+
return "".concat(sContextPath, "/").concat(sActionName);
|
|
710
712
|
} else {
|
|
711
713
|
return {
|
|
712
714
|
sContextPath: sContextPath,
|
|
713
|
-
sProperty: oAction.getObject(sContextPath
|
|
714
|
-
sBindingParameter: oAction.getObject(sContextPath
|
|
715
|
+
sProperty: oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "@Org.OData.Core.V1.OperationAvailable/$Path")),
|
|
716
|
+
sBindingParameter: oAction.getObject("".concat(sContextPath, "/").concat(sActionName, "/@$ui5.overload/0/$Parameter/0/$Name"))
|
|
715
717
|
};
|
|
716
718
|
}
|
|
717
719
|
}
|
|
@@ -748,7 +750,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
748
750
|
|
|
749
751
|
function _getEntityType(oContext) {
|
|
750
752
|
var oMetaModel = oContext.getModel().getMetaModel();
|
|
751
|
-
return oMetaModel.getObject(oMetaModel.getMetaPath(oContext.getPath())
|
|
753
|
+
return oMetaModel.getObject("".concat(oMetaModel.getMetaPath(oContext.getPath()), "/$Type"));
|
|
752
754
|
}
|
|
753
755
|
|
|
754
756
|
function _requestObject(sAction, oSelectedContext, sProperty) {
|
|
@@ -819,10 +821,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
819
821
|
|
|
820
822
|
|
|
821
823
|
function _setDynamicActionContexts(oInternalModelContext, sAction, aApplicable, aNotApplicable) {
|
|
822
|
-
var sDynamicActionPathPrefix = oInternalModelContext.getPath()
|
|
824
|
+
var sDynamicActionPathPrefix = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction),
|
|
823
825
|
oInternalModel = oInternalModelContext.getModel();
|
|
824
|
-
oInternalModel.setProperty(sDynamicActionPathPrefix
|
|
825
|
-
oInternalModel.setProperty(sDynamicActionPathPrefix
|
|
826
|
+
oInternalModel.setProperty("".concat(sDynamicActionPathPrefix, "/aApplicable"), aApplicable);
|
|
827
|
+
oInternalModel.setProperty("".concat(sDynamicActionPathPrefix, "/aNotApplicable"), aNotApplicable);
|
|
826
828
|
}
|
|
827
829
|
|
|
828
830
|
function setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts) {
|
|
@@ -830,7 +832,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
830
832
|
|
|
831
833
|
for (var sAction in oActionOperationAvailableMap) {
|
|
832
834
|
// Reset all properties before computation
|
|
833
|
-
oInternalModelContext.setProperty("dynamicActions/"
|
|
835
|
+
oInternalModelContext.setProperty("dynamicActions/".concat(sAction), {
|
|
834
836
|
bEnabled: false,
|
|
835
837
|
aApplicable: [],
|
|
836
838
|
aNotApplicable: []
|
|
@@ -841,7 +843,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
841
843
|
var aApplicable = [],
|
|
842
844
|
aNotApplicable = [],
|
|
843
845
|
sProperty = oActionOperationAvailableMap[sAction],
|
|
844
|
-
sDynamicActionEnabledPath = oInternalModelContext.getPath()
|
|
846
|
+
sDynamicActionEnabledPath = "".concat(oInternalModelContext.getPath(), "/dynamicActions/").concat(sAction, "/bEnabled");
|
|
845
847
|
|
|
846
848
|
if (typeof sProperty === "object" && sProperty !== null && sProperty !== undefined) {
|
|
847
849
|
for (var i = 0; i < aSelectedContexts.length; i++) {
|
|
@@ -850,11 +852,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
850
852
|
if (oSelectedContext) {
|
|
851
853
|
(function () {
|
|
852
854
|
var oContextData = oSelectedContext.getObject();
|
|
853
|
-
var oTransformedBinding = transformRecursively(sProperty, "
|
|
855
|
+
var oTransformedBinding = transformRecursively(sProperty, "PathInModel", // eslint-disable-next-line no-loop-func
|
|
854
856
|
function (oBindingExpression) {
|
|
855
857
|
return constant(oContextData[oBindingExpression.path]);
|
|
856
858
|
}, true);
|
|
857
|
-
var sResult =
|
|
859
|
+
var sResult = compileExpression(oTransformedBinding);
|
|
858
860
|
|
|
859
861
|
if (sResult === "true") {
|
|
860
862
|
oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
|
|
@@ -876,7 +878,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
876
878
|
if (_oSelectedContext) {
|
|
877
879
|
var oContextData = _oSelectedContext.getObject();
|
|
878
880
|
|
|
879
|
-
if (sProperty === null && !!oContextData["#"
|
|
881
|
+
if (sProperty === null && !!oContextData["#".concat(sAction)]) {
|
|
880
882
|
//look for action advertisement if present and its value is not null
|
|
881
883
|
oInternalModelContext.getModel().setProperty(sDynamicActionEnabledPath, true);
|
|
882
884
|
break;
|
|
@@ -955,7 +957,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
955
957
|
var aSemanticDateOps = [];
|
|
956
958
|
var oSettings = typeof sSettings === "string" ? JSON.parse(sSettings).customData : sSettings;
|
|
957
959
|
|
|
958
|
-
if (oContext.getObject(sEntitySetPath
|
|
960
|
+
if (oContext.getObject("".concat(sEntitySetPath, "/@com.sap.vocabularies.Common.v1.ResultContext")) === true) {
|
|
959
961
|
return aEqualsOps.toString();
|
|
960
962
|
}
|
|
961
963
|
|
|
@@ -994,7 +996,21 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
994
996
|
break;
|
|
995
997
|
|
|
996
998
|
case "SingleRange":
|
|
997
|
-
var aExpressionOps
|
|
999
|
+
var aExpressionOps;
|
|
1000
|
+
|
|
1001
|
+
if (bSemanticDateRange) {
|
|
1002
|
+
if (sType === "Edm.Date") {
|
|
1003
|
+
aExpressionOps = aSemanticDateOps;
|
|
1004
|
+
} else if (sType === "Edm.DateTimeOffset") {
|
|
1005
|
+
aExpressionOps = aSingleRangeDateTimeOps.concat(aBasicDateTimeOps);
|
|
1006
|
+
} else {
|
|
1007
|
+
aExpressionOps = aSingleRangeOps;
|
|
1008
|
+
}
|
|
1009
|
+
} else if (sType === "Edm.DateTimeOffset") {
|
|
1010
|
+
aExpressionOps = aSingleRangeDTBasicOps;
|
|
1011
|
+
} else {
|
|
1012
|
+
aExpressionOps = aSingleRangeOps;
|
|
1013
|
+
}
|
|
998
1014
|
|
|
999
1015
|
var sOperators = _getRestrictions(aDefaultOperators, aExpressionOps);
|
|
1000
1016
|
|
|
@@ -1033,7 +1049,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1033
1049
|
|
|
1034
1050
|
function getParameterInfo(oMetaModel, sContextPath) {
|
|
1035
1051
|
var sParameterContextPath = sContextPath.substring(0, sContextPath.lastIndexOf("/"));
|
|
1036
|
-
var bResultContext = oMetaModel.getObject(sParameterContextPath
|
|
1052
|
+
var bResultContext = oMetaModel.getObject("".concat(sParameterContextPath, "/@com.sap.vocabularies.Common.v1.ResultContext"));
|
|
1037
1053
|
var oParameterInfo = {};
|
|
1038
1054
|
|
|
1039
1055
|
if (bResultContext && sParameterContextPath !== sContextPath) {
|
|
@@ -1104,18 +1120,18 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1104
1120
|
aMetadataParameters.forEach(function (sMetadataParameter) {
|
|
1105
1121
|
var sSelectOptionName;
|
|
1106
1122
|
|
|
1107
|
-
if (aSelectOptionsPropertyNames.includes("$Parameter."
|
|
1108
|
-
sSelectOptionName = "$Parameter."
|
|
1123
|
+
if (aSelectOptionsPropertyNames.includes("$Parameter.".concat(sMetadataParameter))) {
|
|
1124
|
+
sSelectOptionName = "$Parameter.".concat(sMetadataParameter);
|
|
1109
1125
|
} else if (aSelectOptionsPropertyNames.includes(sMetadataParameter)) {
|
|
1110
1126
|
sSelectOptionName = sMetadataParameter;
|
|
1111
|
-
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes("$Parameter."
|
|
1112
|
-
sSelectOptionName = "$Parameter."
|
|
1127
|
+
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes("$Parameter.".concat(sMetadataParameter.slice(2, sMetadataParameter.length)))) {
|
|
1128
|
+
sSelectOptionName = "$Parameter.".concat(sMetadataParameter.slice(2, sMetadataParameter.length));
|
|
1113
1129
|
} else if (sMetadataParameter.startsWith("P_") && aSelectOptionsPropertyNames.includes(sMetadataParameter.slice(2, sMetadataParameter.length))) {
|
|
1114
1130
|
sSelectOptionName = sMetadataParameter.slice(2, sMetadataParameter.length);
|
|
1115
|
-
} else if (aSelectOptionsPropertyNames.includes("$Parameter.P_"
|
|
1116
|
-
sSelectOptionName = "$Parameter.P_"
|
|
1117
|
-
} else if (aSelectOptionsPropertyNames.includes("P_"
|
|
1118
|
-
sSelectOptionName = "P_"
|
|
1131
|
+
} else if (aSelectOptionsPropertyNames.includes("$Parameter.P_".concat(sMetadataParameter))) {
|
|
1132
|
+
sSelectOptionName = "$Parameter.P_".concat(sMetadataParameter);
|
|
1133
|
+
} else if (aSelectOptionsPropertyNames.includes("P_".concat(sMetadataParameter))) {
|
|
1134
|
+
sSelectOptionName = "P_".concat(sMetadataParameter);
|
|
1119
1135
|
}
|
|
1120
1136
|
|
|
1121
1137
|
if (sSelectOptionName) {
|
|
@@ -1131,8 +1147,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1131
1147
|
sSelectOptionName = sMetadataProperty;
|
|
1132
1148
|
} else if (sMetadataProperty.startsWith("P_") && aSelectOptionsPropertyNames.includes(sMetadataProperty.slice(2, sMetadataProperty.length))) {
|
|
1133
1149
|
sSelectOptionName = sMetadataProperty.slice(2, sMetadataProperty.length);
|
|
1134
|
-
} else if (aSelectOptionsPropertyNames.includes("P_"
|
|
1135
|
-
sSelectOptionName = "P_"
|
|
1150
|
+
} else if (aSelectOptionsPropertyNames.includes("P_".concat(sMetadataProperty))) {
|
|
1151
|
+
sSelectOptionName = "P_".concat(sMetadataProperty);
|
|
1136
1152
|
}
|
|
1137
1153
|
|
|
1138
1154
|
if (sSelectOptionName) {
|
|
@@ -1141,7 +1157,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1141
1157
|
});
|
|
1142
1158
|
aSelectOptionsPropertyNames.forEach(function (sSelectOption) {
|
|
1143
1159
|
if (sSelectOption.indexOf(".") > 0 && !sSelectOption.includes("$Parameter")) {
|
|
1144
|
-
var sFullContextPath =
|
|
1160
|
+
var sFullContextPath = "/".concat(sSelectOption.replaceAll(".", "/")).startsWith(sContextPath) ? "/".concat(sSelectOption.replaceAll(".", "/")) : "".concat(sContextPath, "/").concat(sSelectOption.replaceAll(".", "/")); // check if the full path, eg SalesOrderManage._Item.Material exists in the metamodel
|
|
1145
1161
|
|
|
1146
1162
|
if (oMetaModel.getObject(sFullContextPath.replace("P_", ""))) {
|
|
1147
1163
|
_createConditionsForNavProperties(sFullContextPath, sContextPath, oSelectionVariant, sSelectOption, oMetaModel, oConditions);
|
|
@@ -1163,9 +1179,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1163
1179
|
function _createConditionsForNavProperties(sFullContextPath, sMainEntitySetPath, oSelectionVariant, sSelectOption, oMetaModel, oConditions) {
|
|
1164
1180
|
var aNavObjectNames = sSelectOption.split("."); // Eg: "SalesOrderManage._Item._Material.Material" or "_Item.Material"
|
|
1165
1181
|
|
|
1166
|
-
if (
|
|
1167
|
-
var sFullPath =
|
|
1168
|
-
sNavPath = sFullPath.replace(sMainEntitySetPath
|
|
1182
|
+
if ("/".concat(sSelectOption.replaceAll(".", "/")).startsWith(sMainEntitySetPath)) {
|
|
1183
|
+
var sFullPath = "/".concat(sSelectOption).replaceAll(".", "/"),
|
|
1184
|
+
sNavPath = sFullPath.replace("".concat(sMainEntitySetPath, "/"), "");
|
|
1169
1185
|
aNavObjectNames = sNavPath.split("/");
|
|
1170
1186
|
}
|
|
1171
1187
|
|
|
@@ -1173,13 +1189,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1173
1189
|
var sPropertyName = aNavObjectNames[aNavObjectNames.length - 1]; // Material from SalesOrderManage._Item.Material
|
|
1174
1190
|
|
|
1175
1191
|
for (var i = 0; i < aNavObjectNames.length - 1; i++) {
|
|
1176
|
-
if (oMetaModel.getObject(sMainEntitySetPath
|
|
1177
|
-
sConditionPath = sConditionPath + aNavObjectNames[i]
|
|
1192
|
+
if (oMetaModel.getObject("".concat(sMainEntitySetPath, "/").concat(aNavObjectNames[i].replace("P_", ""))).$isCollection) {
|
|
1193
|
+
sConditionPath = "".concat(sConditionPath + aNavObjectNames[i], "*/"); // _Item*/ in case of 1:n cardinality
|
|
1178
1194
|
} else {
|
|
1179
|
-
sConditionPath = sConditionPath + aNavObjectNames[i]
|
|
1195
|
+
sConditionPath = "".concat(sConditionPath + aNavObjectNames[i], "/"); // _Item/ in case of 1:1 cardinality
|
|
1180
1196
|
}
|
|
1181
1197
|
|
|
1182
|
-
sMainEntitySetPath = sMainEntitySetPath
|
|
1198
|
+
sMainEntitySetPath = "".concat(sMainEntitySetPath, "/").concat(aNavObjectNames[i]);
|
|
1183
1199
|
}
|
|
1184
1200
|
|
|
1185
1201
|
var sNavPropertyPath = sFullContextPath.slice(0, sFullContextPath.lastIndexOf("/")),
|
|
@@ -1191,13 +1207,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1191
1207
|
sSelectOptionName = sPropertyName;
|
|
1192
1208
|
} else if (sPropertyName.startsWith("P_") && oValidProperties[sPropertyName.replace("P_", "")]) {
|
|
1193
1209
|
sSelectOptionName = sPropertyName.replace("P_", "");
|
|
1194
|
-
} else if (oValidProperties["P_"
|
|
1195
|
-
sSelectOptionName = "P_"
|
|
1210
|
+
} else if (oValidProperties["P_".concat(sPropertyName)] && aSelectOptionsPropertyNames.includes("P_".concat(sPropertyName))) {
|
|
1211
|
+
sSelectOptionName = "P_".concat(sPropertyName);
|
|
1196
1212
|
}
|
|
1197
1213
|
|
|
1198
|
-
if (sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {
|
|
1199
|
-
// if there is no SalesOrderManage._Item.Material yet in the oConditions
|
|
1200
|
-
return;
|
|
1214
|
+
if (sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {// if there is no SalesOrderManage._Item.Material yet in the oConditions
|
|
1201
1215
|
} else if (!sPropertyName.startsWith("P_") && oConditions[sConditionPath + sSelectOptionName]) {
|
|
1202
1216
|
delete oConditions[sConditionPath + sSelectOptionName];
|
|
1203
1217
|
addSelectOptionsToConditions(sNavPropertyPath, oSelectionVariant, sSelectOption, oConditions, sConditionPath, sSelectOptionName, oValidProperties, oMetaModel, false);
|
|
@@ -1237,7 +1251,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1237
1251
|
|
|
1238
1252
|
case "EndsWith":
|
|
1239
1253
|
oSelectOptionState.option = "CP";
|
|
1240
|
-
oSelectOptionState.low = "*"
|
|
1254
|
+
oSelectOptionState.low = "*".concat(oSelectOptionState.low);
|
|
1241
1255
|
break;
|
|
1242
1256
|
|
|
1243
1257
|
case "BT":
|
|
@@ -1281,7 +1295,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1281
1295
|
|
|
1282
1296
|
case "NotEndsWith":
|
|
1283
1297
|
oSelectOptionState.option = "CP";
|
|
1284
|
-
oSelectOptionState.low = "*"
|
|
1298
|
+
oSelectOptionState.low = "*".concat(oSelectOptionState.low);
|
|
1285
1299
|
oSelectOptionState.sign = "E";
|
|
1286
1300
|
break;
|
|
1287
1301
|
|
|
@@ -1311,7 +1325,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1311
1325
|
break;
|
|
1312
1326
|
|
|
1313
1327
|
default:
|
|
1314
|
-
Log.warning(sOperator
|
|
1328
|
+
Log.warning("".concat(sOperator, " is not supported. ").concat(sFilter, " could not be added to the navigation context"));
|
|
1315
1329
|
}
|
|
1316
1330
|
|
|
1317
1331
|
return oSelectOptionState;
|
|
@@ -1321,7 +1335,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1321
1335
|
var oFiltersWithoutConflict = mFilters.filterConditionsWithoutConflict ? mFilters.filterConditionsWithoutConflict : {};
|
|
1322
1336
|
var oTablePropertiesWithoutConflict = oTargetInfo.propertiesWithoutConflict ? oTargetInfo.propertiesWithoutConflict : {};
|
|
1323
1337
|
|
|
1324
|
-
var addFiltersToSelectionVariant = function (
|
|
1338
|
+
var addFiltersToSelectionVariant = function (selectionVariant, sFilterName, sPath) {
|
|
1325
1339
|
var aFilters = oFilterConditions[sFilterName];
|
|
1326
1340
|
|
|
1327
1341
|
for (var item in aFilters) {
|
|
@@ -1330,8 +1344,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1330
1344
|
sHigh = oFilter.values[1] && oFilter.values[1].toString() || null;
|
|
1331
1345
|
|
|
1332
1346
|
if (oFilter.operator === "TODAY" || oFilter.operator === "DATE") {
|
|
1333
|
-
var aFilter = oFilterInfo[0].aFilters.filter(function (
|
|
1334
|
-
return
|
|
1347
|
+
var aFilter = oFilterInfo[0].aFilters.filter(function (filter) {
|
|
1348
|
+
return filter.sPath === sFilterName;
|
|
1335
1349
|
});
|
|
1336
1350
|
sLow = aFilter[0].oValue1 || "";
|
|
1337
1351
|
sHigh = null;
|
|
@@ -1340,7 +1354,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1340
1354
|
var oSelectOptionValues = fnGetSignAndOption(oFilter.operator, sLow, sHigh);
|
|
1341
1355
|
|
|
1342
1356
|
if (oSelectOptionValues.option) {
|
|
1343
|
-
|
|
1357
|
+
selectionVariant.addSelectOption(sPath ? sPath : sFilterName, oSelectOptionValues.sign, oSelectOptionValues.option, oSelectOptionValues.low, oSelectOptionValues.high);
|
|
1344
1358
|
}
|
|
1345
1359
|
}
|
|
1346
1360
|
};
|
|
@@ -1400,13 +1414,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1400
1414
|
}
|
|
1401
1415
|
|
|
1402
1416
|
function getNonComputedVisibleFields(oMetaModel, sPath, oView) {
|
|
1403
|
-
var aTechnicalKeys = oMetaModel.getObject(sPath
|
|
1417
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sPath, "/")).$Key;
|
|
1404
1418
|
var aNonComputedVisibleFields = [];
|
|
1405
|
-
var
|
|
1419
|
+
var aImmutableVisibleFields = [];
|
|
1420
|
+
var oEntityType = oMetaModel.getObject("".concat(sPath, "/"));
|
|
1406
1421
|
|
|
1407
1422
|
for (var item in oEntityType) {
|
|
1408
1423
|
if (oEntityType[item].$kind && oEntityType[item].$kind === "Property") {
|
|
1409
|
-
var oAnnotations = oMetaModel.getObject(sPath
|
|
1424
|
+
var oAnnotations = oMetaModel.getObject("".concat(sPath, "/").concat(item, "@")) || {},
|
|
1410
1425
|
bIsKey = aTechnicalKeys.indexOf(item) > -1,
|
|
1411
1426
|
bIsImmutable = oAnnotations["@Org.OData.Core.V1.Immutable"],
|
|
1412
1427
|
bIsNonComputed = !oAnnotations["@Org.OData.Core.V1.Computed"],
|
|
@@ -1414,8 +1429,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1414
1429
|
bIsComputedDefaultValue = oAnnotations["@Org.OData.Core.V1.ComputedDefaultValue"],
|
|
1415
1430
|
bIsKeyComputedDefaultValueWithText = bIsKey && oEntityType[item].$Type === "Edm.Guid" ? bIsComputedDefaultValue && oAnnotations["@com.sap.vocabularies.Common.v1.Text"] : false;
|
|
1416
1431
|
|
|
1417
|
-
if ((
|
|
1432
|
+
if ((bIsKeyComputedDefaultValueWithText || bIsKey && oEntityType[item].$Type !== "Edm.Guid") && bIsNonComputed && bIsVisible) {
|
|
1418
1433
|
aNonComputedVisibleFields.push(item);
|
|
1434
|
+
} else if (bIsImmutable && bIsNonComputed && bIsVisible) {
|
|
1435
|
+
aImmutableVisibleFields.push(item);
|
|
1419
1436
|
}
|
|
1420
1437
|
|
|
1421
1438
|
if (!bIsNonComputed && bIsComputedDefaultValue && oView) {
|
|
@@ -1428,7 +1445,88 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1428
1445
|
}
|
|
1429
1446
|
}
|
|
1430
1447
|
|
|
1431
|
-
|
|
1448
|
+
var aRequiredProperties = CommonUtils.getRequiredPropertiesFromInsertRestrictions(sPath, oMetaModel);
|
|
1449
|
+
|
|
1450
|
+
if (aRequiredProperties.length) {
|
|
1451
|
+
aRequiredProperties.forEach(function (sProperty) {
|
|
1452
|
+
var oAnnotations = oMetaModel.getObject("".concat(sPath, "/").concat(sProperty, "@")),
|
|
1453
|
+
bIsVisible = !oAnnotations || !oAnnotations["@com.sap.vocabularies.UI.v1.Hidden"];
|
|
1454
|
+
|
|
1455
|
+
if (bIsVisible && aNonComputedVisibleFields.indexOf(sProperty) === -1 && aImmutableVisibleFields.indexOf(sProperty) === -1) {
|
|
1456
|
+
aNonComputedVisibleFields.push(sProperty);
|
|
1457
|
+
}
|
|
1458
|
+
});
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
return aNonComputedVisibleFields.concat(aImmutableVisibleFields);
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
function getRequiredProperties(sPath, oMetaModel) {
|
|
1465
|
+
var bCheckUpdateRestrictions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1466
|
+
var aPathParts = sPath.split("/");
|
|
1467
|
+
var aRequiredProperties = [];
|
|
1468
|
+
var aRequiredPropertiesWithPaths = [];
|
|
1469
|
+
var oEntitySetAnnotations = oMetaModel.getObject("".concat(sPath, "@"));
|
|
1470
|
+
|
|
1471
|
+
if (aPathParts.length > 2) {
|
|
1472
|
+
var sNavigationPath = aPathParts[aPathParts.length - 1];
|
|
1473
|
+
aPathParts.splice(-1, 1); // removing NavigationProperty from the end.
|
|
1474
|
+
|
|
1475
|
+
var sParentEntitySetPath = aPathParts.join("/");
|
|
1476
|
+
var oNavigationRestrictions = CommonUtils.getNavigationRestrictions(oMetaModel, sParentEntitySetPath, sNavigationPath);
|
|
1477
|
+
oEntitySetAnnotations = oMetaModel.getObject("".concat(sParentEntitySetPath, "/$NavigationPropertyBinding/").concat(sNavigationPath, "@"));
|
|
1478
|
+
|
|
1479
|
+
if (CommonUtils.hasRestrictedPropertiesInAnnotations(oNavigationRestrictions, true, bCheckUpdateRestrictions)) {
|
|
1480
|
+
aRequiredPropertiesWithPaths = bCheckUpdateRestrictions ? oNavigationRestrictions["UpdateRestrictions"].RequiredProperties : oNavigationRestrictions["InsertRestrictions"].RequiredProperties;
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
if ((!aRequiredPropertiesWithPaths || !aRequiredPropertiesWithPaths.length) && CommonUtils.hasRestrictedPropertiesInAnnotations(oEntitySetAnnotations, false, bCheckUpdateRestrictions)) {
|
|
1484
|
+
aRequiredPropertiesWithPaths = CommonUtils.getRequiredPropertiesFromAnnotations(oEntitySetAnnotations, bCheckUpdateRestrictions);
|
|
1485
|
+
}
|
|
1486
|
+
} else if (CommonUtils.hasRestrictedPropertiesInAnnotations(oEntitySetAnnotations, false, bCheckUpdateRestrictions)) {
|
|
1487
|
+
aRequiredPropertiesWithPaths = CommonUtils.getRequiredPropertiesFromAnnotations(oEntitySetAnnotations, bCheckUpdateRestrictions);
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
aRequiredPropertiesWithPaths.forEach(function (oRequiredProperty) {
|
|
1491
|
+
var sProperty = oRequiredProperty["$PropertyPath"];
|
|
1492
|
+
aRequiredProperties.push(sProperty);
|
|
1493
|
+
});
|
|
1494
|
+
return aRequiredProperties;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
function getRequiredPropertiesFromInsertRestrictions(sPath, oMetaModel) {
|
|
1498
|
+
return CommonUtils.getRequiredProperties(sPath, oMetaModel);
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
function getRequiredPropertiesFromUpdateRestrictions(sPath, oMetaModel) {
|
|
1502
|
+
return CommonUtils.getRequiredProperties(sPath, oMetaModel, true);
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
function getRequiredPropertiesFromAnnotations(oAnnotations) {
|
|
1506
|
+
var bCheckUpdateRestrictions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1507
|
+
|
|
1508
|
+
if (bCheckUpdateRestrictions) {
|
|
1509
|
+
return oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"].RequiredProperties;
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1512
|
+
return oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"].RequiredProperties;
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
function hasRestrictedPropertiesInAnnotations(oAnnotations) {
|
|
1516
|
+
var bIsNavigationRestrictions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
1517
|
+
var bCheckUpdateRestrictions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
1518
|
+
|
|
1519
|
+
if (bIsNavigationRestrictions) {
|
|
1520
|
+
if (bCheckUpdateRestrictions) {
|
|
1521
|
+
return oAnnotations && oAnnotations["UpdateRestrictions"] && oAnnotations["UpdateRestrictions"].RequiredProperties ? true : false;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
return oAnnotations && oAnnotations["InsertRestrictions"] && oAnnotations["InsertRestrictions"].RequiredProperties ? true : false;
|
|
1525
|
+
} else if (bCheckUpdateRestrictions) {
|
|
1526
|
+
return oAnnotations && oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"] && oAnnotations["@Org.OData.Capabilities.V1.UpdateRestrictions"].RequiredProperties ? true : false;
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
return oAnnotations && oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"] && oAnnotations["@Org.OData.Capabilities.V1.InsertRestrictions"].RequiredProperties ? true : false;
|
|
1432
1530
|
}
|
|
1433
1531
|
|
|
1434
1532
|
function setUserDefaults(oAppComponent, aParameters, oModel, bIsAction, bIsCreate, oActionDefaultValues) {
|
|
@@ -1439,7 +1537,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1439
1537
|
|
|
1440
1538
|
if (!oShellServices.hasUShell()) {
|
|
1441
1539
|
aParameters.forEach(function (oParameter) {
|
|
1442
|
-
var sPropertyName = bIsAction ? "/"
|
|
1540
|
+
var sPropertyName = bIsAction ? "/".concat(oParameter.$Name) : oParameter.getPath().slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
1443
1541
|
var sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
|
|
1444
1542
|
|
|
1445
1543
|
if (oActionDefaultValues && bIsCreate) {
|
|
@@ -1457,7 +1555,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1457
1555
|
var oData = oStartupAppState.getData() || {},
|
|
1458
1556
|
aExtendedParameters = oData.selectionVariant && oData.selectionVariant.SelectOptions || [];
|
|
1459
1557
|
aParameters.forEach(function (oParameter) {
|
|
1460
|
-
var sPropertyName = bIsAction ? "/"
|
|
1558
|
+
var sPropertyName = bIsAction ? "/".concat(oParameter.$Name) : oParameter.getPath().slice(oParameter.getPath().lastIndexOf("/") + 1);
|
|
1461
1559
|
var sParameterName = bIsAction ? sPropertyName.slice(1) : sPropertyName;
|
|
1462
1560
|
|
|
1463
1561
|
if (oActionDefaultValues && bIsCreate) {
|
|
@@ -1567,7 +1665,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1567
1665
|
semanticObjectMapping: aSemanticObjectMapping
|
|
1568
1666
|
};
|
|
1569
1667
|
} else {
|
|
1570
|
-
Log.error("Cross navigation outbound is configured without semantic object and action for "
|
|
1668
|
+
Log.error("Cross navigation outbound is configured without semantic object and action for ".concat(sOutbound));
|
|
1571
1669
|
}
|
|
1572
1670
|
}
|
|
1573
1671
|
}
|
|
@@ -1596,8 +1694,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1596
1694
|
|
|
1597
1695
|
function fnGetSemanticObjectsFromPath(oMetaModel, sPath) {
|
|
1598
1696
|
return new Promise(function (resolve) {
|
|
1599
|
-
var sSemanticObject = oMetaModel.getObject(sPath
|
|
1600
|
-
var aSemanticObjectUnavailableActions = oMetaModel.getObject(sPath
|
|
1697
|
+
var sSemanticObject = oMetaModel.getObject("".concat(sPath, "@com.sap.vocabularies.Common.v1.SemanticObject"));
|
|
1698
|
+
var aSemanticObjectUnavailableActions = oMetaModel.getObject("".concat(sPath, "@com.sap.vocabularies.Common.v1.SemanticObjectUnavailableActions"));
|
|
1601
1699
|
var aSemanticObjectForGetLinks = [{
|
|
1602
1700
|
semanticObject: sSemanticObject
|
|
1603
1701
|
}];
|
|
@@ -1790,7 +1888,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1790
1888
|
var sSemObjExpression;
|
|
1791
1889
|
var aSemanticObjectsResolved = aValues.filter(function (element) {
|
|
1792
1890
|
if (element.semanticObject !== undefined && element.semanticObject.semanticObject && typeof element.semanticObject.semanticObject === "object") {
|
|
1793
|
-
sSemObjExpression =
|
|
1891
|
+
sSemObjExpression = compileExpression(pathInModel(element.semanticObject.semanticObject.$Path));
|
|
1794
1892
|
element.semanticObject.semanticObject = sSemObjExpression;
|
|
1795
1893
|
element.semanticObjectForGetLinks[0].semanticObject = sSemObjExpression;
|
|
1796
1894
|
return true;
|
|
@@ -1862,7 +1960,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1862
1960
|
function getFilterRestrictionsByPath(sEntitySetPath, oMetaModel) {
|
|
1863
1961
|
var oRet = {},
|
|
1864
1962
|
FilterRestrictions = CommonUtils.FilterRestrictions,
|
|
1865
|
-
oFilterRestrictions = sEntitySetPath ? oMetaModel.getObject(sEntitySetPath
|
|
1963
|
+
oFilterRestrictions = sEntitySetPath ? oMetaModel.getObject("".concat(sEntitySetPath, "@Org.OData.Capabilities.V1.FilterRestrictions")) : {};
|
|
1866
1964
|
oRet[FilterRestrictions.REQUIRED_PROPERTIES] = getFilterRestrictions(oFilterRestrictions, FilterRestrictions.REQUIRED_PROPERTIES) || [];
|
|
1867
1965
|
oRet[FilterRestrictions.NON_FILTERABLE_PROPERTIES] = getFilterRestrictions(oFilterRestrictions, FilterRestrictions.NON_FILTERABLE_PROPERTIES) || []; //SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1868
1966
|
|
|
@@ -1920,11 +2018,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1920
2018
|
var parts = path.split("/").filter(Boolean),
|
|
1921
2019
|
propertyName = parts.pop(),
|
|
1922
2020
|
navigationPath = parts.join("/"),
|
|
1923
|
-
entitySet = navigationPath && metaModel.getObject("/"
|
|
2021
|
+
entitySet = navigationPath && metaModel.getObject("/".concat(navigationPath));
|
|
1924
2022
|
|
|
1925
2023
|
if ((entitySet === null || entitySet === void 0 ? void 0 : entitySet.$kind) === "Singleton") {
|
|
1926
2024
|
var singletonName = parts[parts.length - 1];
|
|
1927
|
-
return "/"
|
|
2025
|
+
return "/".concat(singletonName, "/").concat(propertyName);
|
|
1928
2026
|
}
|
|
1929
2027
|
|
|
1930
2028
|
return undefined;
|
|
@@ -1999,11 +2097,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
1999
2097
|
function fnOnStrictHandlingFailed(sGroupId, actionName, oModel, aMessages) {
|
|
2000
2098
|
var localI18nRef = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
2001
2099
|
sActionName = actionName,
|
|
2002
|
-
sCancelButtonTxt = localI18nRef.getText("
|
|
2100
|
+
sCancelButtonTxt = localI18nRef.getText("C_COMMON_DIALOG_CANCEL");
|
|
2003
2101
|
|
|
2004
2102
|
if (aMessages.length === 1) {
|
|
2005
|
-
var sMessage = aMessages[0].message
|
|
2006
|
-
|
|
2103
|
+
var sMessage = "".concat(aMessages[0].message, "\n").concat(localI18nRef.getText("PROCEED"));
|
|
2104
|
+
return new Promise(function (resolve) {
|
|
2007
2105
|
MessageBox.warning(sMessage, {
|
|
2008
2106
|
title: localI18nRef.getText("WARNING"),
|
|
2009
2107
|
actions: [sActionName, sCancelButtonTxt],
|
|
@@ -2018,7 +2116,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2018
2116
|
}
|
|
2019
2117
|
});
|
|
2020
2118
|
});
|
|
2021
|
-
return dialogPromise;
|
|
2022
2119
|
}
|
|
2023
2120
|
|
|
2024
2121
|
return new Promise(function (resolve) {
|
|
@@ -2068,7 +2165,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2068
2165
|
var headerInfoTitlePath = oControl.getParent().getTableDefinition().headerInfoTitle;
|
|
2069
2166
|
var oMetaModel = oControl && oControl.getModel().getMetaModel(),
|
|
2070
2167
|
sCurrentEntitySetName = oControl.data("metaPath");
|
|
2071
|
-
var aTechnicalKeys = oMetaModel.getObject(sCurrentEntitySetName
|
|
2168
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sCurrentEntitySetName, "/$Type/$Key"));
|
|
2072
2169
|
var aFilteredTechnicalKeys = [];
|
|
2073
2170
|
aTechnicalKeys.forEach(function (technicalKey) {
|
|
2074
2171
|
if (technicalKey !== "IsActiveEntity") {
|
|
@@ -2096,6 +2193,30 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2096
2193
|
return subtitleColumn;
|
|
2097
2194
|
}
|
|
2098
2195
|
|
|
2196
|
+
function getKeys(oMetaModel, sPath, sEntitySetName) {
|
|
2197
|
+
var sMetaPath = oMetaModel.getMetaPath(sPath);
|
|
2198
|
+
var aTechnicalKeys = oMetaModel.getObject("".concat(sMetaPath, "/$Type/$Key"));
|
|
2199
|
+
var sKey = "";
|
|
2200
|
+
var semanticKey = SemanticKeyHelper.getSemanticKeys(oMetaModel, sEntitySetName);
|
|
2201
|
+
|
|
2202
|
+
if (semanticKey !== undefined && semanticKey.length === 1) {
|
|
2203
|
+
sKey = semanticKey[0].$PropertyPath;
|
|
2204
|
+
} else if (aTechnicalKeys) {
|
|
2205
|
+
var aFilteredTechnicalKeys = [];
|
|
2206
|
+
aTechnicalKeys.forEach(function (technicalKey) {
|
|
2207
|
+
if (technicalKey !== "IsActiveEntity") {
|
|
2208
|
+
aFilteredTechnicalKeys.push(technicalKey);
|
|
2209
|
+
}
|
|
2210
|
+
});
|
|
2211
|
+
|
|
2212
|
+
if (aFilteredTechnicalKeys !== undefined && aFilteredTechnicalKeys.length === 1) {
|
|
2213
|
+
sKey = aFilteredTechnicalKeys[0];
|
|
2214
|
+
}
|
|
2215
|
+
}
|
|
2216
|
+
|
|
2217
|
+
return sKey;
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2099
2220
|
function getMessageStripText(view, aIgnoredLabels, oFilterBar, bIsChart, bIsSearchIgnored, sTabTitle, oResourceBundle, fnGetLocalizedText) {
|
|
2100
2221
|
var sText = "";
|
|
2101
2222
|
|
|
@@ -2110,11 +2231,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2110
2231
|
} else if (aIgnoredLabels.length === 1 && bIsDraftSupported) {
|
|
2111
2232
|
sText = oResourceBundle.getText("C_MULTIVIZ_CHART_IGNORED_FILTER_DRAFT_DATA");
|
|
2112
2233
|
} else {
|
|
2113
|
-
var sResource = "C_LR_MULTIVIZ_CHART_"
|
|
2234
|
+
var sResource = "C_LR_MULTIVIZ_CHART_".concat(aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI", "_IGNORED_FILTER_").concat(system.desktop ? "LARGE" : "SMALL");
|
|
2114
2235
|
sText = oResourceBundle.getText(sResource, [aIgnoredLabels.join(", ")]);
|
|
2115
2236
|
}
|
|
2116
2237
|
} else {
|
|
2117
|
-
var _sResource = "C_LR_MULTITABLES_"
|
|
2238
|
+
var _sResource = "C_LR_MULTITABLES_".concat(aIgnoredLabels.length === 1 ? "SINGLE" : "MULTI", "_IGNORED_FILTER_").concat(system.desktop ? "LARGE" : "SMALL"),
|
|
2118
2239
|
sLocalizedTableTitle = fnGetLocalizedText(sTabTitle, oFilterBar);
|
|
2119
2240
|
|
|
2120
2241
|
sText = oResourceBundle.getText(_sResource, [aIgnoredLabels.join(", "), sLocalizedTableTitle]);
|
|
@@ -2180,8 +2301,14 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/converters/he
|
|
|
2180
2301
|
fnOnStrictHandlingFailed: fnOnStrictHandlingFailed,
|
|
2181
2302
|
getSingletonPath: getSingletonPath,
|
|
2182
2303
|
getMessageStripText: getMessageStripText,
|
|
2183
|
-
getMessageColumn: getMessageColumn
|
|
2304
|
+
getMessageColumn: getMessageColumn,
|
|
2305
|
+
getRequiredPropertiesFromUpdateRestrictions: getRequiredPropertiesFromUpdateRestrictions,
|
|
2306
|
+
getRequiredPropertiesFromInsertRestrictions: getRequiredPropertiesFromInsertRestrictions,
|
|
2307
|
+
hasRestrictedPropertiesInAnnotations: hasRestrictedPropertiesInAnnotations,
|
|
2308
|
+
getRequiredPropertiesFromAnnotations: getRequiredPropertiesFromAnnotations,
|
|
2309
|
+
getRequiredProperties: getRequiredProperties,
|
|
2310
|
+
getKeys: getKeys
|
|
2184
2311
|
};
|
|
2185
2312
|
return CommonUtils;
|
|
2186
2313
|
}, false);
|
|
2187
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwiY29tcGlsZUJpbmRpbmciLCJub3QiLCJiaW5kaW5nRXhwcmVzc2lvbiIsInNQcm9wZXJ0eURhdGFUeXBlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsIm9Db250cm9sIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0SGFzaCIsInNIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwiX2dldFNPSW50ZW50cyIsIm9PYmplY3RQYWdlTGF5b3V0Iiwib1NlbWFudGljT2JqZWN0Iiwib1BhcmFtIiwib1NoZWxsU2VydmljZUhlbHBlciIsIkNvbW1vblV0aWxzIiwiZ2V0TGlua3MiLCJzZW1hbnRpY09iamVjdCIsInBhcmFtcyIsIl9jcmVhdGVNYXBwaW5ncyIsIm9NYXBwaW5nIiwiYVNPTWFwcGluZ3MiLCJhTWFwcGluZ0tleXMiLCJPYmplY3QiLCJrZXlzIiwib1NlbWFudGljTWFwcGluZyIsInB1c2giLCJfZ2V0UmVsYXRlZEFwcHNNZW51SXRlbXMiLCJhTGlua3MiLCJhRXhjbHVkZWRBY3Rpb25zIiwib1RhcmdldFBhcmFtcyIsImFJdGVtcyIsIm9MaW5rIiwic0ludGVudCIsImludGVudCIsInNBY3Rpb24iLCJ0ZXh0IiwidGFyZ2V0U2VtT2JqZWN0IiwidGFyZ2V0QWN0aW9uIiwidGFyZ2V0UGFyYW1zIiwiX2dldFJlbGF0ZWRJbnRlbnRzIiwib0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMiLCJvQmluZGluZ0NvbnRleHQiLCJhTWFuaWZlc3RTT0l0ZW1zIiwidW5hdmFpbGFibGVBY3Rpb25zIiwibWFwcGluZyIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsInVwZGF0ZVJlbGF0ZUFwcHNNb2RlbCIsIm9FbnRyeSIsImFTZW1LZXlzIiwib01ldGFQYXRoIiwic0N1cnJlbnRTZW1PYmoiLCJzQ3VycmVudEFjdGlvbiIsIm9TZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYVJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiaiIsInNTZW1LZXkiLCJ2YWx1ZSIsImFUZWNobmljYWxLZXlzIiwia2V5Iiwic09iaktleSIsIm9NYW5pZmVzdERhdGEiLCJnZXRUYXJnZXRWaWV3IiwiZ2V0Vmlld0RhdGEiLCJhZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwiYU1hbmlmZXN0U09LZXlzIiwidGhlbiIsImJpbmQiLCJjYXRjaCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwiZm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzIiwib1BhcnNlZFVybCIsInBhcnNlU2hlbGxIYXNoIiwiZG9jdW1lbnQiLCJhY3Rpb24iLCJhQW5ub3RhdGlvbnNTT0l0ZW1zIiwic0VudGl0eVR5cGVQYXRoIiwib0VudGl0eVNldEFubm90YXRpb25zIiwiX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMiLCJiSGFzRW50aXR5U2V0U08iLCJvRW50aXR5VHlwZUFubm90YXRpb25zIiwiYVVuYXZhaWxhYmxlQWN0aW9ucyIsImFNYXBwaW5ncyIsImNvbmNhdCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJvRW50aXR5QW5ub3RhdGlvbnMiLCJzQW5ub3RhdGlvbk1hcHBpbmdUZXJtIiwic0Fubm90YXRpb25BY3Rpb25UZXJtIiwic1F1YWxpZmllciIsImZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiZ2V0TW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvUGF0aCIsImdldFBhdGgiLCJnZXRNZXRhUGF0aCIsInNTZW1hbnRpY0tleVZvY2FidWxhcnkiLCJyZXF1ZXN0T2JqZWN0IiwiZm5GaXJlQnV0dG9uUHJlc3MiLCJvQnV0dG9uIiwiYUF1dGhvcml6ZWRUeXBlcyIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImdldFZpc2libGUiLCJnZXRFbmFibGVkIiwiZmlyZVByZXNzIiwiZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwic1ZhbHVlIiwiaXNBIiwib093bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsImdldFJvb3RDb250cm9sIiwiVmlldyIsImdldFBhcmVudCIsImlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZSIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJhQXR0cmlidXRlcyIsImFPdXRBdHRyaWJ1dGVzIiwic0VudGl0eVNldCIsImVudGl0eVNldCIsImNvbnRleHREYXRhIiwiYVByb3BlcnRpZXMiLCJzUHJvcCIsImFQcm9wZXJ0eUFubm90YXRpb25zIiwib0ZpZWxkQ29udHJvbCIsIl9mbkNoZWNrSXNNYXRjaCIsIm9PYmplY3QiLCJvS2V5c1RvQ2hlY2siLCJzS2V5IiwiZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCJvRmlsdGVyIiwib0VudGl0eVR5cGUiLCJvUHJvcGVydGllcyIsInRlc3QiLCIka2luZCIsImZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwiYU1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImZuR2V0SUJOQWN0aW9ucyIsImFJQk5BY3Rpb25zIiwiYUFjdGlvbnMiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEFjdGlvbiIsImRhdGEiLCJmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib1ZpZXciLCJvUGFyYW1zIiwiZm5HZXRMaW5rcyIsIm9EYXRhIiwiYUtleXMiLCJvSUJOQWN0aW9uIiwic1NlbWFudGljT2JqZWN0IiwiYUxpbmsiLCJzZXRWaXNpYmxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRnJhbWV3b3JrS2V5Iiwib1Jlc291cmNlQnVuZGxlIiwic0VudGl0eVNldE5hbWUiLCJzUmVzb3VyY2VLZXkiLCJiUmVzb3VyY2VLZXlFeGlzdHMiLCJfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzIiwiYUN1c3RvbUJ1bmRsZXMiLCJnZXRUZXh0IiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImhhc1RleHQiLCJnZXRBY3Rpb25QYXRoIiwiYlJldHVybk9ubHlQYXRoIiwic0FjdGlvbk5hbWUiLCJiQ2hlY2tTdGF0aWNWYWx1ZSIsInNFbnRpdHlUeXBlTmFtZSIsIiRUeXBlIiwic0VudGl0eU5hbWUiLCJnZXRFbnRpdHlTZXROYW1lIiwic0JpbmRpbmdQYXJhbWV0ZXIiLCJzRW50aXR5VHlwZSIsIm9FbnRpdHlDb250YWluZXIiLCJjb21wdXRlRGlzcGxheU1vZGUiLCJvUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9Db2xsZWN0aW9uQW5ub3RhdGlvbnMiLCJvVGV4dEFubm90YXRpb24iLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwiX2dldEVudGl0eVR5cGUiLCJfcmVxdWVzdE9iamVjdCIsIm9TZWxlY3RlZENvbnRleHQiLCJuQnJhY2tldEluZGV4Iiwic1RhcmdldFR5cGUiLCJzbGljZSIsInNDdXJyZW50VHlwZSIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0Iiwid2FybmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwiX3JlcXVlc3RQcm9wZXJ0eSIsInNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgiLCJvUHJvbWlzZSIsInJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eSIsInZQcm9wZXJ0eVZhbHVlIiwiX3NldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImFSZXF1ZXN0UHJvbWlzZXMiLCJhbGwiLCJhUmVzdWx0cyIsImFBcHBsaWNhYmxlQ29udGV4dHMiLCJhTm90QXBwbGljYWJsZUNvbnRleHRzIiwiYVJlc3VsdCIsIl9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJ0cmFjZSIsImFBcHBsaWNhYmxlIiwiYU5vdEFwcGxpY2FibGUiLCJzRHluYW1pY0FjdGlvblBhdGhQcmVmaXgiLCJvSW50ZXJuYWxNb2RlbCIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJhUHJvbWlzZXMiLCJiRW5hYmxlZCIsIm9Db250ZXh0RGF0YSIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXRPYmplY3RNYXBwaW5ncyIsImFTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwib0l0ZW0iLCJvTWFwcGluZ3MiLCJpdGVtcyIsInNMb2NhbFByb3BlcnR5Iiwic1NlbWFudGljT2JqZWN0UHJvcGVydHkiLCJfZ2V0RGVmYXVsdE9wZXJhdG9ycyIsInNQcm9wZXJ0eVR5cGUiLCJvRGF0YUNsYXNzIiwiVHlwZVV0aWwiLCJnZXREYXRhVHlwZUNsYXNzTmFtZSIsIm9CYXNlVHlwZSIsImdldEJhc2VUeXBlIiwiRmlsdGVyT3BlcmF0b3JVdGlsIiwiZ2V0T3BlcmF0b3JzRm9yVHlwZSIsIl9nZXRSZXN0cmljdGlvbnMiLCJhRGVmYXVsdE9wcyIsImFFeHByZXNzaW9uT3BzIiwiYU9wZXJhdG9ycyIsImZpbHRlciIsInNFbGVtZW50IiwidG9TdHJpbmciLCJnZXRTcGVjaWZpY0FsbG93ZWRFeHByZXNzaW9uIiwiYUV4cHJlc3Npb25zIiwiYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5IiwiQWxsb3dlZEV4cHJlc3Npb25zUHJpbyIsInNvcnQiLCJhIiwiYiIsImdldE9wZXJhdG9yc0ZvclByb3BlcnR5Iiwic1R5cGUiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJzU2V0dGluZ3MiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhRXF1YWxzT3BzIiwiYVNpbmdsZVJhbmdlT3BzIiwiYVNpbmdsZVJhbmdlRFRCYXNpY09wcyIsImFTaW5nbGVWYWx1ZURhdGVPcHMiLCJhQmFzaWNEYXRlVGltZU9wcyIsImFNdWx0aVJhbmdlT3BzIiwiYVNlYXJjaEV4cHJlc3Npb25PcHMiLCJhU2VtYW50aWNEYXRlT3BzRXh0IiwiU2VtYW50aWNEYXRlT3BlcmF0b3JzIiwiZ2V0U3VwcG9ydGVkT3BlcmF0aW9ucyIsImJTZW1hbnRpY0RhdGVSYW5nZSIsImFTZW1hbnRpY0RhdGVPcHMiLCJvU2V0dGluZ3MiLCJKU09OIiwicGFyc2UiLCJjdXN0b21EYXRhIiwib3BlcmF0b3JDb25maWd1cmF0aW9uIiwiZ2V0RmlsdGVyT3BlcmF0aW9ucyIsImdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMiLCJhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyIsInNPcGVyYXRvciIsImFEZWZhdWx0T3BlcmF0b3JzIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwic0FsbG93ZWRFeHByZXNzaW9uIiwic1Jlc3RyaWN0aW9ucyIsImFTaW5nbGVWYWx1ZU9wcyIsInNPcGVyYXRvcnMiLCJnZXRQYXJhbWV0ZXJJbmZvIiwic1BhcmFtZXRlckNvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJiUmVzdWx0Q29udGV4dCIsIm9QYXJhbWV0ZXJJbmZvIiwiY29udGV4dFBhdGgiLCJwYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zIiwib1Byb3BlcnR5TWV0YWRhdGEiLCJhVmFsaWRPcGVyYXRvcnMiLCJhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMiLCJvU2VsZWN0T3B0aW9uIiwib0NvbmRpdGlvbiIsImdldENvbmRpdGlvbnMiLCJvcGVyYXRvciIsImFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMiLCJvU2VsZWN0aW9uVmFyaWFudCIsInNTZWxlY3RPcHRpb25Qcm9wIiwib0NvbmRpdGlvbnMiLCJzQ29uZGl0aW9uUGF0aCIsInNDb25kaXRpb25Qcm9wIiwib1ZhbGlkUHJvcGVydGllcyIsImlzUGFyYW1ldGVyIiwiYUNvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9ucyIsImdldFNlbGVjdE9wdGlvbiIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFNZXRhZGF0UHJvcGVydGllcyIsIm9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMiLCJiSGFzUGFyYW1ldGVycyIsImFNZXRhZGF0YVBhcmFtZXRlcnMiLCJzTWV0YWRhdGFQYXJhbWV0ZXIiLCJzU2VsZWN0T3B0aW9uTmFtZSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsInNNZXRhZGF0YVByb3BlcnR5Iiwic1NlbGVjdE9wdGlvbiIsInNGdWxsQ29udGV4dFBhdGgiLCJyZXBsYWNlQWxsIiwiX2NyZWF0ZUNvbmRpdGlvbnNGb3JOYXZQcm9wZXJ0aWVzIiwic01haW5FbnRpdHlTZXRQYXRoIiwiYU5hdk9iamVjdE5hbWVzIiwic05hdlBhdGgiLCJzUHJvcGVydHlOYW1lIiwiJGlzQ29sbGVjdGlvbiIsInNOYXZQcm9wZXJ0eVBhdGgiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIm1QYWdlQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJvTmF2aWdhdGlvblNlcnZpY2UiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwiYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQiLCJtRmlsdGVycyIsIm9UYXJnZXRJbmZvIiwib0ZpbHRlckluZm8iLCJzRmlsdGVyIiwic0xvdyIsInNIaWdoIiwiZm5HZXRTaWduQW5kT3B0aW9uIiwic0xvd1ZhbHVlIiwic0hpZ2hWYWx1ZSIsIm9TZWxlY3RPcHRpb25TdGF0ZSIsIm9wdGlvbiIsInNpZ24iLCJsb3ciLCJoaWdoIiwib0ZpbHRlckNvbmRpdGlvbnMiLCJmaWx0ZXJDb25kaXRpb25zIiwib0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QiLCJmaWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0Iiwib1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCIsInByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50Iiwic0ZpbHRlck5hbWUiLCJhRmlsdGVycyIsInZhbHVlcyIsImFGaWx0ZXIiLCJvVmFsdWUxIiwib1NlbGVjdE9wdGlvblZhbHVlcyIsImFkZFNlbGVjdE9wdGlvbiIsImlzU3RpY2t5RWRpdE1vZGUiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJiVUlFZGl0YWJsZSIsImFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3kiLCJvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIiwiYVNWT3B0aW9uIiwiYURlZmF1bHRTVk9wdGlvbiIsImRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbiIsInNTaWduIiwic09wdGlvbiIsImdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyIsIiRLZXkiLCJhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwib0Fubm90YXRpb25zIiwiYklzS2V5IiwiYklzSW1tdXRhYmxlIiwiYklzTm9uQ29tcHV0ZWQiLCJiSXNWaXNpYmxlIiwiYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUiLCJiSXNLZXlDb21wdXRlZERlZmF1bHRWYWx1ZVdpdGhUZXh0Iiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJzTWVzc2FnZSIsImFkZElzc3VlIiwiSXNzdWVDYXRlZ29yeSIsIkFubm90YXRpb24iLCJJc3N1ZVNldmVyaXR5IiwiTWVkaXVtIiwiSXNzdWVDYXRlZ29yeVR5cGUiLCJBbm5vdGF0aW9ucyIsIklnbm9yZWRBbm5vdGF0aW9uIiwic2V0VXNlckRlZmF1bHRzIiwiYVBhcmFtZXRlcnMiLCJiSXNBY3Rpb24iLCJiSXNDcmVhdGUiLCJvQWN0aW9uRGVmYXVsdFZhbHVlcyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwib1NoZWxsU2VydmljZXMiLCJoYXNVU2hlbGwiLCJvUGFyYW1ldGVyIiwiJE5hbWUiLCJzUGFyYW1ldGVyTmFtZSIsImdldFN0YXJ0dXBBcHBTdGF0ZSIsIm9TdGFydHVwQXBwU3RhdGUiLCJnZXREYXRhIiwiYUV4dGVuZGVkUGFyYW1ldGVycyIsInNlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3RPcHRpb25zIiwib0V4dGVuZGVkUGFyYW1ldGVyIiwiUHJvcGVydHlOYW1lIiwib1JhbmdlIiwiUmFuZ2VzIiwiU2lnbiIsIk9wdGlvbiIsIkxvdyIsImdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUiLCJvSW5ib3VuZFBhcmFtZXRlcnMiLCJvSW5ib3VuZHMiLCJhQ3JlYXRlUGFyYW1ldGVycyIsInNQYXJhbWV0ZXIiLCJ1c2VGb3JDcmVhdGUiLCJvUmV0Iiwic0NyZWF0ZVBhcmFtZXRlciIsImFWYWx1ZXMiLCJjcmVhdGUiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvT3V0Ym91bmQiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwicGFyYW1ldGVycyIsInNQYXJhbSIsImZvcm1hdCIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsIm9WaWV3RGF0YSIsIm9Dcm9zc05hdiIsIm9IZWFkZXJGYWNldEl0ZW1zIiwic0lkIiwib0NvbnRyb2xDb25maWciLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsIm5hdmlnYXRpb24iLCJ0YXJnZXRPdXRib3VuZCIsIm91dGJvdW5kIiwic091dGJvdW5kIiwiZ2VuZXJhdGUiLCJzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwidk1hcHBpbmdzIiwicmVtb3ZlU2VsZWN0T3B0aW9uIiwibWFzc0FkZFNlbGVjdE9wdGlvbiIsImZuR2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyIsInNlbWFudGljT2JqZWN0UGF0aCIsInNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsIiwiYUdldExpbmtzUHJvbWlzZXMiLCJhU2VtYW50aWNPYmplY3RzIiwic0N1cnJlbnRIYXNoIiwiX29MaW5rIiwiX3NMaW5rSW50ZW50QWN0aW9uIiwiYUZpbmFsTGlua3MiLCJvRmluYWxTZW1hbnRpY09iamVjdHMiLCJiSW50ZW50SGFzQWN0aW9ucyIsImsiLCJvVG1wIiwic0FsdGVybmF0ZVBhdGgiLCJoYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJoYXNUYXJnZXRzIiwiaUxpbmtDb3VudCIsIkhhc1RhcmdldHMiLCJIYXNUYXJnZXRzTm90RmlsdGVyZWQiLCJhc3NpZ24iLCJzU2VtYW50aWNPYmplY3ROYW1lIiwibWVyZ2VPYmplY3RzIiwiZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCIsImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9Db250cm9sbGVyIiwic1BhZ2VNb2RlbCIsIl9mbmZpbmRWYWx1ZXNIZWxwZXIiLCJvYmoiLCJsaXN0IiwiQXJyYXkiLCJjaGlsZHJlbiIsIl9mbmZpbmRWYWx1ZXMiLCJfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMiLCJhU2VtYW50aWNPYmplY3RQYXRoIiwiZ2V0VmlldyIsImFTZW1hbnRpY09iamVjdHNQcm9taXNlcyIsIm9Db21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudCIsIm9QYWdlTW9kZWwiLCJzdHJpbmdpZnkiLCJfZ2V0T2JqZWN0IiwiYVNlbWFudGljT2JqZWN0c0ZvdW5kIiwiYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzIiwiX29TZW1hbnRpY09iamVjdCIsImdldFNlbWFudGljT2JqZWN0UHJvbWlzZSIsInNTZW1PYmpFeHByZXNzaW9uIiwiYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkIiwiZWxlbWVudCIsIiRQYXRoIiwiZ2V0TGlua3NXaXRoQ2FjaGUiLCJ1cGRhdGVTZW1hbnRpY1RhcmdldHMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbiIsInNSZXN0cmljdGlvbiIsIlJFUVVJUkVEX1BST1BFUlRJRVMiLCJOT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTIiwiYVByb3BzIiwibWFwIiwib1Byb3BlcnR5IiwiQUxMT1dFRF9FWFBSRVNTSU9OUyIsIm1BbGxvd2VkRXhwcmVzc2lvbnMiLCJGaWx0ZXJFeHByZXNzaW9uUmVzdHJpY3Rpb25zIiwiUHJvcGVydHkiLCJBbGxvd2VkRXhwcmVzc2lvbnMiLCJhUGF0aFBhcnRzIiwic1BhcmVudEVudGl0eVNldFBhdGgiLCJvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50Iiwic0ZyYWdtZW50TmFtZSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm9PcHRpb25zIiwib01vZGlmaWVyIiwidmlldyIsIm9GcmFnbWVudCIsInRhcmdldHMiLCJsb2FkTWFjcm9MaWJyYXJ5IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsIlhNTFRlbXBsYXRlUHJvY2Vzc29yIiwibG9hZFRlbXBsYXRlIiwibmFtZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaXNYTUwiLCJGcmFnbWVudCIsImxvYWQiLCJpZCIsImRlZmluaXRpb24iLCJjb250cm9sbGVyIiwiZ2V0U2luZ2xldG9uUGF0aCIsIm1ldGFNb2RlbCIsInBhcnRzIiwiQm9vbGVhbiIsInByb3BlcnR5TmFtZSIsInBvcCIsIm5hdmlnYXRpb25QYXRoIiwic2luZ2xldG9uTmFtZSIsIm1vZGVsIiwicmVzb2x2ZWRQYXRoIiwicHJvcGVydHlCaW5kaW5nIiwiYmluZFByb3BlcnR5IiwicmVxdWVzdFZhbHVlIiwiYWRkRXZlbnRUb0JpbmRpbmdJbmZvIiwic0V2ZW50TmFtZSIsImZIYW5kbGVyIiwib0JpbmRpbmdJbmZvIiwic2V0QmluZGluZ0luZm8iLCJldmVudHMiLCJmT3JpZ2luYWxIYW5kbGVyIiwiYXJncyIsImFwcGx5IiwiaW5uZXJDaGFydEJvdW5kIiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiX2dldENoYXJ0IiwiZ2V0QmluZGluZ0luZm8iLCJzRXJyb3IiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQiLCJzR3JvdXBJZCIsImFjdGlvbk5hbWUiLCJhTWVzc2FnZXMiLCJsb2NhbEkxOG5SZWYiLCJzQ2FuY2VsQnV0dG9uVHh0IiwibWVzc2FnZSIsImRpYWxvZ1Byb21pc2UiLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJzdWJtaXRCYXRjaCIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJzZXREYXRhIiwiYlN0cmljdEhhbmRsaW5nRmxvdyIsIm9NZXNzYWdlT2JqZWN0IiwibWVzc2FnZUhhbmRsaW5nIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib0RpYWxvZyIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJvTWVzc2FnZVZpZXciLCJzdGF0ZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRMZWZ0Iiwib0JhY2tCdXR0b24iLCJjb250ZW50TWlkZGxlIiwiVGl0bGUiLCJjb250ZW50SGVpZ2h0IiwiY29udGVudFdpZHRoIiwidmVydGljYWxTY3JvbGxpbmciLCJzZXRCZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiY2xvc2UiLCJ0eXBlIiwic2V0RW5kQnV0dG9uIiwib3BlbiIsImdldE1lc3NhZ2VDb2x1bW4iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1RpdGxlIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyIsInRlY2huaWNhbEtleSIsInNlbWFudGljS2V5Q29sdW1ucyIsInNlbWFudGljS2V5cyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwib0NvbHVtbiIsImNvbHVtblBhdGhTcGxpdCIsImdldElkIiwic3VidGl0bGVDb2x1bW4iLCJnZXRNZXNzYWdlU3RyaXBUZXh0IiwiYUlnbm9yZWRMYWJlbHMiLCJvRmlsdGVyQmFyIiwiYklzQ2hhcnQiLCJiSXNTZWFyY2hJZ25vcmVkIiwic1RhYlRpdGxlIiwiZm5HZXRMb2NhbGl6ZWRUZXh0Iiwic1RleHQiLCJvQ2hhcnQiLCJnZXRDb250cm9sbGVyIiwiZ2V0Q2hhcnRDb250cm9sIiwiYklzRHJhZnRTdXBwb3J0ZWQiLCJvTWFjcm9SZXNvdXJjZUJ1bmRsZSIsInNSZXNvdXJjZSIsInN5c3RlbSIsImRlc2t0b3AiLCJzTG9jYWxpemVkVGFibGVUaXRsZSIsImZpcmVCdXR0b25QcmVzcyIsImhhc1RyYW5zaWVudENvbnRleHQiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJyZXNvbHZlU3RyaW5ndG9Cb29sZWFuIiwiZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzIiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJnZXRJQk5BY3Rpb25zIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFB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LGtCQUFrQixFQUFFO0FBQ25Cb2lCLE1BQUFBLG1CQUFtQixFQUFFLG9CQURGO0FBRW5CQyxNQUFBQSx5QkFBeUIsRUFBRSx5QkFGUjtBQUduQkksTUFBQUEsbUJBQW1CLEVBQUU7QUFIRixLQS9DRDtBQW9EbkJ0UixJQUFBQSxzQkFBc0IsRUFBRSxDQUFDLGFBQUQsRUFBZ0IsWUFBaEIsRUFBOEIsYUFBOUIsRUFBNkMsWUFBN0MsRUFBMkQsa0JBQTNELEVBQStFLDhCQUEvRSxDQXBETDtBQXFEbkI5VSxJQUFBQSxtQkFBbUIsRUFBRUEsbUJBckRGO0FBc0RuQitwQixJQUFBQSx3QkFBd0IsRUFBRUEsd0JBdERQO0FBdURuQjlCLElBQUFBLGdCQUFnQixFQUFFQSxnQkF2REM7QUF3RG5CeUYsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQXhERjtBQXlEbkJoQixJQUFBQSxnQkFBZ0IsRUFBRUE7QUF6REMsR0FBcEI7U0E0RGVubkIsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgSXNzdWVDYXRlZ29yeSwgSXNzdWVDYXRlZ29yeVR5cGUsIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHtcblx0QmluZGluZ0V4cHJlc3Npb24sXG5cdGJpbmRpbmdFeHByZXNzaW9uLFxuXHRjb21waWxlQmluZGluZyxcblx0Y29uc3RhbnQsXG5cdG5vdCxcblx0dHJhbnNmb3JtUmVjdXJzaXZlbHlcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljRGF0ZU9wZXJhdG9ycyBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0RhdGVPcGVyYXRvcnNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBCYXIgZnJvbSBcInNhcC9tL0JhclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvclV0aWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0ZpbHRlck9wZXJhdG9yVXRpbFwiO1xuaW1wb3J0IFR5cGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVVdGlsXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldENvbmRpdGlvbnMgfSBmcm9tIFwiLi90ZW1wbGF0aW5nL0ZpbHRlckhlbHBlclwiO1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlYXJjaFRlcm0oc1NlYXJjaFRlcm06IHN0cmluZykge1xuXHRpZiAoIXNTZWFyY2hUZXJtKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHVybiBzU2VhcmNoVGVybVxuXHRcdC5yZXBsYWNlKC9cIi9nLCBcIiBcIilcblx0XHQuc3BsaXQoL1xccysvKVxuXHRcdC5yZWR1Y2UoZnVuY3Rpb24gKHNOb3JtYWxpemVkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNDdXJyZW50V29yZDogc3RyaW5nKSB7XG5cdFx0XHRpZiAoc0N1cnJlbnRXb3JkICE9PSBcIlwiKSB7XG5cdFx0XHRcdHNOb3JtYWxpemVkID0gKHNOb3JtYWxpemVkID8gc05vcm1hbGl6ZWQgKyBcIiBcIiA6IFwiXCIpICsgJ1wiJyArIHNDdXJyZW50V29yZCArICdcIic7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gc05vcm1hbGl6ZWQ7XG5cdFx0fSwgdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcGVydHlEYXRhVHlwZShvTmF2aWdhdGlvbkNvbnRleHQ6IGFueSkge1xuXHRsZXQgc0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJFR5cGVcIik7XG5cdC8vIGlmICRraW5kIGV4aXN0cywgaXQncyBub3QgYSBEYXRhRmllbGQgYW5kIHdlIGhhdmUgdGhlIGZpbmFsIHR5cGUgYWxyZWFkeVxuXHRpZiAoIW9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIiRraW5kXCIpKSB7XG5cdFx0c3dpdGNoIChzRGF0YVR5cGUpIHtcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhVcmxcIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aEFjdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb25zdCBzQW5ub3RhdGlvblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpO1xuXHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvZm4vJFBhdGgvJFR5cGVcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJWYWx1ZS8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufVxuZnVuY3Rpb24gZm5IYXNUcmFuc2llbnRDb250ZXh0cyhvTGlzdEJpbmRpbmc6IGFueSkge1xuXHRsZXQgYkhhc1RyYW5zaWVudENvbnRleHRzID0gZmFsc2U7XG5cdGlmIChvTGlzdEJpbmRpbmcpIHtcblx0XHRvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdFx0Ykhhc1RyYW5zaWVudENvbnRleHRzID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYkhhc1RyYW5zaWVudENvbnRleHRzO1xufVxuZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdHJpY3Rpb25zKHNGdWxsUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBhTmF2aWdhdGlvblBhcnRzID0gc0Z1bGxQYXRoLnNwbGl0KFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiKTtcblx0Zm9yIChsZXQgc1BhdGggPSBhTmF2aWdhdGlvblBhcnRzWzBdOyBpIDwgYU5hdmlnYXRpb25QYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01ldGFNb2RlbCwgc1BhdGgsIGFOYXZpZ2F0aW9uUGFydHNbaSArIDFdKTtcblx0XHRpZiAob05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnNbXCJTZWFyY2hSZXN0cmljdGlvbnNcIl0pIHtcblx0XHRcdHJldHVybiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXTtcblx0XHR9XG5cdFx0c1BhdGggPSBzUGF0aCArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgYU5hdmlnYXRpb25QYXJ0c1tpXTtcblx0fVxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5TZWFyY2hSZXN0cmljdGlvbnNcIik7XG59XG5mdW5jdGlvbiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzTmF2aWdhdGlvblBhdGg6IGFueSkge1xuXHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNcIik7XG5cdGNvbnN0IGFSZXN0cmljdGVkUHJvcGVydGllcyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLlJlc3RyaWN0ZWRQcm9wZXJ0aWVzO1xuXHRyZXR1cm4gKFxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcyAmJlxuXHRcdGFSZXN0cmljdGVkUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUmVzdHJpY3RlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdG9SZXN0cmljdGVkUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkgJiZcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eS5OYXZpZ2F0aW9uUHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0KTtcblx0XHR9KVxuXHQpO1xufVxuZnVuY3Rpb24gX2lzSW5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc0NvbnRleHRQYXRoOiBhbnkpIHtcblx0bGV0IGJJc05vdEZpbHRlcmFibGUgPSBmYWxzZTtcblx0Y29uc3Qgb0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIik7XG5cdGlmIChvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGJJc05vdEZpbHRlcmFibGUgPSBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IHNFbnRpdHlTZXRQYXRoICsgXCIvXCIgKyBzQ29udGV4UGF0aCxcblx0XHRhRVNQYXJ0cyA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDAsIDIpLFxuXHRcdGFDb250ZXh0ID0gc0Z1bGxQYXRoLnNwbGl0KFwiL1wiKS5zcGxpY2UoMik7XG5cdGxldCBiSXNOb3RGaWx0ZXJhYmxlID0gZmFsc2UsXG5cdFx0c0NvbnRleHQgPSBcIlwiO1xuXG5cdHNFbnRpdHlTZXRQYXRoID0gYUVTUGFydHMuam9pbihcIi9cIik7XG5cblx0YklzTm90RmlsdGVyYWJsZSA9IGFDb250ZXh0LnNvbWUoZnVuY3Rpb24gKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlciwgYXJyYXk6IHN0cmluZ1tdKSB7XG5cdFx0aWYgKHNDb250ZXh0Lmxlbmd0aCA+IDApIHtcblx0XHRcdHNDb250ZXh0ICs9IFwiL1wiICsgaXRlbTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbnRleHQgPSBpdGVtO1xuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDIpIHtcblx0XHRcdC8vIEluIGNhc2Ugb2YgXCIvQ3VzdG9tZXIvU2V0L1Byb3BlcnR5XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIGl0ZW0pO1xuXHRcdFx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLkZpbHRlclJlc3RyaWN0aW9ucztcblx0XHRcdGNvbnN0IGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcztcblx0XHRcdGNvbnN0IHNUYXJnZXRQcm9wZXJ0eVBhdGggPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzICYmXG5cdFx0XHRcdGFOb25GaWx0ZXJhYmxlUHJvcGVydGllcy5maW5kKGZ1bmN0aW9uIChvUHJvcGVydHlQYXRoOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5UGF0aC4kUHJvcGVydHlQYXRoID09PSBzVGFyZ2V0UHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoaW5kZXggPT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcblx0XHRcdC8vbGFzdCBwYXRoIHNlZ21lbnRcblx0XHRcdGJJc05vdEZpbHRlcmFibGUgPSBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbCwgc0VudGl0eVNldFBhdGgsIHNDb250ZXh0KTtcblx0XHR9IGVsc2UgaWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy9cIiArIGl0ZW0pKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdFx0c0NvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdHNFbnRpdHlTZXRQYXRoID0gXCIvXCIgKyBvTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIgKyBpdGVtKTtcblx0XHR9XG5cdFx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGUgPT09IHRydWU7XG5cdH0pO1xuXHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZTtcbn1cbi8vIFRPRE8gY2hlY2sgdXNlZCBwbGFjZXMgYW5kIHJld29yayB0aGlzXG5mdW5jdGlvbiBpc1Byb3BlcnR5RmlsdGVyYWJsZShcblx0b01vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0c0VudGl0eVNldFBhdGg6IHN0cmluZyxcblx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdGJTa2lwSGlkZGVuRmlsdGVyPzogYm9vbGVhblxuKTogYm9vbGVhbiB8IEJpbmRpbmdFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAodHlwZW9mIHNQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInNQcm9wZXJ0eSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0fVxuXHRsZXQgYklzRmlsdGVyYWJsZTtcblxuXHQvLyBQYXJhbWV0ZXJzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBmaWx0ZXJmaWVsZHNcblx0aWYgKG9Nb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGggKyBcIi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlJlc3VsdENvbnRleHRcIikgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGNvbnN0IG9OYXZpZ2F0aW9uQ29udGV4dCA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRW50aXR5U2V0UGF0aCArIFwiL1wiICsgc1Byb3BlcnR5KSBhcyBDb250ZXh0O1xuXG5cdGlmIChiU2tpcEhpZGRlbkZpbHRlciA9PT0gdW5kZWZpbmVkIHx8ICFiU2tpcEhpZGRlbkZpbHRlcikge1xuXHRcdGlmIChvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGNvbnN0IHNIaWRkZW5QYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbi8kUGF0aFwiKTtcblx0XHRpZiAoc0hpZGRlblBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlQmluZGluZyhub3QoYmluZGluZ0V4cHJlc3Npb24oc0hpZGRlblBhdGgpKSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFiU2tpcEhpZGRlbkZpbHRlciAmJiBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuRmlsdGVyXCIpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggPT09IDIgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpIDwgMCkge1xuXHRcdC8vIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gaW4gZW50aXR5U2V0IHBhdGggYW5kIHByb3BlcnR5IHBhdGhcblx0XHRiSXNGaWx0ZXJhYmxlID0gIV9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fSBlbHNlIHtcblx0XHRiSXNGaWx0ZXJhYmxlID0gIV9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZShvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzUHJvcGVydHkpO1xuXHR9XG5cdC8vIGNoZWNrIGlmIHR5cGUgY2FuIGJlIHVzZWQgZm9yIGZpbHRlcmluZ1xuXHRpZiAoYklzRmlsdGVyYWJsZSAmJiBvTmF2aWdhdGlvbkNvbnRleHQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlEYXRhVHlwZSA9IGdldFByb3BlcnR5RGF0YVR5cGUob05hdmlnYXRpb25Db250ZXh0KTtcblx0XHRpZiAoc1Byb3BlcnR5RGF0YVR5cGUpIHtcblx0XHRcdGJJc0ZpbHRlcmFibGUgPSBhVmFsaWRUeXBlcy5pbmRleE9mKHNQcm9wZXJ0eURhdGFUeXBlKSAhPT0gLTE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJJc0ZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYklzRmlsdGVyYWJsZTtcbn1cbmZ1bmN0aW9uIGdldFNoZWxsU2VydmljZXMob0NvbnRyb2w6IGFueSkge1xuXHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG59XG5mdW5jdGlvbiBnZXRIYXNoKCkge1xuXHRjb25zdCBzSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRyZXR1cm4gc0hhc2guc3BsaXQoXCImXCIpWzBdO1xufVxuZnVuY3Rpb24gX2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dDogYW55LCBvU2VtYW50aWNPYmplY3Q6IGFueSwgb1BhcmFtOiBhbnkpIHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob09iamVjdFBhZ2VMYXlvdXQpO1xuXHRyZXR1cm4gb1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rcyh7XG5cdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRwYXJhbXM6IG9QYXJhbVxuXHR9KTtcbn1cbi8vIFRPLURPIGFkZCB0aGlzIGFzIHBhcnQgb2YgYXBwbHlTZW1hbnRpY09iamVjdG1hcHBpbmdzIGxvZ2ljIGluIEludGVudEJhc2VkbmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuZnVuY3Rpb24gX2NyZWF0ZU1hcHBpbmdzKG9NYXBwaW5nOiBhbnkpIHtcblx0Y29uc3QgYVNPTWFwcGluZ3MgPSBbXTtcblx0Y29uc3QgYU1hcHBpbmdLZXlzID0gT2JqZWN0LmtleXMob01hcHBpbmcpO1xuXHRsZXQgb1NlbWFudGljTWFwcGluZztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTWFwcGluZ0tleXMubGVuZ3RoOyBpKyspIHtcblx0XHRvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IGFNYXBwaW5nS2V5c1tpXVxuXHRcdFx0fSxcblx0XHRcdFwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiOiBvTWFwcGluZ1thTWFwcGluZ0tleXNbaV1dXG5cdFx0fTtcblx0XHRhU09NYXBwaW5ncy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHR9XG5cblx0cmV0dXJuIGFTT01hcHBpbmdzO1xufVxuLyoqXG4gKiBAcGFyYW0gYUxpbmtzXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rczogYW55LCBhRXhjbHVkZWRBY3Rpb25zOiBhbnksIG9UYXJnZXRQYXJhbXM6IGFueSwgYUl0ZW1zOiBhbnkpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBvTGluayA9IGFMaW5rc1tpXTtcblx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKGFFeGNsdWRlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucy5pbmRleE9mKHNBY3Rpb24pID09PSAtMSkge1xuXHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbi8qKlxuICogQHBhcmFtIG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0XG4gKiBAcGFyYW0gYU1hbmlmZXN0U09JdGVtc1xuICogQHBhcmFtIGFMaW5rc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHMob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IGFueSwgb0JpbmRpbmdDb250ZXh0OiBhbnksIGFNYW5pZmVzdFNPSXRlbXM6IGFueSwgYUxpbmtzOiBhbnkpIHtcblx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMpO1xuXHR9XG59XG5mdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdHRoaXM6IGFueSxcblx0b0JpbmRpbmdDb250ZXh0OiBhbnksXG5cdG9FbnRyeTogYW55LFxuXHRvT2JqZWN0UGFnZUxheW91dDogYW55LFxuXHRhU2VtS2V5czogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9NZXRhUGF0aDogYW55XG4pIHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IGdldFNoZWxsU2VydmljZXMob09iamVjdFBhZ2VMYXlvdXQpO1xuXHRjb25zdCBvUGFyYW06IGFueSA9IHt9O1xuXHRsZXQgc0N1cnJlbnRTZW1PYmogPSBcIlwiLFxuXHRcdHNDdXJyZW50QWN0aW9uID0gXCJcIjtcblx0bGV0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xuXHRsZXQgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogYW55W10gPSBbXTtcblxuXHRpZiAob0VudHJ5KSB7XG5cdFx0aWYgKGFTZW1LZXlzICYmIGFTZW1LZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbUtleXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0Y29uc3Qgc1NlbUtleSA9IGFTZW1LZXlzW2pdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmICghb1BhcmFtW3NTZW1LZXldKSB7XG5cdFx0XHRcdFx0b1BhcmFtW3NTZW1LZXldID0geyB2YWx1ZTogb0VudHJ5W3NTZW1LZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qob01ldGFQYXRoICsgXCIvJFR5cGUvJEtleVwiKTtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGFUZWNobmljYWxLZXlzKSB7XG5cdFx0XHRcdGNvbnN0IHNPYmpLZXkgPSBhVGVjaG5pY2FsS2V5c1trZXldO1xuXHRcdFx0XHRpZiAoIW9QYXJhbVtzT2JqS2V5XSkge1xuXHRcdFx0XHRcdG9QYXJhbVtzT2JqS2V5XSA9IHsgdmFsdWU6IG9FbnRyeVtzT2JqS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIExvZ2ljIHRvIHJlYWQgYWRkaXRpb25hbCBTTyBmcm9tIG1hbmlmZXN0IGFuZCB1cGRhdGVkIHJlbGF0ZWRhcHBzIG1vZGVsXG5cblx0Y29uc3Qgb01hbmlmZXN0RGF0YSA9IGdldFRhcmdldFZpZXcob09iamVjdFBhZ2VMYXlvdXQpLmdldFZpZXdEYXRhKCk7XG5cdGNvbnN0IGFNYW5pZmVzdFNPSXRlbXM6IGFueVtdID0gW107XG5cdGlmIChvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpIHtcblx0XHRjb25zdCBhTWFuaWZlc3RTT0tleXMgPSBPYmplY3Qua2V5cyhvTWFuaWZlc3REYXRhLmFkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMpO1xuXHRcdGZvciAobGV0IGtleSA9IDA7IGtleSA8IGFNYW5pZmVzdFNPS2V5cy5sZW5ndGg7IGtleSsrKSB7XG5cdFx0XHRfZ2V0U09JbnRlbnRzKG9PYmplY3RQYWdlTGF5b3V0LCBhTWFuaWZlc3RTT0tleXNba2V5XSwgb1BhcmFtKVxuXHRcdFx0XHQudGhlbihcblx0XHRcdFx0XHRfZ2V0UmVsYXRlZEludGVudHMuYmluZChcblx0XHRcdFx0XHRcdHRoaXMgYXMgYW55LFxuXHRcdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FNYW5pZmVzdFNPS2V5c1trZXldXSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgU08gSW50ZW50c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKSB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0Zm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKClcblx0XHQudGhlbihmdW5jdGlvbiAoYUxpbmtzOiBhbnkpIHtcblx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFBhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IGFBbm5vdGF0aW9uc1NPSXRlbXM6IGFueVtdID0gW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gb01ldGFQYXRoICsgXCJAXCI7XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IG9NZXRhUGF0aCArIFwiL0BcIjtcblx0XHRcdFx0Y29uc3Qgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0VudGl0eVNldFBhdGgpO1xuXHRcdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHRpZiAoIW9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmJIYXNFbnRpdHlTZXRTTykge1xuXHRcdFx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5VHlwZVBhdGgpO1xuXHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVR5cGVBbm5vdGF0aW9ucywgc0N1cnJlbnRTZW1PYmopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zO1xuXHRcdFx0XHQvL1NraXAgc2FtZSBhcHBsaWNhdGlvbiBmcm9tIFJlbGF0ZWQgQXBwc1xuXHRcdFx0XHRhRXhjbHVkZWRBY3Rpb25zLnB1c2goc0N1cnJlbnRBY3Rpb24pO1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLm5hdmlnYXRpb25Db250ZXh0cyA9IG9CaW5kaW5nQ29udGV4dDtcblx0XHRcdFx0b1RhcmdldFBhcmFtcy5zZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3M7XG5cdFx0XHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFBbm5vdGF0aW9uc1NPSXRlbXMpO1xuXHRcdFx0XHRhUmVsYXRlZEFwcHNNZW51SXRlbXMgPSBhQW5ub3RhdGlvbnNTT0l0ZW1zLmNvbmNhdChhTWFuaWZlc3RTT0l0ZW1zKTtcblx0XHRcdFx0Ly8gSWYgbm8gYXBwIGluIGxpc3QsIHJlbGF0ZWQgYXBwcyBidXR0b24gd2lsbCBiZSBoaWRkZW5cblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zLmxlbmd0aCA+IDApO1xuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvaXRlbXNcIiwgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy92aXNpYmlsaXR5XCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZWFkIGxpbmtzXCIsIG9FcnJvcik7XG5cdFx0fSk7XG5cdHJldHVybiBhUmVsYXRlZEFwcHNNZW51SXRlbXM7XG59XG5mdW5jdGlvbiBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5QW5ub3RhdGlvbnM6IGFueSwgc0N1cnJlbnRTZW1PYmo6IGFueSkge1xuXHRjb25zdCBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyA9IHtcblx0XHRiSGFzRW50aXR5U2V0U086IGZhbHNlLFxuXHRcdGFVbmF2YWlsYWJsZUFjdGlvbnM6IFtdLFxuXHRcdGFNYXBwaW5nczogW11cblx0fTtcblx0bGV0IHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0sIHNBbm5vdGF0aW9uQWN0aW9uVGVybTtcblx0bGV0IHNRdWFsaWZpZXI7XG5cdGZvciAoY29uc3Qga2V5IGluIG9FbnRpdHlBbm5vdGF0aW9ucykge1xuXHRcdGlmIChrZXkuaW5kZXhPZihcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFwiKSA+IC0xICYmIG9FbnRpdHlBbm5vdGF0aW9uc1trZXldID09PSBzQ3VycmVudFNlbU9iaikge1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPID0gdHJ1ZTtcblx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RNYXBwaW5nXCI7XG5cdFx0XHRzQW5ub3RhdGlvbkFjdGlvblRlcm0gPSBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcIjtcblxuXHRcdFx0aWYgKGtleS5pbmRleE9mKFwiI1wiKSA+IC0xKSB7XG5cdFx0XHRcdHNRdWFsaWZpZXIgPSBrZXkuc3BsaXQoXCIjXCIpWzFdO1xuXHRcdFx0XHRzQW5ub3RhdGlvbk1hcHBpbmdUZXJtID0gc0Fubm90YXRpb25NYXBwaW5nVGVybSArIFwiI1wiICsgc1F1YWxpZmllcjtcblx0XHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gc0Fubm90YXRpb25BY3Rpb25UZXJtICsgXCIjXCIgKyBzUXVhbGlmaWVyO1xuXHRcdFx0fVxuXG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MgPSBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hTWFwcGluZ3MuY29uY2F0KG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbk1hcHBpbmdUZXJtXSk7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5hVW5hdmFpbGFibGVBY3Rpb25zID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucy5jb25jYXQoXG5cdFx0XHRcdG9FbnRpdHlBbm5vdGF0aW9uc1tzQW5ub3RhdGlvbkFjdGlvblRlcm1dXG5cdFx0XHQpO1xuXG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xufVxuZnVuY3Rpb24gZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2VMYXlvdXQ6IGFueSkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0Y29uc3Qgb1BhdGggPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldFBhdGgoKTtcblx0Y29uc3Qgb01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvUGF0aCk7XG5cdC8vIFNlbWFudGljIEtleSBWb2NhYnVsYXJ5XG5cdGNvbnN0IHNTZW1hbnRpY0tleVZvY2FidWxhcnkgPSBvTWV0YVBhdGggKyBcIi9cIiArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiO1xuXHQvL1NlbWFudGljIEtleXNcblx0Y29uc3QgYVNlbUtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU2VtYW50aWNLZXlWb2NhYnVsYXJ5KTtcblx0Ly8gVW5hdmFpbGFibGUgQWN0aW9uc1xuXHRjb25zdCBvRW50cnkgPSBvQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5KSB7XG5cdFx0b0JpbmRpbmdDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0VudHJ5OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgpO1xuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b246IGFueSkge1xuXHRjb25zdCBhQXV0aG9yaXplZFR5cGVzID0gW1wic2FwLm0uQnV0dG9uXCIsIFwic2FwLm0uT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCJdO1xuXHRpZiAob0J1dHRvbiAmJiBhQXV0aG9yaXplZFR5cGVzLmluZGV4T2Yob0J1dHRvbi5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkgIT09IC0xICYmIG9CdXR0b24uZ2V0VmlzaWJsZSgpICYmIG9CdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0b0J1dHRvbi5maXJlUHJlc3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuKHNWYWx1ZTogYW55KSB7XG5cdGlmIChzVmFsdWUgPT09IFwidHJ1ZVwiIHx8IHNWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBhbnkpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VGFyZ2V0VmlldyhvQ29udHJvbDogYW55KSB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbDtcbn1cblxuZnVuY3Rpb24gaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKHNGaWVsZENvbnRyb2xQYXRoOiBzdHJpbmcsIG9BdHRyaWJ1dGU6IGFueSkge1xuXHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRjb25zdCBhUGFydHMgPSBzRmllbGRDb250cm9sUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHNlbnNpdGl2ZSBkYXRhIGlzIHJlbW92ZWQgb25seSBpZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLlxuXHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVthUGFydHNbMF1dICYmIG9BdHRyaWJ1dGVbYVBhcnRzWzBdXS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmIG9BdHRyaWJ1dGVbYVBhcnRzWzBdXVthUGFydHNbMV1dID09PSAwO1xuXHR9IGVsc2Uge1xuXHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW3NGaWVsZENvbnRyb2xQYXRoXSA9PT0gMDtcblx0fVxuXHRyZXR1cm4gYkluYXBwbGljYWJsZTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXM6IGFueVtdLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRjb25zdCBhT3V0QXR0cmlidXRlcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0VudGl0eVNldCA9IGFBdHRyaWJ1dGVzW2ldLmVudGl0eVNldCxcblx0XHRcdG9BdHRyaWJ1dGUgPSBhQXR0cmlidXRlc1tpXS5jb250ZXh0RGF0YTtcblxuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIiU0MG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQXR0cmlidXRlKTtcblx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFQcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRjb25zdCBzUHJvcCA9IGFQcm9wZXJ0aWVzW2pdLFxuXHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiICsgc0VudGl0eVNldCArIFwiL1wiICsgc1Byb3AgKyBcIkBcIik7XG5cdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlBlcnNvbmFsRGF0YS52MS5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlXCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRXhjbHVkZUZyb21OYXZpZ2F0aW9uQ29udGV4dFwiXSB8fFxuXHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5NZWFzdXJlXCJdXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0fSBlbHNlIGlmIChhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRmllbGRDb250cm9sXCJdKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl07XG5cdFx0XHRcdFx0aWYgKG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXSAmJiBvRmllbGRDb250cm9sW1wiJEVudW1NZW1iZXJcIl0uc3BsaXQoXCIvXCIpWzFdID09PSBcIkluYXBwbGljYWJsZVwiKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgb0F0dHJpYnV0ZVtzUHJvcF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sW1wiJFBhdGhcIl0gJiYgQ29tbW9uVXRpbHMuaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSwgb0F0dHJpYnV0ZSkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0YU91dEF0dHJpYnV0ZXMucHVzaChvQXR0cmlidXRlKTtcblx0fVxuXG5cdHJldHVybiBhT3V0QXR0cmlidXRlcztcbn1cbmZ1bmN0aW9uIF9mbkNoZWNrSXNNYXRjaChvT2JqZWN0OiBhbnksIG9LZXlzVG9DaGVjazogYW55KSB7XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvS2V5c1RvQ2hlY2spIHtcblx0XHRpZiAob0tleXNUb0NoZWNrW3NLZXldICE9PSBvT2JqZWN0W3NLZXldKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nLCBvRmlsdGVyPzogb2JqZWN0KSB7XG5cdGNvbnN0IG9FbnRpdHlUeXBlID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIpIHx8IHt9LFxuXHRcdG9Qcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cbmZ1bmN0aW9uIGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRsZXQgYU1hbmRhdG9yeUZpbHRlckZpZWxkcztcblx0aWYgKG9NZXRhTW9kZWwgJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkcyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zL1JlcXVpcmVkUHJvcGVydGllc1wiKTtcblx0fVxuXHRyZXR1cm4gYU1hbmRhdG9yeUZpbHRlckZpZWxkcztcbn1cbmZ1bmN0aW9uIGZuR2V0SUJOQWN0aW9ucyhvQ29udHJvbDogYW55LCBhSUJOQWN0aW9uczogYW55W10pIHtcblx0Y29uc3QgYUFjdGlvbnMgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRBY3Rpb25zKCk7XG5cdGlmIChhQWN0aW9ucykge1xuXHRcdGFBY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0aWYgKG9BY3Rpb24uaXNBKFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyLkFjdGlvblRvb2xiYXJBY3Rpb25cIikpIHtcblx0XHRcdFx0b0FjdGlvbiA9IG9BY3Rpb24uZ2V0QWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0FjdGlvbi5kYXRhKFwiSUJORGF0YVwiKSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucy5wdXNoKG9BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBhSUJOQWN0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIGFJQk5BY3Rpb25zXG4gKiBAcGFyYW0gb1ZpZXdcbiAqL1xuZnVuY3Rpb24gZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9uczogYW55W10sIG9WaWV3OiBWaWV3KSB7XG5cdGNvbnN0IG9QYXJhbXM6IGFueSA9IHt9O1xuXHRjb25zdCBmbkdldExpbmtzID0gZnVuY3Rpb24gKG9EYXRhPzogYW55KSB7XG5cdFx0aWYgKG9EYXRhKSB7XG5cdFx0XHRjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKG9EYXRhKTtcblx0XHRcdGFLZXlzLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IHN0cmluZykge1xuXHRcdFx0XHRpZiAoc0tleS5pbmRleE9mKFwiX1wiKSAhPT0gMCAmJiBzS2V5LmluZGV4T2YoXCJvZGF0YS5jb250ZXh0XCIpID09PSAtMSkge1xuXHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSB7IHZhbHVlOiBvRGF0YVtzS2V5XSB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKGFJQk5BY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0YUlCTkFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob0lCTkFjdGlvbjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdCA9IG9JQk5BY3Rpb24uZGF0YShcIklCTkRhdGFcIikuc2VtYW50aWNPYmplY3Q7XG5cdFx0XHRcdGNvbnN0IHNBY3Rpb24gPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLmFjdGlvbjtcblx0XHRcdFx0Q29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvVmlldylcblx0XHRcdFx0XHQuZ2V0TGlua3Moe1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogc0FjdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFMaW5rOiBhbnkpIHtcblx0XHRcdFx0XHRcdG9JQk5BY3Rpb24uc2V0VmlzaWJsZShvSUJOQWN0aW9uLmdldFZpc2libGUoKSAmJiBhTGluayAmJiBhTGluay5sZW5ndGggPT09IDEpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdGlmIChvVmlldyAmJiBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpKSB7XG5cdFx0KG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgYW55KVxuXHRcdFx0Py5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Zm5HZXRMaW5rcygpO1xuXHR9XG59XG5mdW5jdGlvbiBnZXRUcmFuc2xhdGVkVGV4dChzRnJhbWV3b3JrS2V5OiBzdHJpbmcsIG9SZXNvdXJjZUJ1bmRsZTogUmVzb3VyY2VCdW5kbGUsIG9QYXJhbXM/OiBhbnksIHNFbnRpdHlTZXROYW1lPzogc3RyaW5nKSB7XG5cdGxldCBzUmVzb3VyY2VLZXkgPSBzRnJhbWV3b3JrS2V5O1xuXHRpZiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0aWYgKHNFbnRpdHlTZXROYW1lKSB7XG5cdFx0XHQvLyBUaGVyZSBhcmUgY29uc29sZSBlcnJvcnMgbG9nZ2VkIHdoZW4gbWFraW5nIGNhbGxzIHRvIGdldFRleHQgZm9yIGtleXMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHJlc291cmNlIGJ1bmRsZVxuXHRcdFx0Ly8gZm9yIGluc3RhbmNlIGtleXMgd2hpY2ggYXJlIHN1cHBvc2VkIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwgZS5nLCA8a2V5Pnw8ZW50aXR5U2V0PiB0byBvdmVycmlkZSBpbnN0YW5jZSBzcGVjaWZpYyB0ZXh0XG5cdFx0XHQvLyBoZW5jZSBjaGVjayBpZiB0ZXh0IGV4aXN0cyAodXNpbmcgXCJoYXNUZXh0XCIpIGluIHRoZSByZXNvdXJjZSBidW5kbGUgYmVmb3JlIGNhbGxpbmcgXCJnZXRUZXh0XCJcblxuXHRcdFx0Ly8gXCJoYXNUZXh0XCIgb25seSBjaGVja3MgZm9yIHRoZSBrZXkgaW4gdGhlIGltbWVkaWF0ZSByZXNvdXJjZSBidW5kbGUgYW5kIG5vdCBpdCdzIGN1c3RvbSBidW5kbGVzXG5cdFx0XHQvLyBoZW5jZSB3ZSBuZWVkIHRvIGRvIHRoaXMgcmVjdXJyc2l2ZWx5IHRvIGNoZWNrIGlmIHRoZSBrZXkgZXhpc3RzIGluIGFueSBvZiB0aGUgYnVuZGxlcyB0aGUgZm9ybXMgdGhlIEZFIHJlc291cmNlIGJ1bmRsZVxuXHRcdFx0Y29uc3QgYlJlc291cmNlS2V5RXhpc3RzID0gX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyhcblx0XHRcdFx0KG9SZXNvdXJjZUJ1bmRsZSBhcyBhbnkpLmFDdXN0b21CdW5kbGVzLFxuXHRcdFx0XHRzRnJhbWV3b3JrS2V5ICsgXCJ8XCIgKyBzRW50aXR5U2V0TmFtZVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gaWYgcmVzb3VyY2Uga2V5IHdpdGggZW50aXR5IHNldCBuYW1lIGZvciBpbnN0YW5jZSBzcGVjaWZpYyB0ZXh0IG92ZXJyaWRpbmcgaXMgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG5cdFx0XHQvLyB0aGVuIHVzZSB0aGUgc2FtZSBrZXkgb3RoZXJ3aXNlIHVzZSB0aGUgRnJhbWV3b3JrIGtleVxuXHRcdFx0c1Jlc291cmNlS2V5ID0gYlJlc291cmNlS2V5RXhpc3RzID8gc0ZyYW1ld29ya0tleSArIFwifFwiICsgc0VudGl0eVNldE5hbWUgOiBzRnJhbWV3b3JrS2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlS2V5LCBvUGFyYW1zKTtcblx0fVxuXG5cdC8vIGRvIG5vdCBhbGxvdyBvdmVycmlkZSBzbyBnZXQgdGV4dCBmcm9tIHRoZSBpbnRlcm5hbCBidW5kbGUgZGlyZWN0bHlcblx0b1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG59XG5mdW5jdGlvbiBfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzOiBhbnksIHNLZXk6IGFueSkge1xuXHRpZiAoYUN1c3RvbUJ1bmRsZXMubGVuZ3RoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IGFDdXN0b21CdW5kbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSBhQ3VzdG9tQnVuZGxlc1tpXS5oYXNUZXh0KHNLZXkpO1xuXHRcdFx0Ly8gdGV4dCBmb3VuZCByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYUN1c3RvbUJ1bmRsZXNbaV0uYUN1c3RvbUJ1bmRsZXMsIHNLZXkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXRoKG9BY3Rpb246IGFueSwgYlJldHVybk9ubHlQYXRoOiBib29sZWFuLCBzQWN0aW9uTmFtZT86IHN0cmluZywgYkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuKSB7XG5cdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGgpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUob0FjdGlvbi5nZXRNb2RlbCgpLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBcIi9cIiArIHNFbnRpdHlOYW1lO1xuXHR9XG5cdGlmIChiQ2hlY2tTdGF0aWNWYWx1ZSkge1xuXHRcdHJldHVybiBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGggKyBcIi9cIiArIHNBY3Rpb25OYW1lICsgXCJAT3JnLk9EYXRhLkNvcmUuVjEuT3BlcmF0aW9uQXZhaWxhYmxlXCIpO1xuXHR9XG5cdGlmIChiUmV0dXJuT25seVBhdGgpIHtcblx0XHRyZXR1cm4gc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c0NvbnRleHRQYXRoOiBzQ29udGV4dFBhdGgsXG5cdFx0XHRzUHJvcGVydHk6IG9BY3Rpb24uZ2V0T2JqZWN0KHNDb250ZXh0UGF0aCArIFwiL1wiICsgc0FjdGlvbk5hbWUgKyBcIkBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhcIiksXG5cdFx0XHRzQmluZGluZ1BhcmFtZXRlcjogb0FjdGlvbi5nZXRPYmplY3Qoc0NvbnRleHRQYXRoICsgXCIvXCIgKyBzQWN0aW9uTmFtZSArIFwiL0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lXCIpXG5cdFx0fTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RW50aXR5U2V0TmFtZShvTWV0YU1vZGVsOiBhbnksIHNFbnRpdHlUeXBlOiBhbnkpIHtcblx0Y29uc3Qgb0VudGl0eUNvbnRhaW5lciA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFwiL1wiKTtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUNvbnRhaW5lcikge1xuXHRcdGlmICh0eXBlb2Ygb0VudGl0eUNvbnRhaW5lcltrZXldID09PSBcIm9iamVjdFwiICYmIG9FbnRpdHlDb250YWluZXJba2V5XS4kVHlwZSA9PT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdHJldHVybiBrZXk7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBjb21wdXRlRGlzcGxheU1vZGUob1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSwgb0NvbGxlY3Rpb25Bbm5vdGF0aW9ucz86IGFueSkge1xuXHRjb25zdCBvVGV4dEFubm90YXRpb24gPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXSxcblx0XHRvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9XG5cdFx0XHRvVGV4dEFubm90YXRpb24gJiZcblx0XHRcdCgob1Byb3BlcnR5QW5ub3RhdGlvbnMgJiZcblx0XHRcdFx0b1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSB8fFxuXHRcdFx0XHQob0NvbGxlY3Rpb25Bbm5vdGF0aW9ucyAmJiBvQ29sbGVjdGlvbkFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXSkpO1xuXG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbikge1xuXHRcdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRcdHJldHVybiBcIkRlc2NyaXB0aW9uXCI7XG5cdFx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dFNlcGFyYXRlXCIpIHtcblx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0fVxuXHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25WYWx1ZVwiO1xuXHR9XG5cdHJldHVybiBvVGV4dEFubm90YXRpb24gPyBcIkRlc2NyaXB0aW9uVmFsdWVcIiA6IFwiVmFsdWVcIjtcbn1cbmZ1bmN0aW9uIF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSkgKyBcIi8kVHlwZVwiKTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IGFueSwgb1NlbGVjdGVkQ29udGV4dDogYW55LCBzUHJvcGVydHk6IGFueSkge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIHNQcm9wZXJ0eTogYW55LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgb1Byb21pc2UgPVxuXHRcdHNQcm9wZXJ0eSAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPT09IDBcblx0XHRcdD8gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHNQcm9wZXJ0eSwgb1NlbGVjdGVkQ29udGV4dC5nZXRNb2RlbCgpKVxuXHRcdFx0OiBfcmVxdWVzdE9iamVjdChzQWN0aW9uLCBvU2VsZWN0ZWRDb250ZXh0LCBzUHJvcGVydHkpO1xuXG5cdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh2UHJvcGVydHlWYWx1ZTogYW55KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR2UHJvcGVydHlWYWx1ZTogdlByb3BlcnR5VmFsdWUsXG5cdFx0XHRvU2VsZWN0ZWRDb250ZXh0OiBvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbjogc0FjdGlvbixcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGhcblx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBfc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBhUmVxdWVzdFByb21pc2VzOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzOiBhbnlbXSkge1xuXHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBhQXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IGFueVtdID0gW107XG5cdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKGFSZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGlmIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYVJlc3VsdC52UHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShhUmVzdWx0LnNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVzdWx0c1swXS5zQWN0aW9uLCBhQXBwbGljYWJsZUNvbnRleHRzLCBhTm90QXBwbGljYWJsZUNvbnRleHRzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yKTtcblx0XHR9KTtcbn1cbi8qKlxuICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dFxuICogQHBhcmFtIHNBY3Rpb25cbiAqIEBwYXJhbSBhQXBwbGljYWJsZVxuICogQHBhcmFtIGFOb3RBcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIHNBY3Rpb246IGFueSwgYUFwcGxpY2FibGU6IGFueSwgYU5vdEFwcGxpY2FibGU6IGFueSkge1xuXHRjb25zdCBzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvZHluYW1pY0FjdGlvbnMvXCIgKyBzQWN0aW9uLFxuXHRcdG9JbnRlcm5hbE1vZGVsID0gb0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCk7XG5cdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uUGF0aFByZWZpeCArIFwiL2FBcHBsaWNhYmxlXCIsIGFBcHBsaWNhYmxlKTtcblx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4ICsgXCIvYU5vdEFwcGxpY2FibGVcIiwgYU5vdEFwcGxpY2FibGUpO1xufVxuZnVuY3Rpb24gc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LCBhU2VsZWN0ZWRDb250ZXh0czogYW55KSB7XG5cdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImR5bmFtaWNBY3Rpb25zL1wiICsgc0FjdGlvbiwge1xuXHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0fSk7XG5cdFx0Ly8gTm90ZSB0aGF0IG5vbiBkeW5hbWljIGFjdGlvbnMgYXJlIG5vdCBwcm9jZXNzZWQgaGVyZS4gVGhleSBhcmUgZW5hYmxlZCBiZWNhdXNlXG5cdFx0Ly8gb25lIG9yIG1vcmUgYXJlIHNlbGVjdGVkIGFuZCB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGUgdGVtcGxhdGluZ1xuXHRcdC8vIGlzIHRoZW4gdW5kZWZpbmVkIGFuZCB0aHVzIHRoZSBidXR0b24gdGFrZXMgdGhlIGRlZmF1bHQgZW5hYmxpbmcsIHdoaWNoIGlzIHRydWUhXG5cdFx0Y29uc3QgYUFwcGxpY2FibGUgPSBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRzUHJvcGVydHkgPSBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwW3NBY3Rpb25dLFxuXHRcdFx0c0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9keW5hbWljQWN0aW9ucy9cIiArIHNBY3Rpb24gKyBcIi9iRW5hYmxlZFwiO1xuXG5cdFx0aWYgKHR5cGVvZiBzUHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgc1Byb3BlcnR5ICE9PSBudWxsICYmIHNQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcdFwiQmluZGluZ1wiLFxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdFx0ZnVuY3Rpb24gKG9CaW5kaW5nRXhwcmVzc2lvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUJpbmRpbmcob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdFx0aWYgKHNSZXN1bHQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdGFBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0FjdGlvbiwgYUFwcGxpY2FibGUsIGFOb3RBcHBsaWNhYmxlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYVJlcXVlc3RQcm9taXNlcyA9IFtdO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW1wiI1wiICsgc0FjdGlvbl0pIHtcblx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQsIHNBY3Rpb24sIHNQcm9wZXJ0eSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0Ly8gVGhlIGVuYWJsZWQgcHJvcGVydHkgb2YgdGhlIGR5bmFtaWMgYWN0aW9uIGluIGludGVybmFsIG1vZGVsIGNvbnRleHQuXG5cdFx0XHRhUHJvbWlzZXMucHVzaChfc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcykpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcbn1cblxuZnVuY3Rpb24gc2V0T2JqZWN0TWFwcGluZ3Moc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG9QYXJhbXM6IGFueSwgYVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IGFueSkge1xuXHRhU2VtYW50aWNPYmplY3RNYXBwaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0aWYgKHNTZW1hbnRpY09iamVjdCA9PT0gb0l0ZW0uc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdGNvbnN0IG9NYXBwaW5ncyA9IG9JdGVtLml0ZW1zO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvTWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPSBvTWFwcGluZ3NbaV0ua2V5O1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS52YWx1ZTtcblx0XHRcdFx0aWYgKG9QYXJhbXNbc0xvY2FsUHJvcGVydHldKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzU2VtYW50aWNPYmplY3RQcm9wZXJ0eV0gPSBvUGFyYW1zW3NMb2NhbFByb3BlcnR5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzUHJvcGVydHlUeXBlOiBzdHJpbmcpIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVVdGlsLmdldERhdGFUeXBlQ2xhc3NOYW1lKHNQcm9wZXJ0eVR5cGUpO1xuXHQvLyBUT0RPIG5lZWQgdG8gcGFzcyBwcm9wZXIgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludHMgaGVyZVxuXHRjb25zdCBvQmFzZVR5cGUgPSBUeXBlVXRpbC5nZXRCYXNlVHlwZShvRGF0YUNsYXNzLCB7fSwge30pO1xuXHRyZXR1cm4gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yc0ZvclR5cGUob0Jhc2VUeXBlKTtcbn1cbmZ1bmN0aW9uIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcHM6IGFueSwgYUV4cHJlc3Npb25PcHM6IGFueSkge1xuXHQvLyBGcm9tIHRoZSBkZWZhdWx0IHNldCBvZiBPcGVyYXRvcnMgZm9yIHRoZSBCYXNlIFR5cGUsIHNlbGVjdCB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBbGxvd2VkIFZhbHVlLlxuXHQvLyBJbiBjYXNlIHRoYXQgbm8gb3BlcmF0b3JzIGFyZSBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldCBpcyB1c2VkLlxuXHRjb25zdCBhT3BlcmF0b3JzID0gYURlZmF1bHRPcHMuZmlsdGVyKGZ1bmN0aW9uIChzRWxlbWVudDogYW55KSB7XG5cdFx0cmV0dXJuIGFFeHByZXNzaW9uT3BzLmluZGV4T2Yoc0VsZW1lbnQpID4gLTE7XG5cdH0pO1xuXHRyZXR1cm4gYU9wZXJhdG9ycy50b1N0cmluZygpIHx8IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24oYUV4cHJlc3Npb25zOiBhbnkpIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRzUHJvcGVydHk6IGFueSxcblx0c0VudGl0eVNldFBhdGg6IGFueSxcblx0b0NvbnRleHQ6IGFueSxcblx0c1R5cGU/OiBhbnksXG5cdGJVc2VTZW1hbnRpY0RhdGVSYW5nZT86IGFueSxcblx0c1NldHRpbmdzPzogYW55XG4pIHtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBhRXF1YWxzT3BzID0gW1wiRVFcIl07XG5cdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzID0gW1wiRVFcIiwgXCJCVFwiXTtcblx0Y29uc3QgYVNpbmdsZVZhbHVlRGF0ZU9wcyA9IFtcblx0XHRcIlRPREFZXCIsXG5cdFx0XCJUT01PUlJPV1wiLFxuXHRcdFwiWUVTVEVSREFZXCIsXG5cdFx0XCJEQVRFXCIsXG5cdFx0XCJGSVJTVERBWVdFRUtcIixcblx0XHRcIkxBU1REQVlXRUVLXCIsXG5cdFx0XCJGSVJTVERBWU1PTlRIXCIsXG5cdFx0XCJMQVNUREFZTU9OVEhcIixcblx0XHRcIkZJUlNUREFZUVVBUlRFUlwiLFxuXHRcdFwiTEFTVERBWVFVQVJURVJcIixcblx0XHRcIkZJUlNUREFZWUVBUlwiLFxuXHRcdFwiTEFTVERBWVlFQVJcIlxuXHRdO1xuXHRjb25zdCBhQmFzaWNEYXRlVGltZU9wcyA9IFtcIkVRXCIsIFwiTEVcIiwgXCJHRVwiLCBcIkJUXCJdO1xuXHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNlYXJjaEV4cHJlc3Npb25PcHMgPSBbXCJDb250YWluc1wiLCBcIk5vdENvbnRhaW5zXCIsIFwiU3RhcnRzV2l0aFwiLCBcIk5vdFN0YXJ0c1dpdGhcIiwgXCJFbmRzV2l0aFwiLCBcIk5vdEVuZHNXaXRoXCJdO1xuXHRjb25zdCBhU2VtYW50aWNEYXRlT3BzRXh0ID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFN1cHBvcnRlZE9wZXJhdGlvbnMoKTtcblx0Y29uc3QgYlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdGxldCBhU2VtYW50aWNEYXRlT3BzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvU2V0dGluZ3MgPSB0eXBlb2Ygc1NldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzU2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzU2V0dGluZ3M7XG5cblx0aWYgKG9Db250ZXh0LmdldE9iamVjdChzRW50aXR5U2V0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiBhRXF1YWxzT3BzLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAob1NldHRpbmdzICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24gJiYgb1NldHRpbmdzLm9wZXJhdG9yQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRGaWx0ZXJPcGVyYXRpb25zKG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24pO1xuXHR9IGVsc2Uge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0U2VtYW50aWNEYXRlT3BlcmF0aW9ucygpO1xuXHR9XG5cdGNvbnN0IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzID0gYVNlbWFudGljRGF0ZU9wcy5maWx0ZXIoZnVuY3Rpb24gKHNPcGVyYXRvcikge1xuXHRcdHJldHVybiBzT3BlcmF0b3IgIT09IFwiREFURVwiICYmIHNPcGVyYXRvciAhPT0gXCJEQVRFUkFOR0VcIiAmJiBzT3BlcmF0b3IgIT09IFwiRlJPTVwiICYmIHNPcGVyYXRvciAhPT0gXCJUT1wiO1xuXHR9KTtcblx0Ly8gR2V0IHRoZSBkZWZhdWx0IE9wZXJhdG9ycyBmb3IgdGhpcyBQcm9wZXJ0eSBUeXBlXG5cdGxldCBhRGVmYXVsdE9wZXJhdG9ycyA9IF9nZXREZWZhdWx0T3BlcmF0b3JzKHNUeXBlKTtcblxuXHQvLyBJcyB0aGVyZSBhIEZpbHRlciBSZXN0cmljdGlvbiBkZWZpbmVkIGZvciB0aGlzIHByb3BlcnR5P1xuXHRpZiAob0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKSB7XG5cdFx0Ly8gRXh0ZW5kaW5nIHRoZSBkZWZhdWx0IG9wZXJhdG9ycyBsaXN0IHdpdGggU2VtYW50aWMgRGF0ZSBvcHRpb25zIERBVEVSQU5HRSwgREFURSwgRlJPTSBhbmQgVE9cblx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRhRGVmYXVsdE9wZXJhdG9ycyA9IGFTZW1hbnRpY0RhdGVPcHNFeHQuY29uY2F0KGFEZWZhdWx0T3BlcmF0b3JzKTtcblx0XHR9XG5cdFx0Y29uc3Qgc0FsbG93ZWRFeHByZXNzaW9uID0gQ29tbW9uVXRpbHMuZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zLkZpbHRlckFsbG93ZWRFeHByZXNzaW9uc1tzUHJvcGVydHldKTtcblx0XHRsZXQgc1Jlc3RyaWN0aW9ucztcblx0XHQvLyBJbiBjYXNlIG1vcmUgdGhhbiBvbmUgQWxsb3dlZCBFeHByZXNzaW9ucyBoYXMgYmVlbiBkZWZpbmVkIGZvciBhIHByb3BlcnR5XG5cdFx0Ly8gY2hvb3NlIHRoZSBtb3N0IHJlc3RyaWN0aXZlIEFsbG93ZWQgRXhwcmVzc2lvblxuXG5cdFx0Ly8gTXVsdGlWYWx1ZSBoYXMgc2FtZSBPcGVyYXRvciBhcyBTaW5nbGVWYWx1ZSwgYnV0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIChtYXhDb25kaXRpb25zKVxuXHRcdHN3aXRjaCAoc0FsbG93ZWRFeHByZXNzaW9uKSB7XG5cdFx0XHRjYXNlIFwiU2luZ2xlVmFsdWVcIjpcblx0XHRcdFx0Y29uc3QgYVNpbmdsZVZhbHVlT3BzID0gc1R5cGUgPT09IFwiRWRtLkRhdGVcIiAmJiBiU2VtYW50aWNEYXRlUmFuZ2UgPyBhU2luZ2xlVmFsdWVEYXRlT3BzIDogYUVxdWFsc09wcztcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTaW5nbGVWYWx1ZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk11bHRpVmFsdWVcIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFFcXVhbHNPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTaW5nbGVSYW5nZVwiOlxuXHRcdFx0XHRjb25zdCBhRXhwcmVzc2lvbk9wcyA9IGJTZW1hbnRpY0RhdGVSYW5nZVxuXHRcdFx0XHRcdD8gc1R5cGUgPT09IFwiRWRtLkRhdGVcIlxuXHRcdFx0XHRcdFx0PyBhU2VtYW50aWNEYXRlT3BzXG5cdFx0XHRcdFx0XHQ6IHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiXG5cdFx0XHRcdFx0XHQ/IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzLmNvbmNhdChhQmFzaWNEYXRlVGltZU9wcylcblx0XHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzXG5cdFx0XHRcdFx0OiBzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIlxuXHRcdFx0XHRcdD8gYVNpbmdsZVJhbmdlRFRCYXNpY09wc1xuXHRcdFx0XHRcdDogYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycyA/IHNPcGVyYXRvcnMgOiBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdHJldHVybiBzUmVzdHJpY3Rpb25zO1xuXHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIGFTZW1hbnRpY0RhdGVPcHMuaW5kZXhPZihzRWxlbWVudCkgPCAwO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbDogYW55LCBzQ29udGV4dFBhdGg6IGFueSkge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXJhbWV0ZXJDb250ZXh0UGF0aCArIFwiL0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dFwiKTtcblx0Y29uc3Qgb1BhcmFtZXRlckluZm86IGFueSA9IHt9O1xuXHRpZiAoYlJlc3VsdENvbnRleHQgJiYgc1BhcmFtZXRlckNvbnRleHRQYXRoICE9PSBzQ29udGV4dFBhdGgpIHtcblx0XHRvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCA9IHNQYXJhbWV0ZXJDb250ZXh0UGF0aDtcblx0XHRvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCk7XG5cdH1cblx0cmV0dXJuIG9QYXJhbWV0ZXJJbmZvO1xufVxuZnVuY3Rpb24gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhOiBhbnksIGFWYWxpZE9wZXJhdG9yczogYW55LCBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM6IGFueSwgb1NlbGVjdE9wdGlvbjogYW55KSB7XG5cdGNvbnN0IG9Db25kaXRpb24gPSBnZXRDb25kaXRpb25zKG9TZWxlY3RPcHRpb24sIG9Qcm9wZXJ0eU1ldGFkYXRhKTtcblx0aWYgKG9Db25kaXRpb24pIHtcblx0XHRpZiAoIWFWYWxpZE9wZXJhdG9ycyB8fCBhVmFsaWRPcGVyYXRvcnMuaW5kZXhPZihvQ29uZGl0aW9uLm9wZXJhdG9yKSA+IC0xKSB7XG5cdFx0XHRhQ3VtdWxhdGl2ZUNvbmRpdGlvbnMucHVzaChvQ29uZGl0aW9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFDdW11bGF0aXZlQ29uZGl0aW9ucztcbn1cbi8qKlxuICogQHBhcmFtIHNDb250ZXh0UGF0aFxuICogQHBhcmFtIG9TZWxlY3Rpb25WYXJpYW50XG4gKiBAcGFyYW0gc1NlbGVjdE9wdGlvblByb3BcbiAqIEBwYXJhbSBvQ29uZGl0aW9uc1xuICogQHBhcmFtIHNDb25kaXRpb25QYXRoXG4gKiBAcGFyYW0gc0NvbmRpdGlvblByb3BcbiAqIEBwYXJhbSBvVmFsaWRQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIGlzUGFyYW1ldGVyXG4gKi9cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdHNDb250ZXh0UGF0aDogYW55LFxuXHRvU2VsZWN0aW9uVmFyaWFudDogYW55LFxuXHRzU2VsZWN0T3B0aW9uUHJvcDogYW55LFxuXHRvQ29uZGl0aW9uczogYW55LFxuXHRzQ29uZGl0aW9uUGF0aDogYW55LFxuXHRzQ29uZGl0aW9uUHJvcDogYW55LFxuXHRvVmFsaWRQcm9wZXJ0aWVzOiBhbnksXG5cdG9NZXRhTW9kZWw6IGFueSxcblx0aXNQYXJhbWV0ZXI6IGFueVxuKSB7XG5cdGxldCBhQ29uZGl0aW9uczogYW55W10gPSBbXSxcblx0XHRhU2VsZWN0T3B0aW9ucyxcblx0XHRhVmFsaWRPcGVyYXRvcnM7XG5cblx0aWYgKGlzUGFyYW1ldGVyIHx8IENvbW1vblV0aWxzLmlzUHJvcGVydHlGaWx0ZXJhYmxlKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCwgc0NvbmRpdGlvblByb3AsIHRydWUpKSB7XG5cdFx0YVNlbGVjdE9wdGlvbnMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb24oc1NlbGVjdE9wdGlvblByb3ApO1xuXHRcdGFWYWxpZE9wZXJhdG9ycyA9IGlzUGFyYW1ldGVyID8gW1wiRVFcIl0gOiBDb21tb25VdGlscy5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShzQ29uZGl0aW9uUHJvcCwgc0NvbnRleHRQYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvUHJvcGVydHlNZXRhZGF0YSA9IG9WYWxpZFByb3BlcnRpZXNbc0NvbmRpdGlvblByb3BdO1xuXHRcdC8vIENyZWF0ZSBjb25kaXRpb25zIGZvciBhbGwgdGhlIHNlbGVjdE9wdGlvbnMgb2YgdGhlIHByb3BlcnR5XG5cdFx0YUNvbmRpdGlvbnMgPSBpc1BhcmFtZXRlclxuXHRcdFx0PyBhZGRTZWxlY3RPcHRpb25Ub0NvbmRpdGlvbnMob1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycywgYUNvbmRpdGlvbnMsIGFTZWxlY3RPcHRpb25zWzBdKVxuXHRcdFx0OiBhU2VsZWN0T3B0aW9ucy5yZWR1Y2UoYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zLmJpbmQobnVsbCwgb1Byb3BlcnR5TWV0YWRhdGEsIGFWYWxpZE9wZXJhdG9ycyksIGFDb25kaXRpb25zKTtcblx0XHRpZiAoYUNvbmRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZiAoc0NvbmRpdGlvblBhdGgpIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUGF0aCArIHNDb25kaXRpb25Qcm9wKVxuXHRcdFx0XHRcdD8gb0NvbmRpdGlvbnNbc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0gPSBvQ29uZGl0aW9ucy5oYXNPd25Qcm9wZXJ0eShzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25Qcm9wXS5jb25jYXQoYUNvbmRpdGlvbnMpXG5cdFx0XHRcdFx0OiBhQ29uZGl0aW9ucztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYWRkU2VsZWN0aW9uVmFyaWFudFRvQ29uZGl0aW9ucyhvU2VsZWN0aW9uVmFyaWFudDogYW55LCBvQ29uZGl0aW9uczogb2JqZWN0LCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcpIHtcblx0Y29uc3QgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMoKSxcblx0XHRvVmFsaWRQcm9wZXJ0aWVzID0gQ29tbW9uVXRpbHMuZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0YU1ldGFkYXRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob1ZhbGlkUHJvcGVydGllcyksXG5cdFx0b1BhcmFtZXRlckluZm8gPSBDb21tb25VdGlscy5nZXRQYXJhbWV0ZXJJbmZvKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCksXG5cdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoID0gb1BhcmFtZXRlckluZm8uY29udGV4dFBhdGgsXG5cdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyA9IG9QYXJhbWV0ZXJJbmZvLnBhcmFtZXRlclByb3BlcnRpZXMsXG5cdFx0Ykhhc1BhcmFtZXRlcnMgPSAhIW9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoICYmIG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcykubGVuZ3RoID4gMDtcblxuXHRpZiAoYkhhc1BhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhTWV0YWRhdGFQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyk7XG5cdFx0YU1ldGFkYXRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChzTWV0YWRhdGFQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0bGV0IHNTZWxlY3RPcHRpb25OYW1lO1xuXHRcdFx0aWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIiRQYXJhbWV0ZXIuXCIgKyBzTWV0YWRhdGFQYXJhbWV0ZXIpKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCIkUGFyYW1ldGVyLlwiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5cIiArIHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKSlcblx0XHRcdCkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiJFBhcmFtZXRlci5QX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhcIlBfXCIgKyBzTWV0YWRhdGFQcm9wZXJ0eSkpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gXCJQX1wiICsgc01ldGFkYXRhUHJvcGVydHk7XG5cdFx0fVxuXHRcdGlmIChzU2VsZWN0T3B0aW9uTmFtZSkge1xuXHRcdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdFx0c0NvbnRleHRQYXRoLFxuXHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHNNZXRhZGF0YVByb3BlcnR5LFxuXHRcdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRmYWxzZVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChzU2VsZWN0T3B0aW9uOiBhbnkpIHtcblx0XHRpZiAoc1NlbGVjdE9wdGlvbi5pbmRleE9mKFwiLlwiKSA+IDAgJiYgIXNTZWxlY3RPcHRpb24uaW5jbHVkZXMoXCIkUGFyYW1ldGVyXCIpKSB7XG5cdFx0XHRjb25zdCBzRnVsbENvbnRleHRQYXRoID0gKFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIikpLnN0YXJ0c1dpdGgoc0NvbnRleHRQYXRoKVxuXHRcdFx0XHQ/IFwiL1wiICsgc1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIilcblx0XHRcdFx0OiBzQ29udGV4dFBhdGggKyBcIi9cIiArIHNTZWxlY3RPcHRpb24ucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxDb250ZXh0UGF0aC5yZXBsYWNlKFwiUF9cIiwgXCJcIikpKSB7XG5cdFx0XHRcdF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb0NvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzRnVsbENvbnRleHRQYXRoXG4gKiBAcGFyYW0gc01haW5FbnRpdHlTZXRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0c0Z1bGxDb250ZXh0UGF0aDogYW55LFxuXHRzTWFpbkVudGl0eVNldFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvbjogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnlcbikge1xuXHRsZXQgYU5hdk9iamVjdE5hbWVzID0gc1NlbGVjdE9wdGlvbi5zcGxpdChcIi5cIik7XG5cdC8vIEVnOiBcIlNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uX01hdGVyaWFsLk1hdGVyaWFsXCIgb3IgXCJfSXRlbS5NYXRlcmlhbFwiXG5cdGlmICgoXCIvXCIgKyBzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSkuc3RhcnRzV2l0aChzTWFpbkVudGl0eVNldFBhdGgpKSB7XG5cdFx0Y29uc3Qgc0Z1bGxQYXRoID0gKChcIi9cIiArIHNTZWxlY3RPcHRpb24pIGFzIGFueSkucmVwbGFjZUFsbChcIi5cIiwgXCIvXCIpLFxuXHRcdFx0c05hdlBhdGggPSBzRnVsbFBhdGgucmVwbGFjZShzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiwgXCJcIik7XG5cdFx0YU5hdk9iamVjdE5hbWVzID0gc05hdlBhdGguc3BsaXQoXCIvXCIpO1xuXHR9XG5cdGxldCBzQ29uZGl0aW9uUGF0aCA9IFwiXCI7XG5cdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBhTmF2T2JqZWN0TmFtZXNbYU5hdk9iamVjdE5hbWVzLmxlbmd0aCAtIDFdOyAvLyBNYXRlcmlhbCBmcm9tIFNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uTWF0ZXJpYWxcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0aWYgKG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNNYWluRW50aXR5U2V0UGF0aCArIFwiL1wiICsgYU5hdk9iamVjdE5hbWVzW2ldLnJlcGxhY2UoXCJQX1wiLCBcIlwiKSkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXSArIFwiKi9cIjsgLy8gX0l0ZW0qLyBpbiBjYXNlIG9mIDE6biBjYXJkaW5hbGl0eVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ29uZGl0aW9uUGF0aCA9IHNDb25kaXRpb25QYXRoICsgYU5hdk9iamVjdE5hbWVzW2ldICsgXCIvXCI7IC8vIF9JdGVtLyBpbiBjYXNlIG9mIDE6MSBjYXJkaW5hbGl0eVxuXHRcdH1cblx0XHRzTWFpbkVudGl0eVNldFBhdGggPSBzTWFpbkVudGl0eVNldFBhdGggKyBcIi9cIiArIGFOYXZPYmplY3ROYW1lc1tpXTtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTmF2UHJvcGVydHlQYXRoKSxcblx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRsZXQgc1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lO1xuXHRpZiAob1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0fSBlbHNlIGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvVmFsaWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZS5yZXBsYWNlKFwiUF9cIiwgXCJcIik7XG5cdH0gZWxzZSBpZiAob1ZhbGlkUHJvcGVydGllc1tcIlBfXCIgKyBzUHJvcGVydHlOYW1lXSAmJiBhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoXCJQX1wiICsgc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IFwiUF9cIiArIHNQcm9wZXJ0eU5hbWU7XG5cdH1cblx0aWYgKHNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCB5ZXQgaW4gdGhlIG9Db25kaXRpb25zXG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKCFzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXSkge1xuXHRcdGRlbGV0ZSBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUGF0aCArIHNTZWxlY3RPcHRpb25OYW1lXTtcblx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0c05hdlByb3BlcnR5UGF0aCxcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0c1NlbGVjdE9wdGlvbixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0c0NvbmRpdGlvblBhdGgsXG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0ZmFsc2Vcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1QYWdlQ29udGV4dDogYW55W10sIG9WaWV3OiBhbnkpIHtcblx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdGNvbnN0IG9OYXZpZ2F0aW9uU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0TmF2aWdhdGlvblNlcnZpY2UoKTtcblx0cmV0dXJuIG9OYXZpZ2F0aW9uU2VydmljZS5taXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudChtUGFnZUNvbnRleHQsIG9TZWxlY3Rpb25WYXJpYW50LnRvSlNPTlN0cmluZygpKTtcbn1cbmZ1bmN0aW9uIGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50KG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG1GaWx0ZXJzOiBhbnksIG9UYXJnZXRJbmZvOiBhbnksIG9GaWx0ZXJJbmZvPzogYW55KSB7XG5cdGxldCBzRmlsdGVyOiBhbnksXG5cdFx0c0xvdyA9IFwiXCIsXG5cdFx0c0hpZ2ggPSBudWxsO1xuXHRjb25zdCBmbkdldFNpZ25BbmRPcHRpb24gPSBmdW5jdGlvbiAoc09wZXJhdG9yOiBhbnksIHNMb3dWYWx1ZTogYW55LCBzSGlnaFZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCBvU2VsZWN0T3B0aW9uU3RhdGUgPSB7XG5cdFx0XHRvcHRpb246IFwiXCIsXG5cdFx0XHRzaWduOiBcIklcIixcblx0XHRcdGxvdzogc0xvd1ZhbHVlLFxuXHRcdFx0aGlnaDogc0hpZ2hWYWx1ZVxuXHRcdH07XG5cdFx0c3dpdGNoIChzT3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gc09wZXJhdG9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUT0RBWVwiOlxuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIipcIiArIG9TZWxlY3RPcHRpb25TdGF0ZS5sb3c7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIk5FXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHRVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHRVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RMVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJMVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RHVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJHVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy53YXJuaW5nKHNPcGVyYXRvciArIFwiIGlzIG5vdCBzdXBwb3J0ZWQuIFwiICsgc0ZpbHRlciArIFwiIGNvdWxkIG5vdCBiZSBhZGRlZCB0byB0aGUgbmF2aWdhdGlvbiBjb250ZXh0XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdE9wdGlvblN0YXRlO1xuXHR9O1xuXHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnM7XG5cdGNvbnN0IG9GaWx0ZXJzV2l0aG91dENvbmZsaWN0ID0gbUZpbHRlcnMuZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCA/IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgOiB7fTtcblx0Y29uc3Qgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA9IG9UYXJnZXRJbmZvLnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPyBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQgPSBmdW5jdGlvbiAob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgc0ZpbHRlck5hbWU6IGFueSwgc1BhdGg/OiBhbnkpIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJDb25kaXRpb25zW3NGaWx0ZXJOYW1lXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUZpbHRlcnMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXIgPSBhRmlsdGVyc1tpdGVtXTtcblx0XHRcdHNMb3cgPSAob0ZpbHRlci52YWx1ZXNbMF0gJiYgb0ZpbHRlci52YWx1ZXNbMF0udG9TdHJpbmcoKSkgfHwgXCJcIjtcblx0XHRcdHNIaWdoID0gKG9GaWx0ZXIudmFsdWVzWzFdICYmIG9GaWx0ZXIudmFsdWVzWzFdLnRvU3RyaW5nKCkpIHx8IG51bGw7XG5cdFx0XHRpZiAob0ZpbHRlci5vcGVyYXRvciA9PT0gXCJUT0RBWVwiIHx8IG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiREFURVwiKSB7XG5cdFx0XHRcdGNvbnN0IGFGaWx0ZXIgPSBvRmlsdGVySW5mb1swXS5hRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24gKG9GaWx0ZXI6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRmlsdGVyLnNQYXRoID09PSBzRmlsdGVyTmFtZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNMb3cgPSBhRmlsdGVyWzBdLm9WYWx1ZTEgfHwgXCJcIjtcblx0XHRcdFx0c0hpZ2ggPSBudWxsO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvblZhbHVlcyA9IGZuR2V0U2lnbkFuZE9wdGlvbihvRmlsdGVyLm9wZXJhdG9yLCBzTG93LCBzSGlnaCk7XG5cdFx0XHRpZiAob1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24pIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLnNpZ24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5sb3csXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5oaWdoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoc0ZpbHRlciBpbiBvRmlsdGVyQ29uZGl0aW9ucykge1xuXHRcdC8vIG9ubHkgYWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNWIGFscmVhZHlcblx0XHRpZiAoIW9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzRmlsdGVyKSkge1xuXHRcdFx0Ly8gVE9ETyA6IGN1c3RvbSBmaWx0ZXJzIHNob3VsZCBiZSBpZ25vcmVkIG1vcmUgZ2VuZXJpY2FsbHlcblx0XHRcdGlmIChzRmlsdGVyID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzRmlsdGVyIGluIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBwYWdlIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIHBhZ2UgY29udGV4dCB0byBTVlxuXHRcdFx0aWYgKHNGaWx0ZXIgaW4gb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKSB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkczogYW55W10sIG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IGFueSkge1xuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcyAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYVNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpLFxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyAmJiBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkc1tpXS4kUHJvcGVydHlQYXRoID09PSBcIkRpc3BsYXlDdXJyZW5jeVwiICYmXG5cdFx0XHRcdCghYVNWT3B0aW9uIHx8ICFhU1ZPcHRpb24ubGVuZ3RoKSAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24ubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uID0gYURlZmF1bHRTVk9wdGlvblswXTtcblx0XHRcdFx0Y29uc3Qgc1NpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdO1xuXHRcdFx0XHRjb25zdCBzT3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdO1xuXHRcdFx0XHRjb25zdCBzTG93ID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiTG93XCJdO1xuXHRcdFx0XHRjb25zdCBzSGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiLCBzU2lnbiwgc09wdGlvbiwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogYW55LCBvVmlldz86IGFueSkge1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIpLiRLZXk7XG5cdGNvbnN0IGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMgPSBbXTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzUGF0aCArIFwiL1wiKTtcblx0Zm9yIChjb25zdCBpdGVtIGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IG9Bbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNQYXRoICsgXCIvXCIgKyBpdGVtICsgXCJAXCIpIHx8IHt9LFxuXHRcdFx0XHRiSXNLZXkgPSBhVGVjaG5pY2FsS2V5cy5pbmRleE9mKGl0ZW0pID4gLTEsXG5cdFx0XHRcdGJJc0ltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkID0gIW9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSxcblx0XHRcdFx0YklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdFx0YklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlID09PSBcIkVkbS5HdWlkXCJcblx0XHRcdFx0XHRcdD8gYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYklzSW1tdXRhYmxlIHx8IGJJc0tleUNvbXB1dGVkRGVmYXVsdFZhbHVlV2l0aFRleHQgfHwgKGJJc0tleSAmJiBvRW50aXR5VHlwZVtpdGVtXS4kVHlwZSAhPT0gXCJFZG0uR3VpZFwiKSkgJiZcblx0XHRcdFx0YklzTm9uQ29tcHV0ZWQgJiZcblx0XHRcdFx0YklzVmlzaWJsZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGFOb25Db21wdXRlZFZpc2libGVGaWVsZHMucHVzaChpdGVtKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFiSXNOb25Db21wdXRlZCAmJiBiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSAmJiBvVmlldykge1xuXHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBnZXRBcHBDb21wb25lbnQob1ZpZXcpLmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdGNvbnN0IHNNZXNzYWdlID0gXCJDb3JlLkNvbXB1dGVkRGVmYXVsdFZhbHVlIGlzIGlnbm9yZWQgYXMgQ29yZS5Db21wdXRlZCBpcyBhbHJlYWR5IHNldCB0byB0cnVlXCI7XG5cdFx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sXG5cdFx0XHRcdFx0SXNzdWVTZXZlcml0eS5NZWRpdW0sXG5cdFx0XHRcdFx0c01lc3NhZ2UsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkFubm90YXRpb25zPy5JZ25vcmVkQW5ub3RhdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcztcbn1cbmZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogYW55W10sXG5cdG9Nb2RlbDogSlNPTk1vZGVsLFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0b1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRpZiAoIW9TaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1NoZWxsU2VydmljZXMuZ2V0U3RhcnR1cEFwcFN0YXRlKG9BcHBDb21wb25lbnQpLnRoZW4oZnVuY3Rpb24gKG9TdGFydHVwQXBwU3RhdGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RhdGEgPSBvU3RhcnR1cEFwcFN0YXRlLmdldERhdGEoKSB8fCB7fSxcblx0XHRcdFx0YUV4dGVuZGVkUGFyYW1ldGVycyA9IChvRGF0YS5zZWxlY3Rpb25WYXJpYW50ICYmIG9EYXRhLnNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucykgfHwgW107XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gXCIvXCIgKyBvUGFyYW1ldGVyLiROYW1lXG5cdFx0XHRcdFx0OiBvUGFyYW1ldGVyLmdldFBhdGgoKS5zbGljZShvUGFyYW1ldGVyLmdldFBhdGgoKS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck5hbWUgPSBiSXNBY3Rpb24gPyBzUHJvcGVydHlOYW1lLnNsaWNlKDEpIDogc1Byb3BlcnR5TmFtZTtcblx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzICYmIGJJc0NyZWF0ZSkge1xuXHRcdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvQWN0aW9uRGVmYXVsdFZhbHVlc1tzUGFyYW1ldGVyTmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV1bMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFFeHRlbmRlZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaSBpbiBhRXh0ZW5kZWRQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvRXh0ZW5kZWRQYXJhbWV0ZXIgPSBhRXh0ZW5kZWRQYXJhbWV0ZXJzW2ldO1xuXHRcdFx0XHRcdFx0aWYgKG9FeHRlbmRlZFBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUgPT09IHNQYXJhbWV0ZXJOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9SYW5nZSA9IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0PyBvRXh0ZW5kZWRQYXJhbWV0ZXIuUmFuZ2VzW29FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXMubGVuZ3RoIC0gMV1cblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0aWYgKG9SYW5nZSAmJiBvUmFuZ2UuU2lnbiA9PT0gXCJJXCIgJiYgb1JhbmdlLk9wdGlvbiA9PT0gXCJFUVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9SYW5nZS5Mb3cpOyAvLyBoaWdoIGlzIGlnbm9yZWQgd2hlbiBPcHRpb249RVFcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlKG9TdGFydHVwUGFyYW1ldGVyczogYW55LCBvSW5ib3VuZFBhcmFtZXRlcnM6IGFueSkge1xuXHRjb25zdCBvSW5ib3VuZHMgPSBvSW5ib3VuZFBhcmFtZXRlcnMsXG5cdFx0YUNyZWF0ZVBhcmFtZXRlcnMgPSBvSW5ib3VuZHNcblx0XHRcdD8gT2JqZWN0LmtleXMob0luYm91bmRzKS5maWx0ZXIoZnVuY3Rpb24gKHNQYXJhbWV0ZXI6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBvSW5ib3VuZHNbc1BhcmFtZXRlcl0udXNlRm9yQ3JlYXRlO1xuXHRcdFx0ICB9KVxuXHRcdFx0OiBbXTtcblx0bGV0IG9SZXQ7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYUNyZWF0ZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBzQ3JlYXRlUGFyYW1ldGVyID0gYUNyZWF0ZVBhcmFtZXRlcnNbaV07XG5cdFx0Y29uc3QgYVZhbHVlcyA9IG9TdGFydHVwUGFyYW1ldGVycyAmJiBvU3RhcnR1cFBhcmFtZXRlcnNbc0NyZWF0ZVBhcmFtZXRlcl07XG5cdFx0aWYgKGFWYWx1ZXMgJiYgYVZhbHVlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdG9SZXQgPSBvUmV0IHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdFx0XHRvUmV0W3NDcmVhdGVQYXJhbWV0ZXJdID0gYVZhbHVlc1swXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9SZXQ7XG59XG5mdW5jdGlvbiBnZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kOiBhbnkpIHtcblx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZzogYW55W10gPSBbXTtcblx0aWYgKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmQucGFyYW1ldGVycykgfHwgW107XG5cdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKHNQYXJhbTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9NYXBwaW5nID0gb091dGJvdW5kLnBhcmFtZXRlcnNbc1BhcmFtXTtcblx0XHRcdFx0aWYgKG9NYXBwaW5nLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLnZhbHVlICYmIG9NYXBwaW5nLnZhbHVlLmZvcm1hdCA9PT0gXCJiaW5kaW5nXCIpIHtcblx0XHRcdFx0XHQvLyB1c2luZyB0aGUgZm9ybWF0IG9mIFVJLk1hcHBpbmdcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IG9NYXBwaW5nLnZhbHVlLnZhbHVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCI6IHNQYXJhbVxuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRpZiAoYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBUbyBjaGVjayBpZiB0aGUgc2VtYW50aWNPYmplY3QgTWFwcGluZyBpcyBkb25lIGZvciB0aGUgc2FtZSBsb2NhbCBwcm9wZXJ0eSBtb3JlIHRoYXQgb25jZSB0aGVuIGZpcnN0IG9uZSB3aWxsIGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0TWFwcGluZy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZ1tpXVtcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdICE9PVxuXHRcdFx0XHRcdFx0XHRcdG9TZW1hbnRpY01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXVxuXHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhU2VtYW50aWNPYmplY3RNYXBwaW5nO1xufVxuZnVuY3Rpb24gZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKG9WaWV3RGF0YTogYW55LCBvQ3Jvc3NOYXY6IGFueSkge1xuXHRjb25zdCBvSGVhZGVyRmFjZXRJdGVtczogYW55ID0ge307XG5cdGxldCBzSWQ7XG5cdGNvbnN0IG9Db250cm9sQ29uZmlnID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uO1xuXHRmb3IgKGNvbnN0IGNvbmZpZyBpbiBvQ29udHJvbENvbmZpZykge1xuXHRcdGlmIChjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIikgPiAtMSB8fCBjb25maWcuaW5kZXhPZihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQgJiZcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgc091dGJvdW5kID0gb0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uLnRhcmdldE91dGJvdW5kLm91dGJvdW5kO1xuXHRcdFx0XHRjb25zdCBvT3V0Ym91bmQgPSBvQ3Jvc3NOYXZbc091dGJvdW5kXTtcblx0XHRcdFx0aWYgKG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvT3V0Ym91bmQuYWN0aW9uKSB7XG5cdFx0XHRcdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQ2hhcnRcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJNaWNyb0NoYXJ0TGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c0lkID0gZ2VuZXJhdGUoW1wiZmVcIiwgXCJIZWFkZXJEUExpbmtcIiwgY29uZmlnXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob091dGJvdW5kKTtcblx0XHRcdFx0XHRvSGVhZGVyRmFjZXRJdGVtc1tzSWRdID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9PdXRib3VuZC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdGFjdGlvbjogb091dGJvdW5kLmFjdGlvbixcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZ1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ3Jvc3MgbmF2aWdhdGlvbiBvdXRib3VuZCBpcyBjb25maWd1cmVkIHdpdGhvdXQgc2VtYW50aWMgb2JqZWN0IGFuZCBhY3Rpb24gZm9yIFwiICsgc091dGJvdW5kKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHZNYXBwaW5nczogb2JqZWN0KSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRpZiAob1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGggKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RcIik7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRzUGF0aCArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiXG5cdFx0KTtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyA9IFt7IHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QgfV07XG5cdFx0Y29uc3Qgb1NlbWFudGljT2JqZWN0ID0ge1xuXHRcdFx0c2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdFxuXHRcdH07XG5cdFx0cmVzb2x2ZSh7XG5cdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNQYXRoLFxuXHRcdFx0c2VtYW50aWNPYmplY3RGb3JHZXRMaW5rczogYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MsXG5cdFx0XHRzZW1hbnRpY09iamVjdDogb1NlbWFudGljT2JqZWN0LFxuXHRcdFx0dW5hdmFpbGFibGVBY3Rpb25zOiBhU2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnNcblx0XHR9KTtcblx0fSkuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0TG9nLmVycm9yKFwiRXJyb3IgaW4gZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aFwiLCBvRXJyb3IpO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwoYUdldExpbmtzUHJvbWlzZXM6IGFueSwgYVNlbWFudGljT2JqZWN0czogYW55LCBvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgc0N1cnJlbnRIYXNoOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFHZXRMaW5rc1Byb21pc2VzKVxuXHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzOiBhbnlbXSkge1xuXHRcdFx0bGV0IGFMaW5rcyxcblx0XHRcdFx0X29MaW5rLFxuXHRcdFx0XHRfc0xpbmtJbnRlbnRBY3Rpb24sXG5cdFx0XHRcdGFGaW5hbExpbmtzOiBhbnlbXSA9IFtdO1xuXHRcdFx0bGV0IG9GaW5hbFNlbWFudGljT2JqZWN0czogYW55ID0ge307XG5cdFx0XHRjb25zdCBiSW50ZW50SGFzQWN0aW9ucyA9IGZ1bmN0aW9uIChzSW50ZW50OiBhbnksIGFBY3Rpb25zOiBhbnkpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBpbnRlbnQgaW4gYUFjdGlvbnMpIHtcblx0XHRcdFx0XHRpZiAoaW50ZW50ID09PSBzSW50ZW50KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBhVmFsdWVzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRcdGFMaW5rcyA9IGFWYWx1ZXNba107XG5cdFx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDAgJiYgYUxpbmtzWzBdICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBvU2VtYW50aWNPYmplY3Q6IGFueSA9IHt9O1xuXHRcdFx0XHRcdGxldCBvVG1wID0ge307XG5cdFx0XHRcdFx0bGV0IHNBbHRlcm5hdGVQYXRoO1xuXHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUxpbmtzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRhRmluYWxMaW5rcy5wdXNoKFtdKTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGxldCBoYXNUYXJnZXRzID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpTGlua0NvdW50ID0gMDsgaUxpbmtDb3VudCA8IGFMaW5rc1tpXVswXS5sZW5ndGg7IGlMaW5rQ291bnQrKykge1xuXHRcdFx0XHRcdFx0XHRfb0xpbmsgPSBhTGlua3NbaV1bMF1baUxpbmtDb3VudF07XG5cdFx0XHRcdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbiA9IF9vTGluayAmJiBfb0xpbmsuaW50ZW50LnNwbGl0KFwiP1wiKVswXS5zcGxpdChcIi1cIilbMV07XG5cblx0XHRcdFx0XHRcdFx0aWYgKCEoX29MaW5rICYmIF9vTGluay5pbnRlbnQgJiYgX29MaW5rLmludGVudC5pbmRleE9mKHNDdXJyZW50SGFzaCkgPT09IDApKSB7XG5cdFx0XHRcdFx0XHRcdFx0aGFzVGFyZ2V0c05vdEZpbHRlcmVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIWJJbnRlbnRIYXNBY3Rpb25zKF9zTGlua0ludGVudEFjdGlvbiwgYVNlbWFudGljT2JqZWN0c1trXS51bmF2YWlsYWJsZUFjdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhRmluYWxMaW5rc1tpXS5wdXNoKF9vTGluayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG9UbXAgPSB7XG5cdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBhU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRwYXRoOiBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHM6IGhhc1RhcmdldHMsXG5cdFx0XHRcdFx0XHRcdEhhc1RhcmdldHNOb3RGaWx0ZXJlZDogaGFzVGFyZ2V0c05vdEZpbHRlcmVkXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c0FsdGVybmF0ZVBhdGggPSBhU2VtYW50aWNPYmplY3RzW2tdLnBhdGgucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcblx0XHRcdFx0XHRcdGlmIChvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0sXG5cdFx0XHRcdFx0XHRcdG9UbXBcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNTZW1hbnRpY09iamVjdE5hbWUgPSBPYmplY3Qua2V5cyhvU2VtYW50aWNPYmplY3QpWzBdO1xuXHRcdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmluY2x1ZGVzKHNTZW1hbnRpY09iamVjdE5hbWUpKSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0gPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHNbc1NlbWFudGljT2JqZWN0TmFtZV0sXG5cdFx0XHRcdFx0XHRcdG9TZW1hbnRpY09iamVjdFtzU2VtYW50aWNPYmplY3ROYW1lXVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0ZpbmFsU2VtYW50aWNPYmplY3RzID0gT2JqZWN0LmFzc2lnbihvRmluYWxTZW1hbnRpY09iamVjdHMsIG9TZW1hbnRpY09iamVjdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFGaW5hbExpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChPYmplY3Qua2V5cyhvRmluYWxTZW1hbnRpY09iamVjdHMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdFwic2VtYW50aWNzVGFyZ2V0c1wiLFxuXHRcdFx0XHRcdG1lcmdlT2JqZWN0cyhvRmluYWxTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcInNlbWFudGljc1RhcmdldHNcIikpXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHJldHVybiBvRmluYWxTZW1hbnRpY09iamVjdHM7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsOiBDYW5ub3QgcmVhZCBsaW5rc1wiLCBvRXJyb3IpO1xuXHRcdH0pO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudDogYW55LCBvVmlldzogYW55LCBvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWwsIHNQYXRoKTtcbn1cbmZ1bmN0aW9uIGZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbChvQ29udHJvbGxlcjogYW55LCBzUGFnZU1vZGVsOiBzdHJpbmcpIHtcblx0Y29uc3QgX2ZuZmluZFZhbHVlc0hlbHBlciA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnksIGxpc3Q6IGFueSkge1xuXHRcdGlmICghb2JqKSB7XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGkgaW4gb2JqKSB7XG5cdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtpXSwga2V5LCBbXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGxpc3Q7XG5cdFx0fVxuXHRcdGlmIChvYmpba2V5XSkge1xuXHRcdFx0bGlzdC5wdXNoKG9ialtrZXldKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBPYmplY3Qua2V5cyhvYmopO1xuXHRcdFx0aWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGxpc3QgPSBsaXN0LmNvbmNhdChfZm5maW5kVmFsdWVzSGVscGVyKG9ialtjaGlsZHJlbltpXV0sIGtleSwgW10pKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbGlzdDtcblx0fTtcblx0Y29uc3QgX2ZuZmluZFZhbHVlcyA9IGZ1bmN0aW9uIChvYmo6IGFueSwga2V5OiBhbnkpIHtcblx0XHRyZXR1cm4gX2ZuZmluZFZhbHVlc0hlbHBlcihvYmosIGtleSwgW10pO1xuXHR9O1xuXHRjb25zdCBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMgPSBmdW5jdGlvbiAoYVNlbWFudGljT2JqZWN0UGF0aDogYW55KSB7XG5cdFx0cmV0dXJuIGFTZW1hbnRpY09iamVjdFBhdGguZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG5cdFx0fSk7XG5cdH07XG5cdGNvbnN0IG9WaWV3ID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXG5cdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMgPSBbXTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRyb2xsZXIuZ2V0T3duZXJDb21wb25lbnQoKTtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgb1BhZ2VNb2RlbCA9IG9Db21wb25lbnQuZ2V0TW9kZWwoc1BhZ2VNb2RlbCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChKU09OLnN0cmluZ2lmeShvUGFnZU1vZGVsKSA9PT0gXCJ7fVwiKSB7XG5cdFx0XHRvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5fZ2V0T2JqZWN0KFwiL1wiLCB1bmRlZmluZWQpO1xuXHRcdH1cblx0XHRsZXQgYVNlbWFudGljT2JqZWN0c0ZvdW5kID0gX2ZuZmluZFZhbHVlcyhvUGFnZU1vZGVsLCBcInNlbWFudGljT2JqZWN0UGF0aFwiKTtcblx0XHRhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5EZWxldGVEdXBsaWNhdGVTZW1hbnRpY09iamVjdHMoYVNlbWFudGljT2JqZWN0c0ZvdW5kKTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlSGVscGVyID0gQ29tbW9uVXRpbHMuZ2V0U2hlbGxTZXJ2aWNlcyhvQXBwQ29tcG9uZW50KTtcblx0XHRsZXQgc0N1cnJlbnRIYXNoID0gQ29tbW9uVXRpbHMuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyA9IFtdO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHM6IGFueVtdID0gW107XG5cdFx0bGV0IHNQYXRoO1xuXHRcdGxldCBfb1NlbWFudGljT2JqZWN0O1xuXG5cdFx0aWYgKHNDdXJyZW50SGFzaCAmJiBzQ3VycmVudEhhc2guaW5kZXhPZihcIj9cIikgIT09IC0xKSB7XG5cdFx0XHQvLyBzQ3VycmVudEhhc2ggY2FuIGNvbnRhaW4gcXVlcnkgc3RyaW5nLCBjdXQgaXQgb2ZmIVxuXHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0XHR9XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZW1hbnRpY09iamVjdHNGb3VuZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c1BhdGggPSBhU2VtYW50aWNPYmplY3RzRm91bmRbaV07XG5cdFx0XHRhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMucHVzaChDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdFByb21pc2Uob0FwcENvbXBvbmVudCwgb1ZpZXcsIG9NZXRhTW9kZWwsIHNQYXRoKSk7XG5cdFx0fVxuXG5cdFx0aWYgKGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0UHJvbWlzZS5hbGwoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoYVZhbHVlczogYW55W10pIHtcblx0XHRcdFx0XHRjb25zdCBhR2V0TGlua3NQcm9taXNlcyA9IFtdO1xuXHRcdFx0XHRcdGxldCBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRjb25zdCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQgPSBhVmFsdWVzLmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ID09PSBcIm9iamVjdFwiXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0c1NlbU9iakV4cHJlc3Npb24gPSBjb21waWxlQmluZGluZyhiaW5kaW5nRXhwcmVzc2lvbihlbGVtZW50LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LiRQYXRoKSk7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzWzBdLnNlbWFudGljT2JqZWN0ID0gc1NlbU9iakV4cHJlc3Npb247XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50LnNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgPSBhU2VtYW50aWNPYmplY3RzUmVzb2x2ZWRbal07XG5cdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdF9vU2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHQhKF9vU2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuaW5kZXhPZihcIntcIikgPT09IDApXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzLnB1c2goX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzKTtcblx0XHRcdFx0XHRcdFx0YVNlbWFudGljT2JqZWN0cy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IF9vU2VtYW50aWNPYmplY3QudW5hdmFpbGFibGVBY3Rpb25zLFxuXHRcdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXS5zZW1hbnRpY09iamVjdFBhdGhcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGFHZXRMaW5rc1Byb21pc2VzLnB1c2gob1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rc1dpdGhDYWNoZShbX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdEZvckdldExpbmtzXSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMudXBkYXRlU2VtYW50aWNUYXJnZXRzKGFHZXRMaW5rc1Byb21pc2VzLCBhU2VtYW50aWNPYmplY3RzLCBvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNDdXJyZW50SGFzaCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21UYWJsZTogQ2Fubm90IGdldCBTZW1hbnRpYyBPYmplY3RzXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjogYW55LCBzUmVzdHJpY3Rpb246IGFueSkge1xuXHRjb25zdCBGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnM7XG5cdGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5SRVFVSVJFRF9QUk9QRVJUSUVTIHx8IHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLk5PTl9GSUxURVJBQkxFX1BST1BFUlRJRVMpIHtcblx0XHRsZXQgYVByb3BzID0gW107XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0pIHtcblx0XHRcdGFQcm9wcyA9IG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uW3NSZXN0cmljdGlvbl0ubWFwKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb1Byb3BlcnR5LiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFQcm9wcztcblx0fSBlbHNlIGlmIChzUmVzdHJpY3Rpb24gPT09IEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB7XG5cdFx0Y29uc3QgbUFsbG93ZWRFeHByZXNzaW9uczogYW55ID0ge307XG5cdFx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uICYmIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMpIHtcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uLkZpbHRlckV4cHJlc3Npb25SZXN0cmljdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdFx0XHRpZiAobUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0pIHtcblx0XHRcdFx0XHRtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXS5wdXNoKG9Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdID0gW29Qcm9wZXJ0eS5BbGxvd2VkRXhwcmVzc2lvbnNdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1BbGxvd2VkRXhwcmVzc2lvbnM7XG5cdH1cblx0Ly8gRGVmYXVsdCByZXR1cm4gdGhlIEZpbHRlclJlc3RyaWN0aW9ucyBBbm5vdGF0aW9uXG5cdHJldHVybiBvRmlsdGVyUmVzdHJpY3Rpb25zQW5ub3RhdGlvbjtcbn1cbmZ1bmN0aW9uIGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0Y29uc3Qgb1JldDogYW55ID0ge30sXG5cdFx0RmlsdGVyUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuRmlsdGVyUmVzdHJpY3Rpb25zLFxuXHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlTZXRQYXRoICsgXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnNcIikgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIgKyBuYXZpZ2F0aW9uUGF0aCk7XG5cdGlmIChlbnRpdHlTZXQ/LiRraW5kID09PSBcIlNpbmdsZXRvblwiKSB7XG5cdFx0Y29uc3Qgc2luZ2xldG9uTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdHJldHVybiBcIi9cIiArIHNpbmdsZXRvbk5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHBhdGg6IHN0cmluZywgbW9kZWw6IE9EYXRhTW9kZWwpIHtcblx0aWYgKCFwYXRoIHx8ICFtb2RlbCkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cdH1cblx0Y29uc3QgbWV0YU1vZGVsID0gbW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cdC8vIEZpbmQgdGhlIHVuZGVybHlpbmcgZW50aXR5IHNldCBmcm9tIHRoZSBwcm9wZXJ0eSBwYXRoIGFuZCBjaGVjayB3aGV0aGVyIGl0IGlzIGEgc2luZ2xldG9uLlxuXHRjb25zdCByZXNvbHZlZFBhdGggPSBnZXRTaW5nbGV0b25QYXRoKHBhdGgsIG1ldGFNb2RlbCk7XG5cdGlmIChyZXNvbHZlZFBhdGgpIHtcblx0XHRjb25zdCBwcm9wZXJ0eUJpbmRpbmcgPSBtb2RlbC5iaW5kUHJvcGVydHkocmVzb2x2ZWRQYXRoKTtcblx0XHRyZXR1cm4gcHJvcGVydHlCaW5kaW5nLnJlcXVlc3RWYWx1ZSgpO1xuXHR9XG5cblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50VG9CaW5kaW5nSW5mbyhvQ29udHJvbDogQ29udHJvbCwgc0V2ZW50TmFtZTogc3RyaW5nLCBmSGFuZGxlcjogRnVuY3Rpb24pIHtcblx0bGV0IG9CaW5kaW5nSW5mbzogYW55O1xuXHRjb25zdCBzZXRCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uICgpIHtcblx0XHRpZiAob0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mby5ldmVudHMpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHNbc0V2ZW50TmFtZV0gPSBmSGFuZGxlcjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZPcmlnaW5hbEhhbmRsZXIgPSBvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdO1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0XHRcdFx0ZkhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdFx0Zk9yaWdpbmFsSGFuZGxlci5hcHBseSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChvQ29udHJvbC5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKSB7XG5cdFx0KG9Db250cm9sIGFzIGFueSlcblx0XHRcdC5pbm5lckNoYXJ0Qm91bmQoKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8gPSAob0NvbnRyb2wgYXMgYW55KS5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NvbnRyb2wpLmdldEJpbmRpbmdJbmZvKFwiZGF0YVwiKTtcblx0XHRcdFx0c2V0QmluZGluZ0luZm8oKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKHNFcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihzRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b0JpbmRpbmdJbmZvID0gb0NvbnRyb2wuZGF0YShcInJvd3NCaW5kaW5nSW5mb1wiKTtcblx0XHRzZXRCaW5kaW5nSW5mbygpO1xuXHR9XG59XG5mdW5jdGlvbiBsb2FkTWFjcm9MaWJyYXJ5KCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvZmUvbWFjcm9zL21hY3JvTGlicmFyeVwiXSwgZnVuY3Rpb24gKC8qbWFjcm9MaWJyYXJ5Ki8pIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZChzR3JvdXBJZDogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcsIG9Nb2RlbDogT0RhdGFNb2RlbCwgYU1lc3NhZ2VzOiBhbnlbXSkge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpLFxuXHRcdHNBY3Rpb25OYW1lID0gYWN0aW9uTmFtZSxcblx0XHRzQ2FuY2VsQnV0dG9uVHh0ID0gbG9jYWxJMThuUmVmLmdldFRleHQoXCJDQU5DRUxcIik7XG5cdGlmIChhTWVzc2FnZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2UgPSBhTWVzc2FnZXNbMF0ubWVzc2FnZSArIFwiXFxuXCIgKyBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIlBST0NFRURcIik7XG5cdFx0Y29uc3QgZGlhbG9nUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc01lc3NhZ2UsIHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0YWN0aW9uczogW3NBY3Rpb25OYW1lLCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBkaWFsb2dQcm9taXNlO1xuXHR9XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0KFwiSUdOT1JFXCIsIGxvY2FsSTE4blJlZiwgc0FjdGlvbk5hbWUpXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5zZXRFbmRCdXR0b24oXG5cdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRleHQ6IHNDYW5jZWxCdXR0b25UeHRcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VDb2x1bW4ob0NvbnRyb2w6IGFueSk6IHN0cmluZyB7XG5cdGlmICghb0NvbnRyb2wgfHwgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUubXZjLlhNTFZpZXdcIikpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gb0NvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1RpdGxlO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRyb2wgJiYgKG9Db250cm9sLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgYW55KSxcblx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvQ29udHJvbC5kYXRhKFwibWV0YVBhdGhcIik7XG5cdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0N1cnJlbnRFbnRpdHlTZXROYW1lICsgXCIvJFR5cGUvJEtleVwiKTtcblx0Y29uc3QgYUZpbHRlcmVkVGVjaG5pY2FsS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRhVGVjaG5pY2FsS2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh0ZWNobmljYWxLZXk6IHN0cmluZykge1xuXHRcdGlmICh0ZWNobmljYWxLZXkgIT09IFwiSXNBY3RpdmVFbnRpdHlcIikge1xuXHRcdFx0YUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5wdXNoKHRlY2huaWNhbEtleSk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3Qgc2VtYW50aWNLZXlDb2x1bW5zID0gb0NvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuc2VtYW50aWNLZXlzO1xuXG5cdGNvbnN0IGFWaXNpYmxlQ29sdW1uczogYW55ID0gW107XG5cdGNvbnN0IGFUYWJsZUNvbHVtbnMgPSBvQ29udHJvbC5nZXRDb2x1bW5zKCk7XG5cdGFUYWJsZUNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAob0NvbHVtbjogYW55KSB7XG5cdFx0Y29uc3QgY29sdW1uUGF0aFNwbGl0ID0gb0NvbHVtbi5nZXRJZCgpLnNwbGl0KFwiOjpcIik7XG5cdFx0YVZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uUGF0aFNwbGl0W2NvbHVtblBhdGhTcGxpdC5sZW5ndGggLSAxXSk7XG5cdH0pO1xuXHRsZXQgc3VidGl0bGVDb2x1bW46IHN0cmluZyA9IFwiXCI7IC8vc2V0IHRoZSBjb3JyZXNzcG9uZGluZyBzdWJ0aXRsZSBjb2x1bW5cblx0aWYgKGhlYWRlckluZm9UaXRsZVBhdGggIT09IHVuZGVmaW5lZCAmJiBhVmlzaWJsZUNvbHVtbnMuaW5kZXhPZihoZWFkZXJJbmZvVGl0bGVQYXRoKSAhPT0gLTEpIHtcblx0XHRzdWJ0aXRsZUNvbHVtbiA9IGhlYWRlckluZm9UaXRsZVBhdGg7XG5cdH0gZWxzZSBpZiAoXG5cdFx0c2VtYW50aWNLZXlDb2x1bW5zICE9PSB1bmRlZmluZWQgJiZcblx0XHRzZW1hbnRpY0tleUNvbHVtbnMubGVuZ3RoID09PSAxICYmXG5cdFx0YVZpc2libGVDb2x1bW5zLmluZGV4T2Yoc2VtYW50aWNLZXlDb2x1bW5zWzBdKSAhPT0gLTFcblx0KSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBzZW1hbnRpY0tleUNvbHVtbnNbMF07XG5cdH1cblx0Ly8gc2V0IGNvcnJlY3QgY29udGV4dCB0byBjb3JyZWN0IG1lc3NhZ2UgaW4gbWVzc2FnZSBtb2RlbFxuXHRlbHNlIGlmIChhRmlsdGVyZWRUZWNobmljYWxLZXlzICE9PSB1bmRlZmluZWQgJiYgYUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5sZW5ndGggPT09IDEpIHtcblx0XHRzdWJ0aXRsZUNvbHVtbiA9IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdH1cblx0cmV0dXJuIHN1YnRpdGxlQ29sdW1uO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3RyaXBUZXh0KFxuXHR2aWV3OiBhbnksXG5cdGFJZ25vcmVkTGFiZWxzOiBhbnksXG5cdG9GaWx0ZXJCYXI6IGFueSxcblx0YklzQ2hhcnQ6IGFueSxcblx0YklzU2VhcmNoSWdub3JlZDogYW55LFxuXHRzVGFiVGl0bGU6IGFueSxcblx0b1Jlc291cmNlQnVuZGxlOiBhbnksXG5cdGZuR2V0TG9jYWxpemVkVGV4dDogYW55XG4pOiBzdHJpbmcge1xuXHRsZXQgc1RleHQgPSBcIlwiO1xuXHRpZiAoYklzQ2hhcnQpIHtcblx0XHRjb25zdCBvQ2hhcnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiO1xuXHRcdGNvbnN0IG9NYWNyb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGJJc1NlYXJjaElnbm9yZWQgPSBiSXNTZWFyY2hJZ25vcmVkICYmIGFJZ25vcmVkTGFiZWxzLmluY2x1ZGVzKG9NYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJTFRFUkJBUl9TRUFSQ0hcIikpO1xuXHRcdGlmIChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDIgJiYgYklzU2VhcmNoSWdub3JlZCAmJiBiSXNEcmFmdFN1cHBvcnRlZCkge1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTFJfTVVMVElWSVpfQ0hBUlRfSUdOT1JFRF9GSUxURVJfRFJBRlRfREFUQV9BTkRfU0VBUkNIXCIpO1xuXHRcdH0gZWxzZSBpZiAoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxICYmIGJJc0RyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NVUxUSVZJWl9DSEFSVF9JR05PUkVEX0ZJTFRFUl9EUkFGVF9EQVRBXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzUmVzb3VyY2UgPVxuXHRcdFx0XHRcIkNfTFJfTVVMVElWSVpfQ0hBUlRfXCIgK1xuXHRcdFx0XHQoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxID8gXCJTSU5HTEVcIiA6IFwiTVVMVElcIikgK1xuXHRcdFx0XHRcIl9JR05PUkVEX0ZJTFRFUl9cIiArXG5cdFx0XHRcdChzeXN0ZW0uZGVza3RvcCA/IFwiTEFSR0VcIiA6IFwiU01BTExcIik7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZSwgW2FJZ25vcmVkTGFiZWxzLmpvaW4oXCIsIFwiKV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBzUmVzb3VyY2UgPVxuXHRcdFx0XHRcIkNfTFJfTVVMVElUQUJMRVNfXCIgK1xuXHRcdFx0XHQoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxID8gXCJTSU5HTEVcIiA6IFwiTVVMVElcIikgK1xuXHRcdFx0XHRcIl9JR05PUkVEX0ZJTFRFUl9cIiArXG5cdFx0XHRcdChzeXN0ZW0uZGVza3RvcCA/IFwiTEFSR0VcIiA6IFwiU01BTExcIiksXG5cdFx0XHRzTG9jYWxpemVkVGFibGVUaXRsZSA9IGZuR2V0TG9jYWxpemVkVGV4dChzVGFiVGl0bGUsIG9GaWx0ZXJCYXIpO1xuXHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlLCBbYUlnbm9yZWRMYWJlbHMuam9pbihcIiwgXCIpLCBzTG9jYWxpemVkVGFibGVUaXRsZV0pO1xuXHR9XG5cdHJldHVybiBzVGV4dDtcbn1cblxuY29uc3QgQ29tbW9uVXRpbHMgPSB7XG5cdGlzUHJvcGVydHlGaWx0ZXJhYmxlOiBpc1Byb3BlcnR5RmlsdGVyYWJsZSxcblx0aXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlOiBpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUsXG5cdHJlbW92ZVNlbnNpdGl2ZURhdGE6IHJlbW92ZVNlbnNpdGl2ZURhdGEsXG5cdGZpcmVCdXR0b25QcmVzczogZm5GaXJlQnV0dG9uUHJlc3MsXG5cdGdldFRhcmdldFZpZXc6IGdldFRhcmdldFZpZXcsXG5cdGhhc1RyYW5zaWVudENvbnRleHQ6IGZuSGFzVHJhbnNpZW50Q29udGV4dHMsXG5cdHVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlsczogZm5VcGRhdGVSZWxhdGVkQXBwc0RldGFpbHMsXG5cdHJlc29sdmVTdHJpbmd0b0Jvb2xlYW46IGZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbixcblx0Z2V0QXBwQ29tcG9uZW50OiBnZXRBcHBDb21wb25lbnQsXG5cdGdldE1hbmRhdG9yeUZpbHRlckZpZWxkczogZm5HZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMsXG5cdGdldENvbnRleHRQYXRoUHJvcGVydGllczogZm5HZXRDb250ZXh0UGF0aFByb3BlcnRpZXMsXG5cdGdldFBhcmFtZXRlckluZm86IGdldFBhcmFtZXRlckluZm8sXG5cdHVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5OiBmblVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5LFxuXHRnZXRUcmFuc2xhdGVkVGV4dDogZ2V0VHJhbnNsYXRlZFRleHQsXG5cdGdldEVudGl0eVNldE5hbWU6IGdldEVudGl0eVNldE5hbWUsXG5cdGdldEFjdGlvblBhdGg6IGdldEFjdGlvblBhdGgsXG5cdGNvbXB1dGVEaXNwbGF5TW9kZTogY29tcHV0ZURpc3BsYXlNb2RlLFxuXHRzZXRBY3Rpb25FbmFibGVtZW50OiBzZXRBY3Rpb25FbmFibGVtZW50LFxuXHRpc1N0aWNreUVkaXRNb2RlOiBpc1N0aWNreUVkaXRNb2RlLFxuXHRnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eTogZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHksXG5cdGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnM6IGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMsXG5cdGFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50OiBhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQ6IGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50LFxuXHRhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5OiBhZGREZWZhdWx0RGlzcGxheUN1cnJlbmN5LFxuXHRnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHM6IGdldE5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcyxcblx0c2V0VXNlckRlZmF1bHRzOiBzZXRVc2VyRGVmYXVsdHMsXG5cdGdldFNoZWxsU2VydmljZXM6IGdldFNoZWxsU2VydmljZXMsXG5cdGdldEhhc2g6IGdldEhhc2gsXG5cdGdldElCTkFjdGlvbnM6IGZuR2V0SUJOQWN0aW9ucyxcblx0Z2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uOiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24sXG5cdGdldFNlbWFudGljT2JqZWN0TWFwcGluZzogZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzOiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzLFxuXHRnZXRTZW1hbnRpY09iamVjdFByb21pc2U6IGZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlLFxuXHRnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsOiBmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwsXG5cdGdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoOiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoLFxuXHR1cGRhdGVTZW1hbnRpY1RhcmdldHM6IGZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWwsXG5cdGdldFByb3BlcnR5RGF0YVR5cGU6IGdldFByb3BlcnR5RGF0YVR5cGUsXG5cdGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnM6IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMsXG5cdGdldFNlYXJjaFJlc3RyaWN0aW9uczogZ2V0U2VhcmNoUmVzdHJpY3Rpb25zLFxuXHRnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGg6IGdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aCxcblx0Z2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbjogZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbixcblx0Z2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZTogZ2V0QWRkaXRpb25hbFBhcmFtc0ZvckNyZWF0ZSxcblx0cmVxdWVzdFNpbmdsZXRvblByb3BlcnR5OiByZXF1ZXN0U2luZ2xldG9uUHJvcGVydHksXG5cdHRlbXBsYXRlQ29udHJvbEZyYWdtZW50OiB0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCxcblx0YWRkRXZlbnRUb0JpbmRpbmdJbmZvOiBhZGRFdmVudFRvQmluZGluZ0luZm8sXG5cdHNldE9iamVjdE1hcHBpbmdzOiBzZXRPYmplY3RNYXBwaW5ncyxcblx0RmlsdGVyUmVzdHJpY3Rpb25zOiB7XG5cdFx0UkVRVUlSRURfUFJPUEVSVElFUzogXCJSZXF1aXJlZFByb3BlcnRpZXNcIixcblx0XHROT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTOiBcIk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzXCIsXG5cdFx0QUxMT1dFRF9FWFBSRVNTSU9OUzogXCJGaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNcIlxuXHR9LFxuXHRBbGxvd2VkRXhwcmVzc2lvbnNQcmlvOiBbXCJTaW5nbGVWYWx1ZVwiLCBcIk11bHRpVmFsdWVcIiwgXCJTaW5nbGVSYW5nZVwiLCBcIk11bHRpUmFuZ2VcIiwgXCJTZWFyY2hFeHByZXNzaW9uXCIsIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiXSxcblx0bm9ybWFsaXplU2VhcmNoVGVybTogbm9ybWFsaXplU2VhcmNoVGVybSxcblx0Zm5PblN0cmljdEhhbmRsaW5nRmFpbGVkOiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQsXG5cdGdldFNpbmdsZXRvblBhdGg6IGdldFNpbmdsZXRvblBhdGgsXG5cdGdldE1lc3NhZ2VTdHJpcFRleHQ6IGdldE1lc3NhZ2VTdHJpcFRleHQsXG5cdGdldE1lc3NhZ2VDb2x1bW46IGdldE1lc3NhZ2VDb2x1bW5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1vblV0aWxzO1xuIl19
|
|
2314
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1vblV0aWxzLnRzIl0sIm5hbWVzIjpbImFWYWxpZFR5cGVzIiwibm9ybWFsaXplU2VhcmNoVGVybSIsInNTZWFyY2hUZXJtIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInNwbGl0IiwicmVkdWNlIiwic05vcm1hbGl6ZWQiLCJzQ3VycmVudFdvcmQiLCJnZXRQcm9wZXJ0eURhdGFUeXBlIiwib05hdmlnYXRpb25Db250ZXh0Iiwic0RhdGFUeXBlIiwiZ2V0UHJvcGVydHkiLCJzQW5ub3RhdGlvblBhdGgiLCJpbmRleE9mIiwiZm5IYXNUcmFuc2llbnRDb250ZXh0cyIsIm9MaXN0QmluZGluZyIsImJIYXNUcmFuc2llbnRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImZvckVhY2giLCJvQ29udGV4dCIsImlzVHJhbnNpZW50IiwiZ2V0U2VhcmNoUmVzdHJpY3Rpb25zIiwic0Z1bGxQYXRoIiwib01ldGFNb2RlbCIsImkiLCJhTmF2aWdhdGlvblBhcnRzIiwic1BhdGgiLCJsZW5ndGgiLCJvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyIsImdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJnZXRPYmplY3QiLCJvTW9kZWwiLCJzRW50aXR5U2V0UGF0aCIsInNOYXZpZ2F0aW9uUGF0aCIsImFSZXN0cmljdGVkUHJvcGVydGllcyIsIlJlc3RyaWN0ZWRQcm9wZXJ0aWVzIiwiZmluZCIsIm9SZXN0cmljdGVkUHJvcGVydHkiLCJOYXZpZ2F0aW9uUHJvcGVydHkiLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIl9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzQ29udGV4dFBhdGgiLCJiSXNOb3RGaWx0ZXJhYmxlIiwib0Fubm90YXRpb24iLCJOb25GaWx0ZXJhYmxlUHJvcGVydGllcyIsInNvbWUiLCJwcm9wZXJ0eSIsIiRQcm9wZXJ0eVBhdGgiLCJfaXNDb250ZXh0UGF0aEZpbHRlcmFibGUiLCJzQ29udGV4UGF0aCIsImFFU1BhcnRzIiwic3BsaWNlIiwiYUNvbnRleHQiLCJzQ29udGV4dCIsImpvaW4iLCJpdGVtIiwiaW5kZXgiLCJhcnJheSIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMiLCJzVGFyZ2V0UHJvcGVydHlQYXRoIiwib1Byb3BlcnR5UGF0aCIsImlzUHJvcGVydHlGaWx0ZXJhYmxlIiwic1Byb3BlcnR5IiwiYlNraXBIaWRkZW5GaWx0ZXIiLCJFcnJvciIsImJJc0ZpbHRlcmFibGUiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsInNIaWRkZW5QYXRoIiwic0hpZGRlbkZpbHRlclBhdGgiLCJjb21waWxlRXhwcmVzc2lvbiIsIm5vdCIsIm9yIiwicGF0aEluTW9kZWwiLCJzUHJvcGVydHlEYXRhVHlwZSIsImdldFNoZWxsU2VydmljZXMiLCJvQ29udHJvbCIsImdldEFwcENvbXBvbmVudCIsImdldEhhc2giLCJzSGFzaCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsIl9nZXRTT0ludGVudHMiLCJvT2JqZWN0UGFnZUxheW91dCIsIm9TZW1hbnRpY09iamVjdCIsIm9QYXJhbSIsIm9TaGVsbFNlcnZpY2VIZWxwZXIiLCJDb21tb25VdGlscyIsImdldExpbmtzIiwic2VtYW50aWNPYmplY3QiLCJwYXJhbXMiLCJfY3JlYXRlTWFwcGluZ3MiLCJvTWFwcGluZyIsImFTT01hcHBpbmdzIiwiYU1hcHBpbmdLZXlzIiwiT2JqZWN0Iiwia2V5cyIsIm9TZW1hbnRpY01hcHBpbmciLCJwdXNoIiwiX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zIiwiYUxpbmtzIiwiYUV4Y2x1ZGVkQWN0aW9ucyIsIm9UYXJnZXRQYXJhbXMiLCJhSXRlbXMiLCJvTGluayIsInNJbnRlbnQiLCJpbnRlbnQiLCJzQWN0aW9uIiwidGV4dCIsInRhcmdldFNlbU9iamVjdCIsInRhcmdldEFjdGlvbiIsInRhcmdldFBhcmFtcyIsIl9nZXRSZWxhdGVkSW50ZW50cyIsIm9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzIiwib0JpbmRpbmdDb250ZXh0IiwiYU1hbmlmZXN0U09JdGVtcyIsInVuYXZhaWxhYmxlQWN0aW9ucyIsIm1hcHBpbmciLCJuYXZpZ2F0aW9uQ29udGV4dHMiLCJzZW1hbnRpY09iamVjdE1hcHBpbmciLCJ1cGRhdGVSZWxhdGVBcHBzTW9kZWwiLCJvRW50cnkiLCJhU2VtS2V5cyIsIm9NZXRhUGF0aCIsInNDdXJyZW50U2VtT2JqIiwic0N1cnJlbnRBY3Rpb24iLCJvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyIsImFSZWxhdGVkQXBwc01lbnVJdGVtcyIsImoiLCJzU2VtS2V5IiwidmFsdWUiLCJhVGVjaG5pY2FsS2V5cyIsImtleSIsInNPYmpLZXkiLCJvTWFuaWZlc3REYXRhIiwiZ2V0VGFyZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiYWRkaXRpb25hbFNlbWFudGljT2JqZWN0cyIsImFNYW5pZmVzdFNPS2V5cyIsInRoZW4iLCJiaW5kIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZuR2V0UGFyc2VTaGVsbEhhc2hBbmRHZXRMaW5rcyIsIm9QYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwiYWN0aW9uIiwiYUFubm90YXRpb25zU09JdGVtcyIsInNFbnRpdHlUeXBlUGF0aCIsIm9FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIl9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zIiwiYkhhc0VudGl0eVNldFNPIiwib0VudGl0eVR5cGVBbm5vdGF0aW9ucyIsImFVbmF2YWlsYWJsZUFjdGlvbnMiLCJhTWFwcGluZ3MiLCJjb25jYXQiLCJnZXRCaW5kaW5nQ29udGV4dCIsInNldFByb3BlcnR5Iiwib0VudGl0eUFubm90YXRpb25zIiwic0Fubm90YXRpb25NYXBwaW5nVGVybSIsInNBbm5vdGF0aW9uQWN0aW9uVGVybSIsInNRdWFsaWZpZXIiLCJmblVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1BhdGgiLCJnZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJzU2VtYW50aWNLZXlWb2NhYnVsYXJ5IiwicmVxdWVzdE9iamVjdCIsInJlcXVlc3RlZE9iamVjdCIsImZuRmlyZUJ1dHRvblByZXNzIiwib0J1dHRvbiIsImFBdXRob3JpemVkVHlwZXMiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJnZXRWaXNpYmxlIiwiZ2V0RW5hYmxlZCIsImZpcmVQcmVzcyIsImZuUmVzb2x2ZVN0cmluZ3RvQm9vbGVhbiIsInNWYWx1ZSIsImlzQSIsIm9Pd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJnZXRSb290Q29udHJvbCIsIlZpZXciLCJnZXRQYXJlbnQiLCJpc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJzRmllbGRDb250cm9sUGF0aCIsIm9BdHRyaWJ1dGUiLCJiSW5hcHBsaWNhYmxlIiwiYVBhcnRzIiwiaGFzT3duUHJvcGVydHkiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwiYUF0dHJpYnV0ZXMiLCJhT3V0QXR0cmlidXRlcyIsInNFbnRpdHlTZXQiLCJlbnRpdHlTZXQiLCJjb250ZXh0RGF0YSIsImFQcm9wZXJ0aWVzIiwic1Byb3AiLCJhUHJvcGVydHlBbm5vdGF0aW9ucyIsIm9GaWVsZENvbnRyb2wiLCJfZm5DaGVja0lzTWF0Y2giLCJvT2JqZWN0Iiwib0tleXNUb0NoZWNrIiwic0tleSIsImZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwib0ZpbHRlciIsIm9FbnRpdHlUeXBlIiwib1Byb3BlcnRpZXMiLCJ0ZXN0IiwiJGtpbmQiLCJmbkdldE1hbmRhdG9yeUZpbHRlckZpZWxkcyIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJmbkdldElCTkFjdGlvbnMiLCJhSUJOQWN0aW9ucyIsImFBY3Rpb25zIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRBY3Rpb24iLCJkYXRhIiwiZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9WaWV3Iiwib1BhcmFtcyIsImZuR2V0TGlua3MiLCJvRGF0YSIsImFLZXlzIiwib0lCTkFjdGlvbiIsInNTZW1hbnRpY09iamVjdCIsImFMaW5rIiwic2V0VmlzaWJsZSIsImdldFRyYW5zbGF0ZWRUZXh0Iiwic0ZyYW1ld29ya0tleSIsIm9SZXNvdXJjZUJ1bmRsZSIsInNFbnRpdHlTZXROYW1lIiwic1Jlc291cmNlS2V5IiwiYlJlc291cmNlS2V5RXhpc3RzIiwiX2NoZWNrSWZSZXNvdXJjZUtleUV4aXN0cyIsImFDdXN0b21CdW5kbGVzIiwiZ2V0VGV4dCIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJoYXNUZXh0IiwiZ2V0QWN0aW9uUGF0aCIsImJSZXR1cm5Pbmx5UGF0aCIsInNBY3Rpb25OYW1lIiwiYkNoZWNrU3RhdGljVmFsdWUiLCJzRW50aXR5VHlwZU5hbWUiLCIkVHlwZSIsInNFbnRpdHlOYW1lIiwiZ2V0RW50aXR5U2V0TmFtZSIsInNCaW5kaW5nUGFyYW1ldGVyIiwic0VudGl0eVR5cGUiLCJvRW50aXR5Q29udGFpbmVyIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJvQ29sbGVjdGlvbkFubm90YXRpb25zIiwib1RleHRBbm5vdGF0aW9uIiwib1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCIkRW51bU1lbWJlciIsIl9nZXRFbnRpdHlUeXBlIiwiX3JlcXVlc3RPYmplY3QiLCJvU2VsZWN0ZWRDb250ZXh0IiwibkJyYWNrZXRJbmRleCIsInNUYXJnZXRUeXBlIiwic2xpY2UiLCJzQ3VycmVudFR5cGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dCIsIndhcm5pbmciLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9yZXF1ZXN0UHJvcGVydHkiLCJzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoIiwib1Byb21pc2UiLCJyZXF1ZXN0U2luZ2xldG9uUHJvcGVydHkiLCJ2UHJvcGVydHlWYWx1ZSIsIl9zZXRDb250ZXh0c0Jhc2VkT25PcGVyYXRpb25BdmFpbGFibGUiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJhUmVxdWVzdFByb21pc2VzIiwiYWxsIiwiYVJlc3VsdHMiLCJhQXBwbGljYWJsZUNvbnRleHRzIiwiYU5vdEFwcGxpY2FibGVDb250ZXh0cyIsImFSZXN1bHQiLCJfc2V0RHluYW1pY0FjdGlvbkNvbnRleHRzIiwidHJhY2UiLCJhQXBwbGljYWJsZSIsImFOb3RBcHBsaWNhYmxlIiwic0R5bmFtaWNBY3Rpb25QYXRoUHJlZml4Iiwib0ludGVybmFsTW9kZWwiLCJzZXRBY3Rpb25FbmFibGVtZW50Iiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsImFTZWxlY3RlZENvbnRleHRzIiwiYVByb21pc2VzIiwiYkVuYWJsZWQiLCJvQ29udGV4dERhdGEiLCJvVHJhbnNmb3JtZWRCaW5kaW5nIiwidHJhbnNmb3JtUmVjdXJzaXZlbHkiLCJvQmluZGluZ0V4cHJlc3Npb24iLCJjb25zdGFudCIsInBhdGgiLCJzUmVzdWx0Iiwic2V0T2JqZWN0TWFwcGluZ3MiLCJhU2VtYW50aWNPYmplY3RNYXBwaW5ncyIsIm9JdGVtIiwib01hcHBpbmdzIiwiaXRlbXMiLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5IiwiX2dldERlZmF1bHRPcGVyYXRvcnMiLCJzUHJvcGVydHlUeXBlIiwib0RhdGFDbGFzcyIsIlR5cGVVdGlsIiwiZ2V0RGF0YVR5cGVDbGFzc05hbWUiLCJvQmFzZVR5cGUiLCJnZXRCYXNlVHlwZSIsIkZpbHRlck9wZXJhdG9yVXRpbCIsImdldE9wZXJhdG9yc0ZvclR5cGUiLCJfZ2V0UmVzdHJpY3Rpb25zIiwiYURlZmF1bHRPcHMiLCJhRXhwcmVzc2lvbk9wcyIsImFPcGVyYXRvcnMiLCJmaWx0ZXIiLCJzRWxlbWVudCIsInRvU3RyaW5nIiwiZ2V0U3BlY2lmaWNBbGxvd2VkRXhwcmVzc2lvbiIsImFFeHByZXNzaW9ucyIsImFBbGxvd2VkRXhwcmVzc2lvbnNQcmlvcml0eSIsIkFsbG93ZWRFeHByZXNzaW9uc1ByaW8iLCJzb3J0IiwiYSIsImIiLCJnZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eSIsInNUeXBlIiwiYlVzZVNlbWFudGljRGF0ZVJhbmdlIiwic1NldHRpbmdzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiYUVxdWFsc09wcyIsImFTaW5nbGVSYW5nZU9wcyIsImFTaW5nbGVSYW5nZURUQmFzaWNPcHMiLCJhU2luZ2xlVmFsdWVEYXRlT3BzIiwiYUJhc2ljRGF0ZVRpbWVPcHMiLCJhTXVsdGlSYW5nZU9wcyIsImFTZWFyY2hFeHByZXNzaW9uT3BzIiwiYVNlbWFudGljRGF0ZU9wc0V4dCIsIlNlbWFudGljRGF0ZU9wZXJhdG9ycyIsImdldFN1cHBvcnRlZE9wZXJhdGlvbnMiLCJiU2VtYW50aWNEYXRlUmFuZ2UiLCJhU2VtYW50aWNEYXRlT3BzIiwib1NldHRpbmdzIiwiSlNPTiIsInBhcnNlIiwiY3VzdG9tRGF0YSIsIm9wZXJhdG9yQ29uZmlndXJhdGlvbiIsImdldEZpbHRlck9wZXJhdGlvbnMiLCJnZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zIiwiYVNpbmdsZVJhbmdlRGF0ZVRpbWVPcHMiLCJzT3BlcmF0b3IiLCJhRGVmYXVsdE9wZXJhdG9ycyIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsInNBbGxvd2VkRXhwcmVzc2lvbiIsInNSZXN0cmljdGlvbnMiLCJhU2luZ2xlVmFsdWVPcHMiLCJzT3BlcmF0b3JzIiwiZ2V0UGFyYW1ldGVySW5mbyIsInNQYXJhbWV0ZXJDb250ZXh0UGF0aCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiYlJlc3VsdENvbnRleHQiLCJvUGFyYW1ldGVySW5mbyIsImNvbnRleHRQYXRoIiwicGFyYW1ldGVyUHJvcGVydGllcyIsImdldENvbnRleHRQYXRoUHJvcGVydGllcyIsImFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyIsIm9Qcm9wZXJ0eU1ldGFkYXRhIiwiYVZhbGlkT3BlcmF0b3JzIiwiYUN1bXVsYXRpdmVDb25kaXRpb25zIiwib1NlbGVjdE9wdGlvbiIsIm9Db25kaXRpb24iLCJnZXRDb25kaXRpb25zIiwib3BlcmF0b3IiLCJhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zIiwib1NlbGVjdGlvblZhcmlhbnQiLCJzU2VsZWN0T3B0aW9uUHJvcCIsIm9Db25kaXRpb25zIiwic0NvbmRpdGlvblBhdGgiLCJzQ29uZGl0aW9uUHJvcCIsIm9WYWxpZFByb3BlcnRpZXMiLCJpc1BhcmFtZXRlciIsImFDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJnZXRTZWxlY3RPcHRpb24iLCJhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJhTWV0YWRhdFByb3BlcnRpZXMiLCJvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzIiwiYkhhc1BhcmFtZXRlcnMiLCJhTWV0YWRhdGFQYXJhbWV0ZXJzIiwic01ldGFkYXRhUGFyYW1ldGVyIiwic1NlbGVjdE9wdGlvbk5hbWUiLCJpbmNsdWRlcyIsInN0YXJ0c1dpdGgiLCJzTWV0YWRhdGFQcm9wZXJ0eSIsInNTZWxlY3RPcHRpb24iLCJzRnVsbENvbnRleHRQYXRoIiwicmVwbGFjZUFsbCIsIl9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyIsInNNYWluRW50aXR5U2V0UGF0aCIsImFOYXZPYmplY3ROYW1lcyIsInNOYXZQYXRoIiwic1Byb3BlcnR5TmFtZSIsIiRpc0NvbGxlY3Rpb24iLCJzTmF2UHJvcGVydHlQYXRoIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJtUGFnZUNvbnRleHQiLCJvQXBwQ29tcG9uZW50Iiwib05hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJtaXhBdHRyaWJ1dGVzQW5kU2VsZWN0aW9uVmFyaWFudCIsInRvSlNPTlN0cmluZyIsImFkZEV4dGVybmFsU3RhdGVGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50IiwibUZpbHRlcnMiLCJvVGFyZ2V0SW5mbyIsIm9GaWx0ZXJJbmZvIiwic0ZpbHRlciIsInNMb3ciLCJzSGlnaCIsImZuR2V0U2lnbkFuZE9wdGlvbiIsInNMb3dWYWx1ZSIsInNIaWdoVmFsdWUiLCJvU2VsZWN0T3B0aW9uU3RhdGUiLCJvcHRpb24iLCJzaWduIiwibG93IiwiaGlnaCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZmlsdGVyQ29uZGl0aW9ucyIsIm9GaWx0ZXJzV2l0aG91dENvbmZsaWN0IiwiZmlsdGVyQ29uZGl0aW9uc1dpdGhvdXRDb25mbGljdCIsIm9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QiLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwiYWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJzRmlsdGVyTmFtZSIsImFGaWx0ZXJzIiwidmFsdWVzIiwiYUZpbHRlciIsIm9WYWx1ZTEiLCJvU2VsZWN0T3B0aW9uVmFsdWVzIiwiYWRkU2VsZWN0T3B0aW9uIiwiaXNTdGlja3lFZGl0TW9kZSIsImJJc1N0aWNreU1vZGUiLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsImJVSUVkaXRhYmxlIiwiYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSIsIm9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMiLCJhU1ZPcHRpb24iLCJhRGVmYXVsdFNWT3B0aW9uIiwiZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uIiwic1NpZ24iLCJzT3B0aW9uIiwiZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzIiwiJEtleSIsImFOb25Db21wdXRlZFZpc2libGVGaWVsZHMiLCJhSW1tdXRhYmxlVmlzaWJsZUZpZWxkcyIsIm9Bbm5vdGF0aW9ucyIsImJJc0tleSIsImJJc0ltbXV0YWJsZSIsImJJc05vbkNvbXB1dGVkIiwiYklzVmlzaWJsZSIsImJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlIiwiYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCIsIm9EaWFnbm9zdGljcyIsImdldERpYWdub3N0aWNzIiwic01lc3NhZ2UiLCJhZGRJc3N1ZSIsIklzc3VlQ2F0ZWdvcnkiLCJBbm5vdGF0aW9uIiwiSXNzdWVTZXZlcml0eSIsIk1lZGl1bSIsIklzc3VlQ2F0ZWdvcnlUeXBlIiwiQW5ub3RhdGlvbnMiLCJJZ25vcmVkQW5ub3RhdGlvbiIsImFSZXF1aXJlZFByb3BlcnRpZXMiLCJnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzIiwiYkNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zIiwiYVBhdGhQYXJ0cyIsImFSZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aHMiLCJzUGFyZW50RW50aXR5U2V0UGF0aCIsImhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyIsIlJlcXVpcmVkUHJvcGVydGllcyIsImdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21Bbm5vdGF0aW9ucyIsIm9SZXF1aXJlZFByb3BlcnR5IiwiZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImJJc05hdmlnYXRpb25SZXN0cmljdGlvbnMiLCJzZXRVc2VyRGVmYXVsdHMiLCJhUGFyYW1ldGVycyIsImJJc0FjdGlvbiIsImJJc0NyZWF0ZSIsIm9BY3Rpb25EZWZhdWx0VmFsdWVzIiwib0NvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJvU2hlbGxTZXJ2aWNlcyIsImhhc1VTaGVsbCIsIm9QYXJhbWV0ZXIiLCIkTmFtZSIsInNQYXJhbWV0ZXJOYW1lIiwiZ2V0U3RhcnR1cEFwcFN0YXRlIiwib1N0YXJ0dXBBcHBTdGF0ZSIsImdldERhdGEiLCJhRXh0ZW5kZWRQYXJhbWV0ZXJzIiwiU2VsZWN0T3B0aW9ucyIsIm9FeHRlbmRlZFBhcmFtZXRlciIsIlByb3BlcnR5TmFtZSIsIm9SYW5nZSIsIlJhbmdlcyIsIlNpZ24iLCJPcHRpb24iLCJMb3ciLCJnZXRBZGRpdGlvbmFsUGFyYW1zRm9yQ3JlYXRlIiwib0luYm91bmRQYXJhbWV0ZXJzIiwib0luYm91bmRzIiwiYUNyZWF0ZVBhcmFtZXRlcnMiLCJzUGFyYW1ldGVyIiwidXNlRm9yQ3JlYXRlIiwib1JldCIsInNDcmVhdGVQYXJhbWV0ZXIiLCJhVmFsdWVzIiwiY3JlYXRlIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib091dGJvdW5kIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsInBhcmFtZXRlcnMiLCJzUGFyYW0iLCJmb3JtYXQiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJvVmlld0RhdGEiLCJvQ3Jvc3NOYXYiLCJvSGVhZGVyRmFjZXRJdGVtcyIsInNJZCIsIm9Db250cm9sQ29uZmlnIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJjb25maWciLCJuYXZpZ2F0aW9uIiwidGFyZ2V0T3V0Ym91bmQiLCJvdXRib3VuZCIsInNPdXRib3VuZCIsImdlbmVyYXRlIiwic2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyIsInZNYXBwaW5ncyIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm1hc3NBZGRTZWxlY3RPcHRpb24iLCJmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoIiwiYVNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYVNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJzZW1hbnRpY09iamVjdEZvckdldExpbmtzIiwiZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbCIsImFHZXRMaW5rc1Byb21pc2VzIiwiYVNlbWFudGljT2JqZWN0cyIsInNDdXJyZW50SGFzaCIsIl9vTGluayIsIl9zTGlua0ludGVudEFjdGlvbiIsImFGaW5hbExpbmtzIiwib0ZpbmFsU2VtYW50aWNPYmplY3RzIiwiYkludGVudEhhc0FjdGlvbnMiLCJrIiwib1RtcCIsInNBbHRlcm5hdGVQYXRoIiwiaGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiaGFzVGFyZ2V0cyIsImlMaW5rQ291bnQiLCJIYXNUYXJnZXRzIiwiSGFzVGFyZ2V0c05vdEZpbHRlcmVkIiwiYXNzaWduIiwic1NlbWFudGljT2JqZWN0TmFtZSIsIm1lcmdlT2JqZWN0cyIsImZuR2V0U2VtYW50aWNPYmplY3RQcm9taXNlIiwiZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgiLCJmbkdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvQ29udHJvbGxlciIsInNQYWdlTW9kZWwiLCJfZm5maW5kVmFsdWVzSGVscGVyIiwib2JqIiwibGlzdCIsIkFycmF5IiwiY2hpbGRyZW4iLCJfZm5maW5kVmFsdWVzIiwiX2ZuRGVsZXRlRHVwbGljYXRlU2VtYW50aWNPYmplY3RzIiwiYVNlbWFudGljT2JqZWN0UGF0aCIsImdldFZpZXciLCJhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMiLCJvQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnQiLCJvUGFnZU1vZGVsIiwic3RyaW5naWZ5IiwiX2dldE9iamVjdCIsImFTZW1hbnRpY09iamVjdHNGb3VuZCIsImFTZW1hbnRpY09iamVjdHNGb3JHZXRMaW5rcyIsIl9vU2VtYW50aWNPYmplY3QiLCJnZXRTZW1hbnRpY09iamVjdFByb21pc2UiLCJzU2VtT2JqRXhwcmVzc2lvbiIsImFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCIsImVsZW1lbnQiLCIkUGF0aCIsImdldExpbmtzV2l0aENhY2hlIiwidXBkYXRlU2VtYW50aWNUYXJnZXRzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24iLCJzUmVzdHJpY3Rpb24iLCJSRVFVSVJFRF9QUk9QRVJUSUVTIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsImFQcm9wcyIsIm1hcCIsIm9Qcm9wZXJ0eSIsIkFMTE9XRURfRVhQUkVTU0lPTlMiLCJtQWxsb3dlZEV4cHJlc3Npb25zIiwiRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucyIsIlByb3BlcnR5IiwiQWxsb3dlZEV4cHJlc3Npb25zIiwib05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMiLCJ0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudCIsInNGcmFnbWVudE5hbWUiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJvT3B0aW9ucyIsIm9Nb2RpZmllciIsInZpZXciLCJvRnJhZ21lbnQiLCJ0YXJnZXRzIiwibG9hZE1hY3JvTGlicmFyeSIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJYTUxUZW1wbGF0ZVByb2Nlc3NvciIsImxvYWRUZW1wbGF0ZSIsIm5hbWUiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImlzWE1MIiwiRnJhZ21lbnQiLCJsb2FkIiwiaWQiLCJkZWZpbml0aW9uIiwiY29udHJvbGxlciIsImdldFNpbmdsZXRvblBhdGgiLCJtZXRhTW9kZWwiLCJwYXJ0cyIsIkJvb2xlYW4iLCJwcm9wZXJ0eU5hbWUiLCJwb3AiLCJuYXZpZ2F0aW9uUGF0aCIsInNpbmdsZXRvbk5hbWUiLCJtb2RlbCIsInJlc29sdmVkUGF0aCIsInByb3BlcnR5QmluZGluZyIsImJpbmRQcm9wZXJ0eSIsInJlcXVlc3RWYWx1ZSIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsInNFdmVudE5hbWUiLCJmSGFuZGxlciIsIm9CaW5kaW5nSW5mbyIsInNldEJpbmRpbmdJbmZvIiwiZXZlbnRzIiwiZk9yaWdpbmFsSGFuZGxlciIsImFyZ3MiLCJhcHBseSIsImlubmVyQ2hhcnRCb3VuZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic0Vycm9yIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwic0dyb3VwSWQiLCJhY3Rpb25OYW1lIiwiYU1lc3NhZ2VzIiwibG9jYWxJMThuUmVmIiwic0NhbmNlbEJ1dHRvblR4dCIsIm1lc3NhZ2UiLCJNZXNzYWdlQm94IiwidGl0bGUiLCJhY3Rpb25zIiwiZW1waGFzaXplZEFjdGlvbiIsIm9uQ2xvc2UiLCJzdWJtaXRCYXRjaCIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJKU09OTW9kZWwiLCJzZXREYXRhIiwiYlN0cmljdEhhbmRsaW5nRmxvdyIsIm9NZXNzYWdlT2JqZWN0IiwibWVzc2FnZUhhbmRsaW5nIiwicHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nIiwib0RpYWxvZyIsIkRpYWxvZyIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJvTWVzc2FnZVZpZXciLCJzdGF0ZSIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRMZWZ0Iiwib0JhY2tCdXR0b24iLCJjb250ZW50TWlkZGxlIiwiVGl0bGUiLCJjb250ZW50SGVpZ2h0IiwiY29udGVudFdpZHRoIiwidmVydGljYWxTY3JvbGxpbmciLCJzZXRCZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiY2xvc2UiLCJ0eXBlIiwic2V0RW5kQnV0dG9uIiwib3BlbiIsImdldE1lc3NhZ2VDb2x1bW4iLCJoZWFkZXJJbmZvVGl0bGVQYXRoIiwiZ2V0VGFibGVEZWZpbml0aW9uIiwiaGVhZGVySW5mb1RpdGxlIiwic0N1cnJlbnRFbnRpdHlTZXROYW1lIiwiYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyIsInRlY2huaWNhbEtleSIsInNlbWFudGljS2V5Q29sdW1ucyIsInNlbWFudGljS2V5cyIsImFWaXNpYmxlQ29sdW1ucyIsImFUYWJsZUNvbHVtbnMiLCJnZXRDb2x1bW5zIiwib0NvbHVtbiIsImNvbHVtblBhdGhTcGxpdCIsImdldElkIiwic3VidGl0bGVDb2x1bW4iLCJnZXRLZXlzIiwic01ldGFQYXRoIiwic2VtYW50aWNLZXkiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljS2V5cyIsImdldE1lc3NhZ2VTdHJpcFRleHQiLCJhSWdub3JlZExhYmVscyIsIm9GaWx0ZXJCYXIiLCJiSXNDaGFydCIsImJJc1NlYXJjaElnbm9yZWQiLCJzVGFiVGl0bGUiLCJmbkdldExvY2FsaXplZFRleHQiLCJzVGV4dCIsIm9DaGFydCIsImdldENvbnRyb2xsZXIiLCJnZXRDaGFydENvbnRyb2wiLCJiSXNEcmFmdFN1cHBvcnRlZCIsIm9NYWNyb1Jlc291cmNlQnVuZGxlIiwic1Jlc291cmNlIiwic3lzdGVtIiwiZGVza3RvcCIsInNMb2NhbGl6ZWRUYWJsZVRpdGxlIiwiZmlyZUJ1dHRvblByZXNzIiwiaGFzVHJhbnNpZW50Q29udGV4dCIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsInJlc29sdmVTdHJpbmd0b0Jvb2xlYW4iLCJnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsImdldElCTkFjdGlvbnMiLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQWdDQSxNQUFNQSxXQUFXLEdBQUcsQ0FDbkIsYUFEbUIsRUFFbkIsVUFGbUIsRUFHbkIsVUFIbUIsRUFJbkIsY0FKbUIsRUFLbkIsb0JBTG1CLEVBTW5CLGFBTm1CLEVBT25CLFlBUG1CLEVBUW5CLFdBUm1CLEVBU25CLFVBVG1CLEVBVW5CLFdBVm1CLEVBV25CLFdBWG1CLEVBWW5CLFdBWm1CLEVBYW5CLFdBYm1CLEVBY25CLFlBZG1CLEVBZW5CLFlBZm1CLEVBZ0JuQixVQWhCbUIsRUFpQm5CLGVBakJtQixDQUFwQjs7QUFvQkEsV0FBU0MsbUJBQVQsQ0FBNkJDLFdBQTdCLEVBQWtEO0FBQ2pELFFBQUksQ0FBQ0EsV0FBTCxFQUFrQjtBQUNqQixhQUFPQyxTQUFQO0FBQ0E7O0FBRUQsV0FBT0QsV0FBVyxDQUNoQkUsT0FESyxDQUNHLElBREgsRUFDUyxHQURULEVBRUxDLEtBRkssQ0FFQyxLQUZELEVBR0xDLE1BSEss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QUE3QyxFQUEyRCxrQkFBM0QsRUFBK0UsOEJBQS9FLENBcERMO0FBcURuQmpWLElBQUFBLG1CQUFtQixFQUFFQSxtQkFyREY7QUFzRG5COHFCLElBQUFBLHdCQUF3QixFQUFFQSx3QkF0RFA7QUF1RG5COUIsSUFBQUEsZ0JBQWdCLEVBQUVBLGdCQXZEQztBQXdEbkI2RixJQUFBQSxtQkFBbUIsRUFBRUEsbUJBeERGO0FBeURuQnJCLElBQUFBLGdCQUFnQixFQUFFQSxnQkF6REM7QUEwRG5CL04sSUFBQUEsMkNBQTJDLEVBQUVBLDJDQTFEMUI7QUEyRG5CVixJQUFBQSwyQ0FBMkMsRUFBRUEsMkNBM0QxQjtBQTREbkJNLElBQUFBLG9DQUFvQyxFQUFFQSxvQ0E1RG5CO0FBNkRuQkUsSUFBQUEsb0NBQW9DLEVBQUVBLG9DQTdEbkI7QUE4RG5CUCxJQUFBQSxxQkFBcUIsRUFBRUEscUJBOURKO0FBK0RuQndQLElBQUFBLE9BQU8sRUFBRUE7QUEvRFUsR0FBcEI7U0FrRWUvb0IsVyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IElzc3VlQ2F0ZWdvcnksIElzc3VlQ2F0ZWdvcnlUeXBlLCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBub3QsIG9yLCBwYXRoSW5Nb2RlbCwgdHJhbnNmb3JtUmVjdXJzaXZlbHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNEYXRlT3BlcmF0b3JzIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljRGF0ZU9wZXJhdG9yc1wiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IEZyYWdtZW50IGZyb20gXCJzYXAvdWkvY29yZS9GcmFnbWVudFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvclV0aWwgZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0ZpbHRlck9wZXJhdG9yVXRpbFwiO1xuaW1wb3J0IFR5cGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L1R5cGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBDb3JlRXggfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IHsgZ2V0Q29uZGl0aW9ucyB9IGZyb20gXCIuL3RlbXBsYXRpbmcvRmlsdGVySGVscGVyXCI7XG5cbmNvbnN0IGFWYWxpZFR5cGVzID0gW1xuXHRcIkVkbS5Cb29sZWFuXCIsXG5cdFwiRWRtLkJ5dGVcIixcblx0XCJFZG0uRGF0ZVwiLFxuXHRcIkVkbS5EYXRlVGltZVwiLFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiLFxuXHRcIkVkbS5EZWNpbWFsXCIsXG5cdFwiRWRtLkRvdWJsZVwiLFxuXHRcIkVkbS5GbG9hdFwiLFxuXHRcIkVkbS5HdWlkXCIsXG5cdFwiRWRtLkludDE2XCIsXG5cdFwiRWRtLkludDMyXCIsXG5cdFwiRWRtLkludDY0XCIsXG5cdFwiRWRtLlNCeXRlXCIsXG5cdFwiRWRtLlNpbmdsZVwiLFxuXHRcIkVkbS5TdHJpbmdcIixcblx0XCJFZG0uVGltZVwiLFxuXHRcIkVkbS5UaW1lT2ZEYXlcIlxuXTtcblxuZnVuY3Rpb24gbm9ybWFsaXplU2VhcmNoVGVybShzU2VhcmNoVGVybTogc3RyaW5nKSB7XG5cdGlmICghc1NlYXJjaFRlcm0pIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0cmV0dXJuIHNTZWFyY2hUZXJtXG5cdFx0LnJlcGxhY2UoL1wiL2csIFwiIFwiKVxuXHRcdC5zcGxpdCgvXFxzKy8pXG5cdFx0LnJlZHVjZShmdW5jdGlvbiAoc05vcm1hbGl6ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgc0N1cnJlbnRXb3JkOiBzdHJpbmcpIHtcblx0XHRcdGlmIChzQ3VycmVudFdvcmQgIT09IFwiXCIpIHtcblx0XHRcdFx0c05vcm1hbGl6ZWQgPSBgJHtzTm9ybWFsaXplZCA/IGAke3NOb3JtYWxpemVkfSBgIDogXCJcIn1cIiR7c0N1cnJlbnRXb3JkfVwiYDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBzTm9ybWFsaXplZDtcblx0XHR9LCB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eURhdGFUeXBlKG9OYXZpZ2F0aW9uQ29udGV4dDogYW55KSB7XG5cdGxldCBzRGF0YVR5cGUgPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCIkVHlwZVwiKTtcblx0Ly8gaWYgJGtpbmQgZXhpc3RzLCBpdCdzIG5vdCBhIERhdGFGaWVsZCBhbmQgd2UgaGF2ZSB0aGUgZmluYWwgdHlwZSBhbHJlYWR5XG5cdGlmICghb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiJGtpbmRcIikpIHtcblx0XHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoXCI6XG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkV2l0aFVybFwiOlxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjpcblx0XHRcdGNhc2UgXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRXaXRoQWN0aW9uXCI6XG5cdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlZhbHVlLyRQYXRoLyRUeXBlXCIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFubm90YXRpb25cIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIik7XG5cdFx0XHRcdGlmIChzQW5ub3RhdGlvblBhdGgpIHtcblx0XHRcdFx0XHRpZiAoc0Fubm90YXRpb25QYXRoLmluZGV4T2YoXCJjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIikgPiAtMSkge1xuXHRcdFx0XHRcdFx0c0RhdGFUeXBlID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9mbi8kUGF0aC8kVHlwZVwiKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpID4gLTEpIHtcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIlZhbHVlLyRQYXRoLyRUeXBlXCIpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBlLmcuIEZpZWxkR3JvdXAgb3IgQ2hhcnRcblx0XHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzRGF0YVR5cGU7XG59XG5mdW5jdGlvbiBmbkhhc1RyYW5zaWVudENvbnRleHRzKG9MaXN0QmluZGluZzogYW55KSB7XG5cdGxldCBiSGFzVHJhbnNpZW50Q29udGV4dHMgPSBmYWxzZTtcblx0aWYgKG9MaXN0QmluZGluZykge1xuXHRcdG9MaXN0QmluZGluZy5nZXRDdXJyZW50Q29udGV4dHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0XHRiSGFzVHJhbnNpZW50Q29udGV4dHMgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBiSGFzVHJhbnNpZW50Q29udGV4dHM7XG59XG5mdW5jdGlvbiBnZXRTZWFyY2hSZXN0cmljdGlvbnMoc0Z1bGxQYXRoOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRsZXQgaSA9IDA7XG5cdGNvbnN0IGFOYXZpZ2F0aW9uUGFydHMgPSBzRnVsbFBhdGguc3BsaXQoXCIvJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvXCIpO1xuXHRmb3IgKGxldCBzUGF0aCA9IGFOYXZpZ2F0aW9uUGFydHNbMF07IGkgPCBhTmF2aWdhdGlvblBhcnRzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGF0aCwgYU5hdmlnYXRpb25QYXJ0c1tpICsgMV0pO1xuXHRcdGlmIChvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyAmJiBvTmF2aWdhdGlvblJlc3RyaWN0aW9uc1tcIlNlYXJjaFJlc3RyaWN0aW9uc1wiXSkge1xuXHRcdFx0cmV0dXJuIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiU2VhcmNoUmVzdHJpY3Rpb25zXCJdO1xuXHRcdH1cblx0XHRzUGF0aCA9IGAke3NQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2FOYXZpZ2F0aW9uUGFydHNbaV19YDtcblx0fVxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0Z1bGxQYXRofUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlNlYXJjaFJlc3RyaWN0aW9uc2ApO1xufVxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTW9kZWw6IGFueSwgc0VudGl0eVNldFBhdGg6IGFueSwgc05hdmlnYXRpb25QYXRoOiBhbnkpIHtcblx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLk5hdmlnYXRpb25SZXN0cmljdGlvbnNgKTtcblx0Y29uc3QgYVJlc3RyaWN0ZWRQcm9wZXJ0aWVzID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuUmVzdHJpY3RlZFByb3BlcnRpZXM7XG5cdHJldHVybiAoXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzICYmXG5cdFx0YVJlc3RyaWN0ZWRQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9SZXN0cmljdGVkUHJvcGVydHk6IGFueSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0b1Jlc3RyaWN0ZWRQcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eSAmJlxuXHRcdFx0XHRvUmVzdHJpY3RlZFByb3BlcnR5Lk5hdmlnYXRpb25Qcm9wZXJ0eS4kTmF2aWdhdGlvblByb3BlcnR5UGF0aCA9PT0gc05hdmlnYXRpb25QYXRoXG5cdFx0XHQpO1xuXHRcdH0pXG5cdCk7XG59XG5mdW5jdGlvbiBfaXNJbk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4dFBhdGg6IGFueSkge1xuXHRsZXQgYklzTm90RmlsdGVyYWJsZSA9IGZhbHNlO1xuXHRjb25zdCBvQW5ub3RhdGlvbiA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zYCk7XG5cdGlmIChvQW5ub3RhdGlvbiAmJiBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcykge1xuXHRcdGJJc05vdEZpbHRlcmFibGUgPSBvQW5ub3RhdGlvbi5Ob25GaWx0ZXJhYmxlUHJvcGVydGllcy5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRyZXR1cm4gcHJvcGVydHkuJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGggPT09IHNDb250ZXh0UGF0aCB8fCBwcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzQ29udGV4dFBhdGg7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGJJc05vdEZpbHRlcmFibGU7XG59XG4vLyBUT0RPIHJld29yayB0aGlzIVxuZnVuY3Rpb24gX2lzQ29udGV4dFBhdGhGaWx0ZXJhYmxlKG9Nb2RlbDogYW55LCBzRW50aXR5U2V0UGF0aDogYW55LCBzQ29udGV4UGF0aDogYW55KSB7XG5cdGNvbnN0IHNGdWxsUGF0aCA9IGAke3NFbnRpdHlTZXRQYXRofS8ke3NDb250ZXhQYXRofWAsXG5cdFx0YUVTUGFydHMgPSBzRnVsbFBhdGguc3BsaXQoXCIvXCIpLnNwbGljZSgwLCAyKSxcblx0XHRhQ29udGV4dCA9IHNGdWxsUGF0aC5zcGxpdChcIi9cIikuc3BsaWNlKDIpO1xuXHRsZXQgYklzTm90RmlsdGVyYWJsZSA9IGZhbHNlLFxuXHRcdHNDb250ZXh0ID0gXCJcIjtcblxuXHRzRW50aXR5U2V0UGF0aCA9IGFFU1BhcnRzLmpvaW4oXCIvXCIpO1xuXG5cdGJJc05vdEZpbHRlcmFibGUgPSBhQ29udGV4dC5zb21lKGZ1bmN0aW9uIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGFycmF5OiBzdHJpbmdbXSkge1xuXHRcdGlmIChzQ29udGV4dC5sZW5ndGggPiAwKSB7XG5cdFx0XHRzQ29udGV4dCArPSBgLyR7aXRlbX1gO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ29udGV4dCA9IGl0ZW07XG5cdFx0fVxuXHRcdGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMikge1xuXHRcdFx0Ly8gSW4gY2FzZSBvZiBcIi9DdXN0b21lci9TZXQvUHJvcGVydHlcIiB0aGlzIGlzIHRvIGNoZWNrIG5hdmlnYXRpb24gcmVzdHJpY3Rpb25zIG9mIFwiQ3VzdG9tZXJcIiBmb3Igbm9uLWZpbHRlcmFibGUgcHJvcGVydGllcyBpbiBcIlNldFwiXG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblJlc3RyaWN0aW9ucyA9IGdldE5hdmlnYXRpb25SZXN0cmljdGlvbnMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgaXRlbSk7XG5cdFx0XHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gb05hdmlnYXRpb25SZXN0cmljdGlvbnMgJiYgb05hdmlnYXRpb25SZXN0cmljdGlvbnMuRmlsdGVyUmVzdHJpY3Rpb25zO1xuXHRcdFx0Y29uc3QgYU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzID0gb0ZpbHRlclJlc3RyaWN0aW9ucyAmJiBvRmlsdGVyUmVzdHJpY3Rpb25zLk5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3Qgc1RhcmdldFByb3BlcnR5UGF0aCA9IGFycmF5W2FycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRhTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMgJiZcblx0XHRcdFx0YU5vbkZpbHRlcmFibGVQcm9wZXJ0aWVzLmZpbmQoZnVuY3Rpb24gKG9Qcm9wZXJ0eVBhdGg6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlQYXRoLiRQcm9wZXJ0eVBhdGggPT09IHNUYXJnZXRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChpbmRleCA9PT0gYXJyYXkubGVuZ3RoIC0gMSkge1xuXHRcdFx0Ly9sYXN0IHBhdGggc2VnbWVudFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdH0gZWxzZSBpZiAob01vZGVsLmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmcvJHtpdGVtfWApKSB7XG5cdFx0XHQvL2NoZWNrIGV4aXN0aW5nIGNvbnRleHQgcGF0aCBhbmQgaW5pdGlhbGl6ZSBpdFxuXHRcdFx0YklzTm90RmlsdGVyYWJsZSA9IF9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc0NvbnRleHQpO1xuXHRcdFx0c0NvbnRleHQgPSBcIlwiO1xuXHRcdFx0Ly9zZXQgdGhlIG5ldyBFbnRpdHlTZXRcblx0XHRcdHNFbnRpdHlTZXRQYXRoID0gYC8ke29Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7aXRlbX1gKX1gO1xuXHRcdH1cblx0XHRyZXR1cm4gYklzTm90RmlsdGVyYWJsZSA9PT0gdHJ1ZTtcblx0fSk7XG5cdHJldHVybiBiSXNOb3RGaWx0ZXJhYmxlO1xufVxuLy8gVE9ETyBjaGVjayB1c2VkIHBsYWNlcyBhbmQgcmV3b3JrIHRoaXNcbmZ1bmN0aW9uIGlzUHJvcGVydHlGaWx0ZXJhYmxlKFxuXHRvTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzRW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRzUHJvcGVydHk6IHN0cmluZyxcblx0YlNraXBIaWRkZW5GaWx0ZXI/OiBib29sZWFuXG4pOiBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRpZiAodHlwZW9mIHNQcm9wZXJ0eSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInNQcm9wZXJ0eSBwYXJhbWV0ZXIgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0fVxuXHRsZXQgYklzRmlsdGVyYWJsZTtcblxuXHQvLyBQYXJhbWV0ZXJzIHNob3VsZCBiZSByZW5kZXJlZCBhcyBmaWx0ZXJmaWVsZHNcblx0aWYgKG9Nb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHQgPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c1Byb3BlcnR5fWApIGFzIENvbnRleHQ7XG5cblx0aWYgKCFiU2tpcEhpZGRlbkZpbHRlcikge1xuXHRcdGlmIChcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIikgPT09IHRydWUgfHxcblx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dC5nZXRQcm9wZXJ0eShcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5GaWx0ZXJcIikgPT09IHRydWVcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc0hpZGRlblBhdGggPSBvTmF2aWdhdGlvbkNvbnRleHQuZ2V0UHJvcGVydHkoXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuLyRQYXRoXCIpO1xuXHRcdGNvbnN0IHNIaWRkZW5GaWx0ZXJQYXRoID0gb05hdmlnYXRpb25Db250ZXh0LmdldFByb3BlcnR5KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkhpZGRlbkZpbHRlci8kUGF0aFwiKTtcblxuXHRcdGlmIChzSGlkZGVuUGF0aCAmJiBzSGlkZGVuRmlsdGVyUGF0aCkge1xuXHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG5vdChvcihwYXRoSW5Nb2RlbChzSGlkZGVuUGF0aCksIHBhdGhJbk1vZGVsKHNIaWRkZW5GaWx0ZXJQYXRoKSkpKTtcblx0XHR9IGVsc2UgaWYgKHNIaWRkZW5QYXRoKSB7XG5cdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24obm90KHBhdGhJbk1vZGVsKHNIaWRkZW5QYXRoKSkpO1xuXHRcdH0gZWxzZSBpZiAoc0hpZGRlbkZpbHRlclBhdGgpIHtcblx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihub3QocGF0aEluTW9kZWwoc0hpZGRlbkZpbHRlclBhdGgpKSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggPT09IDIgJiYgc1Byb3BlcnR5LmluZGV4T2YoXCIvXCIpIDwgMCkge1xuXHRcdC8vIHRoZXJlIGlzIG5vIG5hdmlnYXRpb24gaW4gZW50aXR5U2V0IHBhdGggYW5kIHByb3BlcnR5IHBhdGhcblx0XHRiSXNGaWx0ZXJhYmxlID0gIV9pc0luTm9uRmlsdGVyYWJsZVByb3BlcnRpZXMob01vZGVsLCBzRW50aXR5U2V0UGF0aCwgc1Byb3BlcnR5KTtcblx0fSBlbHNlIHtcblx0XHRiSXNGaWx0ZXJhYmxlID0gIV9pc0NvbnRleHRQYXRoRmlsdGVyYWJsZShvTW9kZWwsIHNFbnRpdHlTZXRQYXRoLCBzUHJvcGVydHkpO1xuXHR9XG5cdC8vIGNoZWNrIGlmIHR5cGUgY2FuIGJlIHVzZWQgZm9yIGZpbHRlcmluZ1xuXHRpZiAoYklzRmlsdGVyYWJsZSAmJiBvTmF2aWdhdGlvbkNvbnRleHQpIHtcblx0XHRjb25zdCBzUHJvcGVydHlEYXRhVHlwZSA9IGdldFByb3BlcnR5RGF0YVR5cGUob05hdmlnYXRpb25Db250ZXh0KTtcblx0XHRpZiAoc1Byb3BlcnR5RGF0YVR5cGUpIHtcblx0XHRcdGJJc0ZpbHRlcmFibGUgPSBhVmFsaWRUeXBlcy5pbmRleE9mKHNQcm9wZXJ0eURhdGFUeXBlKSAhPT0gLTE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJJc0ZpbHRlcmFibGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYklzRmlsdGVyYWJsZTtcbn1cbmZ1bmN0aW9uIGdldFNoZWxsU2VydmljZXMob0NvbnRyb2w6IGFueSkge1xuXHRyZXR1cm4gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG59XG5mdW5jdGlvbiBnZXRIYXNoKCkge1xuXHRjb25zdCBzSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRyZXR1cm4gc0hhc2guc3BsaXQoXCImXCIpWzBdO1xufVxuZnVuY3Rpb24gX2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dDogYW55LCBvU2VtYW50aWNPYmplY3Q6IGFueSwgb1BhcmFtOiBhbnkpIHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob09iamVjdFBhZ2VMYXlvdXQpO1xuXHRyZXR1cm4gb1NoZWxsU2VydmljZUhlbHBlci5nZXRMaW5rcyh7XG5cdFx0c2VtYW50aWNPYmplY3Q6IG9TZW1hbnRpY09iamVjdCxcblx0XHRwYXJhbXM6IG9QYXJhbVxuXHR9KTtcbn1cbi8vIFRPLURPIGFkZCB0aGlzIGFzIHBhcnQgb2YgYXBwbHlTZW1hbnRpY09iamVjdG1hcHBpbmdzIGxvZ2ljIGluIEludGVudEJhc2VkbmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuZnVuY3Rpb24gX2NyZWF0ZU1hcHBpbmdzKG9NYXBwaW5nOiBhbnkpIHtcblx0Y29uc3QgYVNPTWFwcGluZ3MgPSBbXTtcblx0Y29uc3QgYU1hcHBpbmdLZXlzID0gT2JqZWN0LmtleXMob01hcHBpbmcpO1xuXHRsZXQgb1NlbWFudGljTWFwcGluZztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTWFwcGluZ0tleXMubGVuZ3RoOyBpKyspIHtcblx0XHRvU2VtYW50aWNNYXBwaW5nID0ge1xuXHRcdFx0XCJMb2NhbFByb3BlcnR5XCI6IHtcblx0XHRcdFx0XCIkUHJvcGVydHlQYXRoXCI6IGFNYXBwaW5nS2V5c1tpXVxuXHRcdFx0fSxcblx0XHRcdFwiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiOiBvTWFwcGluZ1thTWFwcGluZ0tleXNbaV1dXG5cdFx0fTtcblx0XHRhU09NYXBwaW5ncy5wdXNoKG9TZW1hbnRpY01hcHBpbmcpO1xuXHR9XG5cblx0cmV0dXJuIGFTT01hcHBpbmdzO1xufVxuLyoqXG4gKiBAcGFyYW0gYUxpbmtzXG4gKiBAcGFyYW0gYUV4Y2x1ZGVkQWN0aW9uc1xuICogQHBhcmFtIG9UYXJnZXRQYXJhbXNcbiAqIEBwYXJhbSBhSXRlbXNcbiAqL1xuZnVuY3Rpb24gX2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rczogYW55LCBhRXhjbHVkZWRBY3Rpb25zOiBhbnksIG9UYXJnZXRQYXJhbXM6IGFueSwgYUl0ZW1zOiBhbnkpIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBvTGluayA9IGFMaW5rc1tpXTtcblx0XHRjb25zdCBzSW50ZW50ID0gb0xpbmsuaW50ZW50O1xuXHRcdGNvbnN0IHNBY3Rpb24gPSBzSW50ZW50LnNwbGl0KFwiLVwiKVsxXS5zcGxpdChcIj9cIilbMF07XG5cdFx0aWYgKGFFeGNsdWRlZEFjdGlvbnMgJiYgYUV4Y2x1ZGVkQWN0aW9ucy5pbmRleE9mKHNBY3Rpb24pID09PSAtMSkge1xuXHRcdFx0YUl0ZW1zLnB1c2goe1xuXHRcdFx0XHR0ZXh0OiBvTGluay50ZXh0LFxuXHRcdFx0XHR0YXJnZXRTZW1PYmplY3Q6IHNJbnRlbnQuc3BsaXQoXCIjXCIpWzFdLnNwbGl0KFwiLVwiKVswXSxcblx0XHRcdFx0dGFyZ2V0QWN0aW9uOiBzQWN0aW9uLnNwbGl0KFwiflwiKVswXSxcblx0XHRcdFx0dGFyZ2V0UGFyYW1zOiBvVGFyZ2V0UGFyYW1zXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cbi8qKlxuICogQHBhcmFtIG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzXG4gKiBAcGFyYW0gb0JpbmRpbmdDb250ZXh0XG4gKiBAcGFyYW0gYU1hbmlmZXN0U09JdGVtc1xuICogQHBhcmFtIGFMaW5rc1xuICovXG5mdW5jdGlvbiBfZ2V0UmVsYXRlZEludGVudHMob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHM6IGFueSwgb0JpbmRpbmdDb250ZXh0OiBhbnksIGFNYW5pZmVzdFNPSXRlbXM6IGFueSwgYUxpbmtzOiBhbnkpIHtcblx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCkge1xuXHRcdGNvbnN0IGFFeGNsdWRlZEFjdGlvbnMgPSBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgPyBvQWRkaXRpb25hbFNlbWFudGljT2JqZWN0cy51bmF2YWlsYWJsZUFjdGlvbnMgOiBbXTtcblx0XHRjb25zdCBhU09NYXBwaW5ncyA9IG9BZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzLm1hcHBpbmcgPyBfY3JlYXRlTWFwcGluZ3Mob0FkZGl0aW9uYWxTZW1hbnRpY09iamVjdHMubWFwcGluZykgOiBbXTtcblx0XHRjb25zdCBvVGFyZ2V0UGFyYW1zID0geyBuYXZpZ2F0aW9uQ29udGV4dHM6IG9CaW5kaW5nQ29udGV4dCwgc2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU09NYXBwaW5ncyB9O1xuXHRcdF9nZXRSZWxhdGVkQXBwc01lbnVJdGVtcyhhTGlua3MsIGFFeGNsdWRlZEFjdGlvbnMsIG9UYXJnZXRQYXJhbXMsIGFNYW5pZmVzdFNPSXRlbXMpO1xuXHR9XG59XG5mdW5jdGlvbiB1cGRhdGVSZWxhdGVBcHBzTW9kZWwoXG5cdHRoaXM6IGFueSxcblx0b0JpbmRpbmdDb250ZXh0OiBhbnksXG5cdG9FbnRyeTogYW55LFxuXHRvT2JqZWN0UGFnZUxheW91dDogYW55LFxuXHRhU2VtS2V5czogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9NZXRhUGF0aDogYW55XG4pIHtcblx0Y29uc3Qgb1NoZWxsU2VydmljZUhlbHBlciA9IGdldFNoZWxsU2VydmljZXMob09iamVjdFBhZ2VMYXlvdXQpO1xuXHRjb25zdCBvUGFyYW06IGFueSA9IHt9O1xuXHRsZXQgc0N1cnJlbnRTZW1PYmogPSBcIlwiLFxuXHRcdHNDdXJyZW50QWN0aW9uID0gXCJcIjtcblx0bGV0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zO1xuXHRsZXQgYVJlbGF0ZWRBcHBzTWVudUl0ZW1zOiBhbnlbXSA9IFtdO1xuXHRsZXQgYUV4Y2x1ZGVkQWN0aW9uczogYW55W10gPSBbXTtcblxuXHRpZiAob0VudHJ5KSB7XG5cdFx0aWYgKGFTZW1LZXlzICYmIGFTZW1LZXlzLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgYVNlbUtleXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0Y29uc3Qgc1NlbUtleSA9IGFTZW1LZXlzW2pdLiRQcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGlmICghb1BhcmFtW3NTZW1LZXldKSB7XG5cdFx0XHRcdFx0b1BhcmFtW3NTZW1LZXldID0geyB2YWx1ZTogb0VudHJ5W3NTZW1LZXldIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZmFsbGJhY2sgdG8gVGVjaG5pY2FsIEtleXMgaWYgbm8gU2VtYW50aWMgS2V5IGlzIHByZXNlbnRcblx0XHRcdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7b01ldGFQYXRofS8kVHlwZS8kS2V5YCk7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBhVGVjaG5pY2FsS2V5cykge1xuXHRcdFx0XHRjb25zdCBzT2JqS2V5ID0gYVRlY2huaWNhbEtleXNba2V5XTtcblx0XHRcdFx0aWYgKCFvUGFyYW1bc09iaktleV0pIHtcblx0XHRcdFx0XHRvUGFyYW1bc09iaktleV0gPSB7IHZhbHVlOiBvRW50cnlbc09iaktleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBMb2dpYyB0byByZWFkIGFkZGl0aW9uYWwgU08gZnJvbSBtYW5pZmVzdCBhbmQgdXBkYXRlZCByZWxhdGVkYXBwcyBtb2RlbFxuXG5cdGNvbnN0IG9NYW5pZmVzdERhdGEgPSBnZXRUYXJnZXRWaWV3KG9PYmplY3RQYWdlTGF5b3V0KS5nZXRWaWV3RGF0YSgpO1xuXHRjb25zdCBhTWFuaWZlc3RTT0l0ZW1zOiBhbnlbXSA9IFtdO1xuXHRpZiAob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0Y29uc3QgYU1hbmlmZXN0U09LZXlzID0gT2JqZWN0LmtleXMob01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzKTtcblx0XHRmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBhTWFuaWZlc3RTT0tleXMubGVuZ3RoOyBrZXkrKykge1xuXHRcdFx0X2dldFNPSW50ZW50cyhvT2JqZWN0UGFnZUxheW91dCwgYU1hbmlmZXN0U09LZXlzW2tleV0sIG9QYXJhbSlcblx0XHRcdFx0LnRoZW4oXG5cdFx0XHRcdFx0X2dldFJlbGF0ZWRJbnRlbnRzLmJpbmQoXG5cdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0b01hbmlmZXN0RGF0YS5hZGRpdGlvbmFsU2VtYW50aWNPYmplY3RzW2FNYW5pZmVzdFNPS2V5c1trZXldXSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdFx0XHRcdGFNYW5pZmVzdFNPSXRlbXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgU08gSW50ZW50c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBmbkdldFBhcnNlU2hlbGxIYXNoQW5kR2V0TGlua3MoKSB7XG5cdFx0Y29uc3Qgb1BhcnNlZFVybCA9IG9TaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0c0N1cnJlbnRTZW1PYmogPSBvUGFyc2VkVXJsLnNlbWFudGljT2JqZWN0OyAvLyBDdXJyZW50IFNlbWFudGljIE9iamVjdFxuXHRcdHNDdXJyZW50QWN0aW9uID0gb1BhcnNlZFVybC5hY3Rpb247XG5cdFx0cmV0dXJuIF9nZXRTT0ludGVudHMob09iamVjdFBhZ2VMYXlvdXQsIHNDdXJyZW50U2VtT2JqLCBvUGFyYW0pO1xuXHR9XG5cblx0Zm5HZXRQYXJzZVNoZWxsSGFzaEFuZEdldExpbmtzKClcblx0XHQudGhlbihmdW5jdGlvbiAoYUxpbmtzOiBhbnkpIHtcblx0XHRcdGlmIChhTGlua3MgJiYgYUxpbmtzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldFBhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IGFBbm5vdGF0aW9uc1NPSXRlbXM6IGFueVtdID0gW107XG5cdFx0XHRcdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYCR7b01ldGFQYXRofUBgO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5VHlwZVBhdGggPSBgJHtvTWV0YVBhdGh9L0BgO1xuXHRcdFx0XHRjb25zdCBvRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzRW50aXR5U2V0UGF0aCk7XG5cdFx0XHRcdG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0gX2dldFNlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMob0VudGl0eVNldEFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdGlmICghb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYkhhc0VudGl0eVNldFNPKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMgPSBfZ2V0U2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucyhvRW50aXR5VHlwZUFubm90YXRpb25zLCBzQ3VycmVudFNlbU9iaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0YUV4Y2x1ZGVkQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnM7XG5cdFx0XHRcdC8vU2tpcCBzYW1lIGFwcGxpY2F0aW9uIGZyb20gUmVsYXRlZCBBcHBzXG5cdFx0XHRcdGFFeGNsdWRlZEFjdGlvbnMucHVzaChzQ3VycmVudEFjdGlvbik7XG5cdFx0XHRcdG9UYXJnZXRQYXJhbXMubmF2aWdhdGlvbkNvbnRleHRzID0gb0JpbmRpbmdDb250ZXh0O1xuXHRcdFx0XHRvVGFyZ2V0UGFyYW1zLnNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFNYXBwaW5ncztcblx0XHRcdFx0X2dldFJlbGF0ZWRBcHBzTWVudUl0ZW1zKGFMaW5rcywgYUV4Y2x1ZGVkQWN0aW9ucywgb1RhcmdldFBhcmFtcywgYUFubm90YXRpb25zU09JdGVtcyk7XG5cdFx0XHRcdGFSZWxhdGVkQXBwc01lbnVJdGVtcyA9IGFBbm5vdGF0aW9uc1NPSXRlbXMuY29uY2F0KGFNYW5pZmVzdFNPSXRlbXMpO1xuXHRcdFx0XHQvLyBJZiBubyBhcHAgaW4gbGlzdCwgcmVsYXRlZCBhcHBzIGJ1dHRvbiB3aWxsIGJlIGhpZGRlblxuXHRcdFx0XHRvT2JqZWN0UGFnZUxheW91dC5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLnNldFByb3BlcnR5KFwicmVsYXRlZEFwcHMvdmlzaWJpbGl0eVwiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMubGVuZ3RoID4gMCk7XG5cdFx0XHRcdG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwcy9pdGVtc1wiLCBhUmVsYXRlZEFwcHNNZW51SXRlbXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2VMYXlvdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzL3Zpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJlYWQgbGlua3NcIiwgb0Vycm9yKTtcblx0XHR9KTtcblx0cmV0dXJuIGFSZWxhdGVkQXBwc01lbnVJdGVtcztcbn1cbmZ1bmN0aW9uIF9nZXRTZW1hbnRpY09iamVjdEFubm90YXRpb25zKG9FbnRpdHlBbm5vdGF0aW9uczogYW55LCBzQ3VycmVudFNlbU9iajogYW55KSB7XG5cdGNvbnN0IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zID0ge1xuXHRcdGJIYXNFbnRpdHlTZXRTTzogZmFsc2UsXG5cdFx0YVVuYXZhaWxhYmxlQWN0aW9uczogW10sXG5cdFx0YU1hcHBpbmdzOiBbXVxuXHR9O1xuXHRsZXQgc0Fubm90YXRpb25NYXBwaW5nVGVybSwgc0Fubm90YXRpb25BY3Rpb25UZXJtO1xuXHRsZXQgc1F1YWxpZmllcjtcblx0Zm9yIChjb25zdCBrZXkgaW4gb0VudGl0eUFubm90YXRpb25zKSB7XG5cdFx0aWYgKGtleS5pbmRleE9mKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0XCIpID4gLTEgJiYgb0VudGl0eUFubm90YXRpb25zW2tleV0gPT09IHNDdXJyZW50U2VtT2JqKSB7XG5cdFx0XHRvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucy5iSGFzRW50aXR5U2V0U08gPSB0cnVlO1xuXHRcdFx0c0Fubm90YXRpb25NYXBwaW5nVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdE1hcHBpbmdcIjtcblx0XHRcdHNBbm5vdGF0aW9uQWN0aW9uVGVybSA9IFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1wiO1xuXG5cdFx0XHRpZiAoa2V5LmluZGV4T2YoXCIjXCIpID4gLTEpIHtcblx0XHRcdFx0c1F1YWxpZmllciA9IGtleS5zcGxpdChcIiNcIilbMV07XG5cdFx0XHRcdHNBbm5vdGF0aW9uTWFwcGluZ1Rlcm0gPSBgJHtzQW5ub3RhdGlvbk1hcHBpbmdUZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdFx0c0Fubm90YXRpb25BY3Rpb25UZXJtID0gYCR7c0Fubm90YXRpb25BY3Rpb25UZXJtfSMke3NRdWFsaWZpZXJ9YDtcblx0XHRcdH1cblxuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzID0gb1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYU1hcHBpbmdzLmNvbmNhdChvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25NYXBwaW5nVGVybV0pO1xuXHRcdFx0b1NlbWFudGljT2JqZWN0QW5ub3RhdGlvbnMuYVVuYXZhaWxhYmxlQWN0aW9ucyA9IG9TZW1hbnRpY09iamVjdEFubm90YXRpb25zLmFVbmF2YWlsYWJsZUFjdGlvbnMuY29uY2F0KFxuXHRcdFx0XHRvRW50aXR5QW5ub3RhdGlvbnNbc0Fubm90YXRpb25BY3Rpb25UZXJtXVxuXHRcdFx0KTtcblxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU2VtYW50aWNPYmplY3RBbm5vdGF0aW9ucztcbn1cbmZ1bmN0aW9uIGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlTGF5b3V0OiBhbnkpIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGNvbnN0IG9QYXRoID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRQYXRoKCk7XG5cdGNvbnN0IG9NZXRhUGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob1BhdGgpO1xuXHQvLyBTZW1hbnRpYyBLZXkgVm9jYWJ1bGFyeVxuXHRjb25zdCBzU2VtYW50aWNLZXlWb2NhYnVsYXJ5ID0gYCR7b01ldGFQYXRofS9gICsgYEBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNLZXlgO1xuXHQvL1NlbWFudGljIEtleXNcblx0Y29uc3QgYVNlbUtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU2VtYW50aWNLZXlWb2NhYnVsYXJ5KTtcblx0Ly8gVW5hdmFpbGFibGUgQWN0aW9uc1xuXHRjb25zdCBvRW50cnkgPSBvQmluZGluZ0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdGlmICghb0VudHJ5KSB7XG5cdFx0b0JpbmRpbmdDb250ZXh0XG5cdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAocmVxdWVzdGVkT2JqZWN0OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIHJlcXVlc3RlZE9iamVjdCwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHAgZGV0YWlsc1wiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVwZGF0ZVJlbGF0ZUFwcHNNb2RlbChvQmluZGluZ0NvbnRleHQsIG9FbnRyeSwgb09iamVjdFBhZ2VMYXlvdXQsIGFTZW1LZXlzLCBvTWV0YU1vZGVsLCBvTWV0YVBhdGgpO1xuXHR9XG59XG4vKipcbiAqIEBwYXJhbSBvQnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGZuRmlyZUJ1dHRvblByZXNzKG9CdXR0b246IGFueSkge1xuXHRjb25zdCBhQXV0aG9yaXplZFR5cGVzID0gW1wic2FwLm0uQnV0dG9uXCIsIFwic2FwLm0uT3ZlcmZsb3dUb29sYmFyQnV0dG9uXCJdO1xuXHRpZiAob0J1dHRvbiAmJiBhQXV0aG9yaXplZFR5cGVzLmluZGV4T2Yob0J1dHRvbi5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSkgIT09IC0xICYmIG9CdXR0b24uZ2V0VmlzaWJsZSgpICYmIG9CdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0b0J1dHRvbi5maXJlUHJlc3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZm5SZXNvbHZlU3RyaW5ndG9Cb29sZWFuKHNWYWx1ZTogYW55KSB7XG5cdGlmIChzVmFsdWUgPT09IFwidHJ1ZVwiIHx8IHNWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0QXBwQ29tcG9uZW50KG9Db250cm9sOiBhbnkpOiBBcHBDb21wb25lbnQge1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIpKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9XG5cdGNvbnN0IG9Pd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihvQ29udHJvbCk7XG5cdGlmICghb093bmVyKSB7XG5cdFx0cmV0dXJuIG9Db250cm9sO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBnZXRBcHBDb21wb25lbnQob093bmVyKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VGFyZ2V0VmlldyhvQ29udHJvbDogYW55KSB7XG5cdGlmIChvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIikpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0b0NvbnRyb2wgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5nZXRSb290Q29udHJvbCgpO1xuXHR9XG5cdHdoaWxlIChvQ29udHJvbCAmJiAhKG9Db250cm9sIGluc3RhbmNlb2YgVmlldykpIHtcblx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHR9XG5cdHJldHVybiBvQ29udHJvbDtcbn1cblxuZnVuY3Rpb24gaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlKHNGaWVsZENvbnRyb2xQYXRoOiBzdHJpbmcsIG9BdHRyaWJ1dGU6IGFueSkge1xuXHRsZXQgYkluYXBwbGljYWJsZSA9IGZhbHNlO1xuXHRjb25zdCBhUGFydHMgPSBzRmllbGRDb250cm9sUGF0aC5zcGxpdChcIi9cIik7XG5cdC8vIHNlbnNpdGl2ZSBkYXRhIGlzIHJlbW92ZWQgb25seSBpZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLlxuXHRpZiAoYVBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVthUGFydHNbMF1dICYmIG9BdHRyaWJ1dGVbYVBhcnRzWzBdXS5oYXNPd25Qcm9wZXJ0eShhUGFydHNbMV0pICYmIG9BdHRyaWJ1dGVbYVBhcnRzWzBdXVthUGFydHNbMV1dID09PSAwO1xuXHR9IGVsc2Uge1xuXHRcdGJJbmFwcGxpY2FibGUgPSBvQXR0cmlidXRlW3NGaWVsZENvbnRyb2xQYXRoXSA9PT0gMDtcblx0fVxuXHRyZXR1cm4gYkluYXBwbGljYWJsZTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXM6IGFueVtdLCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRjb25zdCBhT3V0QXR0cmlidXRlcyA9IFtdO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFBdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0VudGl0eVNldCA9IGFBdHRyaWJ1dGVzW2ldLmVudGl0eVNldCxcblx0XHRcdG9BdHRyaWJ1dGUgPSBhQXR0cmlidXRlc1tpXS5jb250ZXh0RGF0YTtcblxuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbXCIlNDBvZGF0YS5jb250ZXh0XCJdO1xuXHRcdGRlbGV0ZSBvQXR0cmlidXRlW1wiQG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIiU0MG9kYXRhLm1ldGFkYXRhRXRhZ1wiXTtcblx0XHRkZWxldGUgb0F0dHJpYnV0ZVtcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0Y29uc3QgYVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhvQXR0cmlidXRlKTtcblx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFQcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRjb25zdCBzUHJvcCA9IGFQcm9wZXJ0aWVzW2pdLFxuXHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAvJHtzRW50aXR5U2V0fS8ke3NQcm9wfUBgKTtcblx0XHRcdGlmIChhUHJvcGVydHlBbm5vdGF0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuUGVyc29uYWxEYXRhLnYxLklzUG90ZW50aWFsbHlTZW5zaXRpdmVcIl0gfHxcblx0XHRcdFx0XHRhUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0XCJdIHx8XG5cdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLk1lYXN1cmVcIl1cblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFQcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWVsZENvbnRyb2xcIl0pIHtcblx0XHRcdFx0XHRjb25zdCBvRmllbGRDb250cm9sID0gYVByb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbFwiXTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlW3NQcm9wXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiBDb21tb25VdGlscy5pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVbc1Byb3BdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhT3V0QXR0cmlidXRlcy5wdXNoKG9BdHRyaWJ1dGUpO1xuXHR9XG5cblx0cmV0dXJuIGFPdXRBdHRyaWJ1dGVzO1xufVxuZnVuY3Rpb24gX2ZuQ2hlY2tJc01hdGNoKG9PYmplY3Q6IGFueSwgb0tleXNUb0NoZWNrOiBhbnkpIHtcblx0Zm9yIChjb25zdCBzS2V5IGluIG9LZXlzVG9DaGVjaykge1xuXHRcdGlmIChvS2V5c1RvQ2hlY2tbc0tleV0gIT09IG9PYmplY3Rbc0tleV0pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBmbkdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgc0NvbnRleHRQYXRoOiBzdHJpbmcsIG9GaWx0ZXI/OiBvYmplY3QpIHtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L2ApIHx8IHt9LFxuXHRcdG9Qcm9wZXJ0aWVzOiBhbnkgPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoXG5cdFx0XHRvRW50aXR5VHlwZS5oYXNPd25Qcm9wZXJ0eShzS2V5KSAmJlxuXHRcdFx0IS9eXFwkL2kudGVzdChzS2V5KSAmJlxuXHRcdFx0b0VudGl0eVR5cGVbc0tleV0uJGtpbmQgJiZcblx0XHRcdF9mbkNoZWNrSXNNYXRjaChvRW50aXR5VHlwZVtzS2V5XSwgb0ZpbHRlciB8fCB7ICRraW5kOiBcIlByb3BlcnR5XCIgfSlcblx0XHQpIHtcblx0XHRcdG9Qcm9wZXJ0aWVzW3NLZXldID0gb0VudGl0eVR5cGVbc0tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvUHJvcGVydGllcztcbn1cbmZ1bmN0aW9uIGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzQ29udGV4dFBhdGg6IHN0cmluZykge1xuXHRsZXQgYU1hbmRhdG9yeUZpbHRlckZpZWxkcztcblx0aWYgKG9NZXRhTW9kZWwgJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkcyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5GaWx0ZXJSZXN0cmljdGlvbnMvUmVxdWlyZWRQcm9wZXJ0aWVzYCk7XG5cdH1cblx0cmV0dXJuIGFNYW5kYXRvcnlGaWx0ZXJGaWVsZHM7XG59XG5mdW5jdGlvbiBmbkdldElCTkFjdGlvbnMob0NvbnRyb2w6IGFueSwgYUlCTkFjdGlvbnM6IGFueVtdKSB7XG5cdGNvbnN0IGFBY3Rpb25zID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0QWN0aW9ucygpO1xuXHRpZiAoYUFjdGlvbnMpIHtcblx0XHRhQWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhci5BY3Rpb25Ub29sYmFyQWN0aW9uXCIpKSB7XG5cdFx0XHRcdG9BY3Rpb24gPSBvQWN0aW9uLmdldEFjdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9BY3Rpb24uZGF0YShcIklCTkRhdGFcIikpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMucHVzaChvQWN0aW9uKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYUlCTkFjdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBhSUJOQWN0aW9uc1xuICogQHBhcmFtIG9WaWV3XG4gKi9cbmZ1bmN0aW9uIGZuVXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnM6IGFueVtdLCBvVmlldzogVmlldykge1xuXHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0Y29uc3QgZm5HZXRMaW5rcyA9IGZ1bmN0aW9uIChvRGF0YT86IGFueSkge1xuXHRcdGlmIChvRGF0YSkge1xuXHRcdFx0Y29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhvRGF0YSk7XG5cdFx0XHRhS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0geyB2YWx1ZTogb0RhdGFbc0tleV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhSUJOQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGFJQk5BY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG9JQk5BY3Rpb246IGFueSkge1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3QgPSBvSUJOQWN0aW9uLmRhdGEoXCJJQk5EYXRhXCIpLnNlbWFudGljT2JqZWN0O1xuXHRcdFx0XHRjb25zdCBzQWN0aW9uID0gb0lCTkFjdGlvbi5kYXRhKFwiSUJORGF0YVwiKS5hY3Rpb247XG5cdFx0XHRcdENvbW1vblV0aWxzLmdldFNoZWxsU2VydmljZXMob1ZpZXcpXG5cdFx0XHRcdFx0LmdldExpbmtzKHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzU2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHNBY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhTGluazogYW55KSB7XG5cdFx0XHRcdFx0XHRvSUJOQWN0aW9uLnNldFZpc2libGUob0lCTkFjdGlvbi5nZXRWaXNpYmxlKCkgJiYgYUxpbmsgJiYgYUxpbmsubGVuZ3RoID09PSAxKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbSB0aGUgc2hlbGwgc2VydmljZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xuXHRpZiAob1ZpZXcgJiYgb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIGFueSlcblx0XHRcdD8ucmVxdWVzdE9iamVjdCgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YSk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGZuR2V0TGlua3MoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHQoc0ZyYW1ld29ya0tleTogc3RyaW5nLCBvUmVzb3VyY2VCdW5kbGU6IFJlc291cmNlQnVuZGxlLCBvUGFyYW1zPzogYW55LCBzRW50aXR5U2V0TmFtZT86IHN0cmluZykge1xuXHRsZXQgc1Jlc291cmNlS2V5ID0gc0ZyYW1ld29ya0tleTtcblx0aWYgKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdGlmIChzRW50aXR5U2V0TmFtZSkge1xuXHRcdFx0Ly8gVGhlcmUgYXJlIGNvbnNvbGUgZXJyb3JzIGxvZ2dlZCB3aGVuIG1ha2luZyBjYWxscyB0byBnZXRUZXh0IGZvciBrZXlzIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSByZXNvdXJjZSBidW5kbGVcblx0XHRcdC8vIGZvciBpbnN0YW5jZSBrZXlzIHdoaWNoIGFyZSBzdXBwb3NlZCB0byBiZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24sIGUuZywgPGtleT58PGVudGl0eVNldD4gdG8gb3ZlcnJpZGUgaW5zdGFuY2Ugc3BlY2lmaWMgdGV4dFxuXHRcdFx0Ly8gaGVuY2UgY2hlY2sgaWYgdGV4dCBleGlzdHMgKHVzaW5nIFwiaGFzVGV4dFwiKSBpbiB0aGUgcmVzb3VyY2UgYnVuZGxlIGJlZm9yZSBjYWxsaW5nIFwiZ2V0VGV4dFwiXG5cblx0XHRcdC8vIFwiaGFzVGV4dFwiIG9ubHkgY2hlY2tzIGZvciB0aGUga2V5IGluIHRoZSBpbW1lZGlhdGUgcmVzb3VyY2UgYnVuZGxlIGFuZCBub3QgaXQncyBjdXN0b20gYnVuZGxlc1xuXHRcdFx0Ly8gaGVuY2Ugd2UgbmVlZCB0byBkbyB0aGlzIHJlY3VycnNpdmVseSB0byBjaGVjayBpZiB0aGUga2V5IGV4aXN0cyBpbiBhbnkgb2YgdGhlIGJ1bmRsZXMgdGhlIGZvcm1zIHRoZSBGRSByZXNvdXJjZSBidW5kbGVcblx0XHRcdGNvbnN0IGJSZXNvdXJjZUtleUV4aXN0cyA9IF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoXG5cdFx0XHRcdChvUmVzb3VyY2VCdW5kbGUgYXMgYW55KS5hQ3VzdG9tQnVuZGxlcyxcblx0XHRcdFx0YCR7c0ZyYW1ld29ya0tleX18JHtzRW50aXR5U2V0TmFtZX1gXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBpZiByZXNvdXJjZSBrZXkgd2l0aCBlbnRpdHkgc2V0IG5hbWUgZm9yIGluc3RhbmNlIHNwZWNpZmljIHRleHQgb3ZlcnJpZGluZyBpcyBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb25cblx0XHRcdC8vIHRoZW4gdXNlIHRoZSBzYW1lIGtleSBvdGhlcndpc2UgdXNlIHRoZSBGcmFtZXdvcmsga2V5XG5cdFx0XHRzUmVzb3VyY2VLZXkgPSBiUmVzb3VyY2VLZXlFeGlzdHMgPyBgJHtzRnJhbWV3b3JrS2V5fXwke3NFbnRpdHlTZXROYW1lfWAgOiBzRnJhbWV3b3JrS2V5O1xuXHRcdH1cblx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlS2V5LCBvUGFyYW1zKTtcblx0fVxuXG5cdC8vIGRvIG5vdCBhbGxvdyBvdmVycmlkZSBzbyBnZXQgdGV4dCBmcm9tIHRoZSBpbnRlcm5hbCBidW5kbGUgZGlyZWN0bHlcblx0b1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZUtleSwgb1BhcmFtcyk7XG59XG5mdW5jdGlvbiBfY2hlY2tJZlJlc291cmNlS2V5RXhpc3RzKGFDdXN0b21CdW5kbGVzOiBhbnksIHNLZXk6IGFueSkge1xuXHRpZiAoYUN1c3RvbUJ1bmRsZXMubGVuZ3RoKSB7XG5cdFx0Zm9yIChsZXQgaSA9IGFDdXN0b21CdW5kbGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBzVmFsdWUgPSBhQ3VzdG9tQnVuZGxlc1tpXS5oYXNUZXh0KHNLZXkpO1xuXHRcdFx0Ly8gdGV4dCBmb3VuZCByZXR1cm4gdHJ1ZVxuXHRcdFx0aWYgKHNWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdF9jaGVja0lmUmVzb3VyY2VLZXlFeGlzdHMoYUN1c3RvbUJ1bmRsZXNbaV0uYUN1c3RvbUJ1bmRsZXMsIHNLZXkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25QYXRoKG9BY3Rpb246IGFueSwgYlJldHVybk9ubHlQYXRoOiBib29sZWFuLCBzQWN0aW9uTmFtZT86IHN0cmluZywgYkNoZWNrU3RhdGljVmFsdWU/OiBib29sZWFuKSB7XG5cdHNBY3Rpb25OYW1lID0gIXNBY3Rpb25OYW1lID8gb0FjdGlvbi5nZXRPYmplY3Qob0FjdGlvbi5nZXRQYXRoKCkpIDogc0FjdGlvbk5hbWU7XG5cdGxldCBzQ29udGV4dFBhdGggPSBvQWN0aW9uLmdldFBhdGgoKS5zcGxpdChcIi9AXCIpWzBdO1xuXHRjb25zdCBzRW50aXR5VHlwZU5hbWUgPSBvQWN0aW9uLmdldE9iamVjdChzQ29udGV4dFBhdGgpLiRUeXBlO1xuXHRjb25zdCBzRW50aXR5TmFtZSA9IGdldEVudGl0eVNldE5hbWUob0FjdGlvbi5nZXRNb2RlbCgpLCBzRW50aXR5VHlwZU5hbWUpO1xuXHRpZiAoc0VudGl0eU5hbWUpIHtcblx0XHRzQ29udGV4dFBhdGggPSBgLyR7c0VudGl0eU5hbWV9YDtcblx0fVxuXHRpZiAoYkNoZWNrU3RhdGljVmFsdWUpIHtcblx0XHRyZXR1cm4gb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGVgKTtcblx0fVxuXHRpZiAoYlJldHVybk9ubHlQYXRoKSB7XG5cdFx0cmV0dXJuIGAke3NDb250ZXh0UGF0aH0vJHtzQWN0aW9uTmFtZX1gO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzQ29udGV4dFBhdGg6IHNDb250ZXh0UGF0aCxcblx0XHRcdHNQcm9wZXJ0eTogb0FjdGlvbi5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS8ke3NBY3Rpb25OYW1lfUBPcmcuT0RhdGEuQ29yZS5WMS5PcGVyYXRpb25BdmFpbGFibGUvJFBhdGhgKSxcblx0XHRcdHNCaW5kaW5nUGFyYW1ldGVyOiBvQWN0aW9uLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9LyR7c0FjdGlvbk5hbWV9L0AkdWk1Lm92ZXJsb2FkLzAvJFBhcmFtZXRlci8wLyROYW1lYClcblx0XHR9O1xuXHR9XG59XG5mdW5jdGlvbiBnZXRFbnRpdHlTZXROYW1lKG9NZXRhTW9kZWw6IGFueSwgc0VudGl0eVR5cGU6IGFueSkge1xuXHRjb25zdCBvRW50aXR5Q29udGFpbmVyID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBvRW50aXR5Q29udGFpbmVyKSB7XG5cdFx0aWYgKHR5cGVvZiBvRW50aXR5Q29udGFpbmVyW2tleV0gPT09IFwib2JqZWN0XCIgJiYgb0VudGl0eUNvbnRhaW5lcltrZXldLiRUeXBlID09PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0cmV0dXJuIGtleTtcblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVEaXNwbGF5TW9kZShvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LCBvQ29sbGVjdGlvbkFubm90YXRpb25zPzogYW55KSB7XG5cdGNvbnN0IG9UZXh0QW5ub3RhdGlvbiA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLFxuXHRcdG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID1cblx0XHRcdG9UZXh0QW5ub3RhdGlvbiAmJlxuXHRcdFx0KChvUHJvcGVydHlBbm5vdGF0aW9ucyAmJlxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl0pIHx8XG5cdFx0XHRcdChvQ29sbGVjdGlvbkFubm90YXRpb25zICYmIG9Db2xsZWN0aW9uQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdKSk7XG5cblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uKSB7XG5cdFx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dE9ubHlcIikge1xuXHRcdFx0cmV0dXJuIFwiRGVzY3JpcHRpb25cIjtcblx0XHR9IGVsc2UgaWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dExhc3RcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVEZXNjcmlwdGlvblwiO1xuXHRcdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIikge1xuXHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHR9XG5cdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRyZXR1cm4gXCJEZXNjcmlwdGlvblZhbHVlXCI7XG5cdH1cblx0cmV0dXJuIG9UZXh0QW5ub3RhdGlvbiA/IFwiRGVzY3JpcHRpb25WYWx1ZVwiIDogXCJWYWx1ZVwiO1xufVxuZnVuY3Rpb24gX2dldEVudGl0eVR5cGUob0NvbnRleHQ6IGFueSkge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke29NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKX0vJFR5cGVgKTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0T2JqZWN0KHNBY3Rpb246IGFueSwgb1NlbGVjdGVkQ29udGV4dDogYW55LCBzUHJvcGVydHk6IGFueSkge1xuXHRsZXQgb0NvbnRleHQgPSBvU2VsZWN0ZWRDb250ZXh0O1xuXHRjb25zdCBuQnJhY2tldEluZGV4ID0gc0FjdGlvbi5pbmRleE9mKFwiKFwiKTtcblxuXHRpZiAobkJyYWNrZXRJbmRleCA+IC0xKSB7XG5cdFx0Y29uc3Qgc1RhcmdldFR5cGUgPSBzQWN0aW9uLnNsaWNlKG5CcmFja2V0SW5kZXggKyAxLCAtMSk7XG5cdFx0bGV0IHNDdXJyZW50VHlwZSA9IF9nZXRFbnRpdHlUeXBlKG9Db250ZXh0KTtcblxuXHRcdHdoaWxlIChzQ3VycmVudFR5cGUgIT09IHNUYXJnZXRUeXBlKSB7XG5cdFx0XHQvLyBGaW5kIHBhcmVudCBiaW5kaW5nIGNvbnRleHQgYW5kIHJldHJpZXZlIGVudGl0eSB0eXBlXG5cdFx0XHRvQ29udGV4dCA9IG9Db250ZXh0LmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAob0NvbnRleHQpIHtcblx0XHRcdFx0c0N1cnJlbnRUeXBlID0gX2dldEVudGl0eVR5cGUob0NvbnRleHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCB0eXBlIHRvIHJlcXVlc3QgcHJvcGVydHkgdmFsdWUgZm9yIGJvdW5kIGFjdGlvbiBpbnZvY2F0aW9uXCIpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9Db250ZXh0LnJlcXVlc3RPYmplY3Qoc1Byb3BlcnR5KTtcbn1cbmZ1bmN0aW9uIF9yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dDogYW55LCBzQWN0aW9uOiBhbnksIHNQcm9wZXJ0eTogYW55LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoOiBhbnkpIHtcblx0Y29uc3Qgb1Byb21pc2UgPVxuXHRcdHNQcm9wZXJ0eSAmJiBzUHJvcGVydHkuaW5kZXhPZihcIi9cIikgPT09IDBcblx0XHRcdD8gcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5KHNQcm9wZXJ0eSwgb1NlbGVjdGVkQ29udGV4dC5nZXRNb2RlbCgpKVxuXHRcdFx0OiBfcmVxdWVzdE9iamVjdChzQWN0aW9uLCBvU2VsZWN0ZWRDb250ZXh0LCBzUHJvcGVydHkpO1xuXG5cdHJldHVybiBvUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh2UHJvcGVydHlWYWx1ZTogYW55KSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG5cdFx0XHR2UHJvcGVydHlWYWx1ZTogdlByb3BlcnR5VmFsdWUsXG5cdFx0XHRvU2VsZWN0ZWRDb250ZXh0OiBvU2VsZWN0ZWRDb250ZXh0LFxuXHRcdFx0c0FjdGlvbjogc0FjdGlvbixcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGg6IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGhcblx0XHR9KTtcblx0fSk7XG59XG5mdW5jdGlvbiBfc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBhUmVxdWVzdFByb21pc2VzOiBhbnkpIHtcblx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXF1ZXN0UHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXN1bHRzOiBhbnlbXSkge1xuXHRcdFx0aWYgKGFSZXN1bHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBhQXBwbGljYWJsZUNvbnRleHRzOiBhbnlbXSA9IFtdLFxuXHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHM6IGFueVtdID0gW107XG5cdFx0XHRcdGFSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKGFSZXN1bHQ6IGFueSkge1xuXHRcdFx0XHRcdGlmIChhUmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoYVJlc3VsdC52UHJvcGVydHlWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShhUmVzdWx0LnNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRhQXBwbGljYWJsZUNvbnRleHRzLnB1c2goYVJlc3VsdC5vU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFOb3RBcHBsaWNhYmxlQ29udGV4dHMucHVzaChhUmVzdWx0Lm9TZWxlY3RlZENvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBhUmVzdWx0c1swXS5zQWN0aW9uLCBhQXBwbGljYWJsZUNvbnRleHRzLCBhTm90QXBwbGljYWJsZUNvbnRleHRzKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy50cmFjZShcIkNhbm5vdCByZXRyaWV2ZSBwcm9wZXJ0eSB2YWx1ZSBmcm9tIHBhdGhcIiwgb0Vycm9yKTtcblx0XHR9KTtcbn1cbi8qKlxuICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dFxuICogQHBhcmFtIHNBY3Rpb25cbiAqIEBwYXJhbSBhQXBwbGljYWJsZVxuICogQHBhcmFtIGFOb3RBcHBsaWNhYmxlXG4gKi9cbmZ1bmN0aW9uIF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIHNBY3Rpb246IGFueSwgYUFwcGxpY2FibGU6IGFueSwgYU5vdEFwcGxpY2FibGU6IGFueSkge1xuXHRjb25zdCBzRHluYW1pY0FjdGlvblBhdGhQcmVmaXggPSBgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9keW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCxcblx0XHRvSW50ZXJuYWxNb2RlbCA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgJHtzRHluYW1pY0FjdGlvblBhdGhQcmVmaXh9L2FBcHBsaWNhYmxlYCwgYUFwcGxpY2FibGUpO1xuXHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgJHtzRHluYW1pY0FjdGlvblBhdGhQcmVmaXh9L2FOb3RBcHBsaWNhYmxlYCwgYU5vdEFwcGxpY2FibGUpO1xufVxuZnVuY3Rpb24gc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcDogYW55LCBhU2VsZWN0ZWRDb250ZXh0czogYW55KSB7XG5cdGNvbnN0IGFQcm9taXNlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IHNBY3Rpb24gaW4gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCkge1xuXHRcdC8vIFJlc2V0IGFsbCBwcm9wZXJ0aWVzIGJlZm9yZSBjb21wdXRhdGlvblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdGJFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdH0pO1xuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IGFBcHBsaWNhYmxlID0gW10sXG5cdFx0XHRhTm90QXBwbGljYWJsZSA9IFtdLFxuXHRcdFx0c1Byb3BlcnR5ID0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcFtzQWN0aW9uXSxcblx0XHRcdHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9keW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2JFbmFibGVkYDtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VsZWN0ZWRDb250ZXh0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRDb250ZXh0ID0gYVNlbGVjdGVkQ29udGV4dHNbaV07XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRjb25zdCBvVHJhbnNmb3JtZWRCaW5kaW5nID0gdHJhbnNmb3JtUmVjdXJzaXZlbHkoXG5cdFx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG5cdFx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IHNSZXN1bHQgPSBjb21waWxlRXhwcmVzc2lvbihvVHJhbnNmb3JtZWRCaW5kaW5nKTtcblx0XHRcdFx0XHRpZiAoc1Jlc3VsdCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0XHRcdFx0YUFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGUucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdF9zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhUmVxdWVzdFByb21pc2VzID0gW107XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFTZWxlY3RlZENvbnRleHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZENvbnRleHQgPSBhU2VsZWN0ZWRDb250ZXh0c1tpXTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChfcmVxdWVzdFByb3BlcnR5KG9TZWxlY3RlZENvbnRleHQsIHNBY3Rpb24sIHNQcm9wZXJ0eSwgc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHQvLyBUaGUgYXBwbGljYWJsZSBhbmQgbm90LWFwcGxpY2FibGUgc2VsZWN0ZWQgY29udGV4dHMgZm9yIGVhY2ggYWN0aW9uIGFuZFxuXHRcdFx0Ly8gVGhlIGVuYWJsZWQgcHJvcGVydHkgb2YgdGhlIGR5bmFtaWMgYWN0aW9uIGluIGludGVybmFsIG1vZGVsIGNvbnRleHQuXG5cdFx0XHRhUHJvbWlzZXMucHVzaChfc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgYVJlcXVlc3RQcm9taXNlcykpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcbn1cblxuZnVuY3Rpb24gc2V0T2JqZWN0TWFwcGluZ3Moc1NlbWFudGljT2JqZWN0OiBzdHJpbmcsIG9QYXJhbXM6IGFueSwgYVNlbWFudGljT2JqZWN0TWFwcGluZ3M6IGFueSkge1xuXHRhU2VtYW50aWNPYmplY3RNYXBwaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0aWYgKHNTZW1hbnRpY09iamVjdCA9PT0gb0l0ZW0uc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdGNvbnN0IG9NYXBwaW5ncyA9IG9JdGVtLml0ZW1zO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBvTWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPSBvTWFwcGluZ3NbaV0ua2V5O1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9IG9NYXBwaW5nc1tpXS52YWx1ZTtcblx0XHRcdFx0aWYgKG9QYXJhbXNbc0xvY2FsUHJvcGVydHldKSB7XG5cdFx0XHRcdFx0b1BhcmFtc1tzU2VtYW50aWNPYmplY3RQcm9wZXJ0eV0gPSBvUGFyYW1zW3NMb2NhbFByb3BlcnR5XTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiBvUGFyYW1zO1xufVxuXG5mdW5jdGlvbiBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzUHJvcGVydHlUeXBlOiBzdHJpbmcpIHtcblx0Ly8gbWRjIGRlZmluZXMgdGhlIGZ1bGwgc2V0IG9mIG9wZXJhdGlvbnMgdGhhdCBhcmUgbWVhbmluZ2Z1bCBmb3IgZWFjaCBFZG0gVHlwZVxuXHQvLyBUT0RPIFJlcGxhY2Ugd2l0aCBtb2RlbCAvIGludGVybmFsIHdheSBvZiByZXRyaWV2aW5nIHRoZSBhY3R1YWwgbW9kZWwgdHlwZSB1c2VkIGZvciB0aGUgcHJvcGVydHlcblx0Y29uc3Qgb0RhdGFDbGFzcyA9IFR5cGVVdGlsLmdldERhdGFUeXBlQ2xhc3NOYW1lKHNQcm9wZXJ0eVR5cGUpO1xuXHQvLyBUT0RPIG5lZWQgdG8gcGFzcyBwcm9wZXIgZm9ybWF0T3B0aW9ucywgY29uc3RyYWludHMgaGVyZVxuXHRjb25zdCBvQmFzZVR5cGUgPSBUeXBlVXRpbC5nZXRCYXNlVHlwZShvRGF0YUNsYXNzLCB7fSwge30pO1xuXHRyZXR1cm4gRmlsdGVyT3BlcmF0b3JVdGlsLmdldE9wZXJhdG9yc0ZvclR5cGUob0Jhc2VUeXBlKTtcbn1cbmZ1bmN0aW9uIF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcHM6IGFueSwgYUV4cHJlc3Npb25PcHM6IGFueSkge1xuXHQvLyBGcm9tIHRoZSBkZWZhdWx0IHNldCBvZiBPcGVyYXRvcnMgZm9yIHRoZSBCYXNlIFR5cGUsIHNlbGVjdCB0aG9zZSB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBBbGxvd2VkIFZhbHVlLlxuXHQvLyBJbiBjYXNlIHRoYXQgbm8gb3BlcmF0b3JzIGFyZSBmb3VuZCwgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IHRoZSBkZWZhdWx0IHNldCBpcyB1c2VkLlxuXHRjb25zdCBhT3BlcmF0b3JzID0gYURlZmF1bHRPcHMuZmlsdGVyKGZ1bmN0aW9uIChzRWxlbWVudDogYW55KSB7XG5cdFx0cmV0dXJuIGFFeHByZXNzaW9uT3BzLmluZGV4T2Yoc0VsZW1lbnQpID4gLTE7XG5cdH0pO1xuXHRyZXR1cm4gYU9wZXJhdG9ycy50b1N0cmluZygpIHx8IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24oYUV4cHJlc3Npb25zOiBhbnkpIHtcblx0Y29uc3QgYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5ID0gQ29tbW9uVXRpbHMuQWxsb3dlZEV4cHJlc3Npb25zUHJpbztcblxuXHRhRXhwcmVzc2lvbnMuc29ydChmdW5jdGlvbiAoYTogYW55LCBiOiBhbnkpIHtcblx0XHRyZXR1cm4gYUFsbG93ZWRFeHByZXNzaW9uc1ByaW9yaXR5LmluZGV4T2YoYSkgLSBhQWxsb3dlZEV4cHJlc3Npb25zUHJpb3JpdHkuaW5kZXhPZihiKTtcblx0fSk7XG5cblx0cmV0dXJuIGFFeHByZXNzaW9uc1swXTtcbn1cbmZ1bmN0aW9uIGdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRzUHJvcGVydHk6IGFueSxcblx0c0VudGl0eVNldFBhdGg6IGFueSxcblx0b0NvbnRleHQ6IGFueSxcblx0c1R5cGU/OiBhbnksXG5cdGJVc2VTZW1hbnRpY0RhdGVSYW5nZT86IGFueSxcblx0c1NldHRpbmdzPzogYW55XG4pIHtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzRW50aXR5U2V0UGF0aCwgb0NvbnRleHQpO1xuXHRjb25zdCBhRXF1YWxzT3BzID0gW1wiRVFcIl07XG5cdGNvbnN0IGFTaW5nbGVSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5PVExFXCIsIFwiTk9UTFRcIiwgXCJOT1RHRVwiLCBcIk5PVEdUXCJdO1xuXHRjb25zdCBhU2luZ2xlUmFuZ2VEVEJhc2ljT3BzID0gW1wiRVFcIiwgXCJCVFwiXTtcblx0Y29uc3QgYVNpbmdsZVZhbHVlRGF0ZU9wcyA9IFtcblx0XHRcIlRPREFZXCIsXG5cdFx0XCJUT01PUlJPV1wiLFxuXHRcdFwiWUVTVEVSREFZXCIsXG5cdFx0XCJEQVRFXCIsXG5cdFx0XCJGSVJTVERBWVdFRUtcIixcblx0XHRcIkxBU1REQVlXRUVLXCIsXG5cdFx0XCJGSVJTVERBWU1PTlRIXCIsXG5cdFx0XCJMQVNUREFZTU9OVEhcIixcblx0XHRcIkZJUlNUREFZUVVBUlRFUlwiLFxuXHRcdFwiTEFTVERBWVFVQVJURVJcIixcblx0XHRcIkZJUlNUREFZWUVBUlwiLFxuXHRcdFwiTEFTVERBWVlFQVJcIlxuXHRdO1xuXHRjb25zdCBhQmFzaWNEYXRlVGltZU9wcyA9IFtcIkVRXCIsIFwiTEVcIiwgXCJHRVwiLCBcIkJUXCJdO1xuXHRjb25zdCBhTXVsdGlSYW5nZU9wcyA9IFtcIkVRXCIsIFwiR0VcIiwgXCJMRVwiLCBcIkxUXCIsIFwiR1RcIiwgXCJCVFwiLCBcIk5FXCIsIFwiTk9UQlRcIiwgXCJOT1RMRVwiLCBcIk5PVExUXCIsIFwiTk9UR0VcIiwgXCJOT1RHVFwiXTtcblx0Y29uc3QgYVNlYXJjaEV4cHJlc3Npb25PcHMgPSBbXCJDb250YWluc1wiLCBcIk5vdENvbnRhaW5zXCIsIFwiU3RhcnRzV2l0aFwiLCBcIk5vdFN0YXJ0c1dpdGhcIiwgXCJFbmRzV2l0aFwiLCBcIk5vdEVuZHNXaXRoXCJdO1xuXHRjb25zdCBhU2VtYW50aWNEYXRlT3BzRXh0ID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFN1cHBvcnRlZE9wZXJhdGlvbnMoKTtcblx0Y29uc3QgYlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdGxldCBhU2VtYW50aWNEYXRlT3BzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvU2V0dGluZ3MgPSB0eXBlb2Ygc1NldHRpbmdzID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzU2V0dGluZ3MpLmN1c3RvbURhdGEgOiBzU2V0dGluZ3M7XG5cblx0aWYgKG9Db250ZXh0LmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCkgPT09IHRydWUpIHtcblx0XHRyZXR1cm4gYUVxdWFsc09wcy50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKG9TZXR0aW5ncyAmJiBvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uICYmIG9TZXR0aW5ncy5vcGVyYXRvckNvbmZpZ3VyYXRpb24ubGVuZ3RoID4gMCkge1xuXHRcdGFTZW1hbnRpY0RhdGVPcHMgPSBTZW1hbnRpY0RhdGVPcGVyYXRvcnMuZ2V0RmlsdGVyT3BlcmF0aW9ucyhvU2V0dGluZ3Mub3BlcmF0b3JDb25maWd1cmF0aW9uKTtcblx0fSBlbHNlIHtcblx0XHRhU2VtYW50aWNEYXRlT3BzID0gU2VtYW50aWNEYXRlT3BlcmF0b3JzLmdldFNlbWFudGljRGF0ZU9wZXJhdGlvbnMoKTtcblx0fVxuXHRjb25zdCBhU2luZ2xlUmFuZ2VEYXRlVGltZU9wcyA9IGFTZW1hbnRpY0RhdGVPcHMuZmlsdGVyKGZ1bmN0aW9uIChzT3BlcmF0b3IpIHtcblx0XHRyZXR1cm4gc09wZXJhdG9yICE9PSBcIkRBVEVcIiAmJiBzT3BlcmF0b3IgIT09IFwiREFURVJBTkdFXCIgJiYgc09wZXJhdG9yICE9PSBcIkZST01cIiAmJiBzT3BlcmF0b3IgIT09IFwiVE9cIjtcblx0fSk7XG5cdC8vIEdldCB0aGUgZGVmYXVsdCBPcGVyYXRvcnMgZm9yIHRoaXMgUHJvcGVydHkgVHlwZVxuXHRsZXQgYURlZmF1bHRPcGVyYXRvcnMgPSBfZ2V0RGVmYXVsdE9wZXJhdG9ycyhzVHlwZSk7XG5cblx0Ly8gSXMgdGhlcmUgYSBGaWx0ZXIgUmVzdHJpY3Rpb24gZGVmaW5lZCBmb3IgdGhpcyBwcm9wZXJ0eT9cblx0aWYgKG9GaWx0ZXJSZXN0cmljdGlvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiYgb0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSkge1xuXHRcdC8vIEV4dGVuZGluZyB0aGUgZGVmYXVsdCBvcGVyYXRvcnMgbGlzdCB3aXRoIFNlbWFudGljIERhdGUgb3B0aW9ucyBEQVRFUkFOR0UsIERBVEUsIEZST00gYW5kIFRPXG5cdFx0aWYgKGJTZW1hbnRpY0RhdGVSYW5nZSkge1xuXHRcdFx0YURlZmF1bHRPcGVyYXRvcnMgPSBhU2VtYW50aWNEYXRlT3BzRXh0LmNvbmNhdChhRGVmYXVsdE9wZXJhdG9ycyk7XG5cdFx0fVxuXHRcdGNvbnN0IHNBbGxvd2VkRXhwcmVzc2lvbiA9IENvbW1vblV0aWxzLmdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSk7XG5cdFx0bGV0IHNSZXN0cmljdGlvbnM7XG5cdFx0Ly8gSW4gY2FzZSBtb3JlIHRoYW4gb25lIEFsbG93ZWQgRXhwcmVzc2lvbnMgaGFzIGJlZW4gZGVmaW5lZCBmb3IgYSBwcm9wZXJ0eVxuXHRcdC8vIGNob29zZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBBbGxvd2VkIEV4cHJlc3Npb25cblxuXHRcdC8vIE11bHRpVmFsdWUgaGFzIHNhbWUgT3BlcmF0b3IgYXMgU2luZ2xlVmFsdWUsIGJ1dCB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSAobWF4Q29uZGl0aW9ucylcblx0XHRzd2l0Y2ggKHNBbGxvd2VkRXhwcmVzc2lvbikge1xuXHRcdFx0Y2FzZSBcIlNpbmdsZVZhbHVlXCI6XG5cdFx0XHRcdGNvbnN0IGFTaW5nbGVWYWx1ZU9wcyA9IHNUeXBlID09PSBcIkVkbS5EYXRlXCIgJiYgYlNlbWFudGljRGF0ZVJhbmdlID8gYVNpbmdsZVZhbHVlRGF0ZU9wcyA6IGFFcXVhbHNPcHM7XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhU2luZ2xlVmFsdWVPcHMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVZhbHVlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhRXF1YWxzT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiU2luZ2xlUmFuZ2VcIjpcblx0XHRcdFx0bGV0IGFFeHByZXNzaW9uT3BzO1xuXHRcdFx0XHRpZiAoYlNlbWFudGljRGF0ZVJhbmdlKSB7XG5cdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNlbWFudGljRGF0ZU9wcztcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZURhdGVUaW1lT3BzLmNvbmNhdChhQmFzaWNEYXRlVGltZU9wcyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlT3BzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIikge1xuXHRcdFx0XHRcdGFFeHByZXNzaW9uT3BzID0gYVNpbmdsZVJhbmdlRFRCYXNpY09wcztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhRXhwcmVzc2lvbk9wcyA9IGFTaW5nbGVSYW5nZU9wcztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBzT3BlcmF0b3JzID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYUV4cHJlc3Npb25PcHMpO1xuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gc09wZXJhdG9ycyA/IHNPcGVyYXRvcnMgOiBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNdWx0aVJhbmdlXCI6XG5cdFx0XHRcdHNSZXN0cmljdGlvbnMgPSBfZ2V0UmVzdHJpY3Rpb25zKGFEZWZhdWx0T3BlcmF0b3JzLCBhTXVsdGlSYW5nZU9wcyk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlNlYXJjaEV4cHJlc3Npb25cIjpcblx0XHRcdFx0c1Jlc3RyaWN0aW9ucyA9IF9nZXRSZXN0cmljdGlvbnMoYURlZmF1bHRPcGVyYXRvcnMsIGFTZWFyY2hFeHByZXNzaW9uT3BzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblwiOlxuXHRcdFx0XHRzUmVzdHJpY3Rpb25zID0gX2dldFJlc3RyaWN0aW9ucyhhRGVmYXVsdE9wZXJhdG9ycywgYVNlYXJjaEV4cHJlc3Npb25PcHMuY29uY2F0KGFNdWx0aVJhbmdlT3BzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Ly8gSW4gY2FzZSBBbGxvd2VkRXhwcmVzc2lvbnMgaXMgbm90IHJlY29nbmlzZWQsIHVuZGVmaW5lZCBpbiByZXR1cm4gcmVzdWx0cyBpbiB0aGUgZGVmYXVsdCBzZXQgb2Zcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlLlxuXHRcdHJldHVybiBzUmVzdHJpY3Rpb25zO1xuXHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlXCIpIHtcblx0XHQvLyBJbiBjYXNlIEFsbG93ZWRFeHByZXNzaW9ucyBpcyBub3QgcHJvdmlkZWQgZm9yIHR5cGUgRWRtLkRhdGUgdGhlbiBhbGwgdGhlIGRlZmF1bHRcblx0XHQvLyBvcGVyYXRvcnMgZm9yIHRoZSB0eXBlIHNob3VsZCBiZSByZXR1cm5lZCBleGNsdWRpbmcgc2VtYW50aWMgb3BlcmF0b3JzIGZyb20gdGhlIGxpc3QuXG5cdFx0YVNlbWFudGljRGF0ZU9wcyA9IFNlbWFudGljRGF0ZU9wZXJhdG9ycy5nZXRTZW1hbnRpY0RhdGVPcGVyYXRpb25zKCk7XG5cdFx0Y29uc3QgYU9wZXJhdG9ycyA9IGFEZWZhdWx0T3BlcmF0b3JzLmZpbHRlcihmdW5jdGlvbiAoc0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIGFTZW1hbnRpY0RhdGVPcHMuaW5kZXhPZihzRWxlbWVudCkgPCAwO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhT3BlcmF0b3JzLnRvU3RyaW5nKCk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFBhcmFtZXRlckluZm8ob01ldGFNb2RlbDogYW55LCBzQ29udGV4dFBhdGg6IGFueSkge1xuXHRjb25zdCBzUGFyYW1ldGVyQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHNDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRjb25zdCBiUmVzdWx0Q29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJhbWV0ZXJDb250ZXh0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdGNvbnN0IG9QYXJhbWV0ZXJJbmZvOiBhbnkgPSB7fTtcblx0aWYgKGJSZXN1bHRDb250ZXh0ICYmIHNQYXJhbWV0ZXJDb250ZXh0UGF0aCAhPT0gc0NvbnRleHRQYXRoKSB7XG5cdFx0b1BhcmFtZXRlckluZm8uY29udGV4dFBhdGggPSBzUGFyYW1ldGVyQ29udGV4dFBhdGg7XG5cdFx0b1BhcmFtZXRlckluZm8ucGFyYW1ldGVyUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzUGFyYW1ldGVyQ29udGV4dFBhdGgpO1xuXHR9XG5cdHJldHVybiBvUGFyYW1ldGVySW5mbztcbn1cbmZ1bmN0aW9uIGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucyhvUHJvcGVydHlNZXRhZGF0YTogYW55LCBhVmFsaWRPcGVyYXRvcnM6IGFueSwgYUN1bXVsYXRpdmVDb25kaXRpb25zOiBhbnksIG9TZWxlY3RPcHRpb246IGFueSkge1xuXHRjb25zdCBvQ29uZGl0aW9uID0gZ2V0Q29uZGl0aW9ucyhvU2VsZWN0T3B0aW9uLCBvUHJvcGVydHlNZXRhZGF0YSk7XG5cdGlmIChvQ29uZGl0aW9uKSB7XG5cdFx0aWYgKCFhVmFsaWRPcGVyYXRvcnMgfHwgYVZhbGlkT3BlcmF0b3JzLmluZGV4T2Yob0NvbmRpdGlvbi5vcGVyYXRvcikgPiAtMSkge1xuXHRcdFx0YUN1bXVsYXRpdmVDb25kaXRpb25zLnB1c2gob0NvbmRpdGlvbik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhQ3VtdWxhdGl2ZUNvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzQ29udGV4dFBhdGhcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudFxuICogQHBhcmFtIHNTZWxlY3RPcHRpb25Qcm9wXG4gKiBAcGFyYW0gb0NvbmRpdGlvbnNcbiAqIEBwYXJhbSBzQ29uZGl0aW9uUGF0aFxuICogQHBhcmFtIHNDb25kaXRpb25Qcm9wXG4gKiBAcGFyYW0gb1ZhbGlkUHJvcGVydGllc1xuICogQHBhcmFtIG9NZXRhTW9kZWxcbiAqIEBwYXJhbSBpc1BhcmFtZXRlclxuICovXG5mdW5jdGlvbiBhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRzQ29udGV4dFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvblByb3A6IGFueSxcblx0b0NvbmRpdGlvbnM6IGFueSxcblx0c0NvbmRpdGlvblBhdGg6IGFueSxcblx0c0NvbmRpdGlvblByb3A6IGFueSxcblx0b1ZhbGlkUHJvcGVydGllczogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdGlzUGFyYW1ldGVyOiBhbnlcbikge1xuXHRsZXQgYUNvbmRpdGlvbnM6IGFueVtdID0gW10sXG5cdFx0YVNlbGVjdE9wdGlvbnMsXG5cdFx0YVZhbGlkT3BlcmF0b3JzO1xuXG5cdGlmIChpc1BhcmFtZXRlciB8fCBDb21tb25VdGlscy5pc1Byb3BlcnR5RmlsdGVyYWJsZShvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgsIHNDb25kaXRpb25Qcm9wLCB0cnVlKSkge1xuXHRcdGFTZWxlY3RPcHRpb25zID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNTZWxlY3RPcHRpb25Qcm9wKTtcblx0XHRhVmFsaWRPcGVyYXRvcnMgPSBpc1BhcmFtZXRlciA/IFtcIkVRXCJdIDogQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoc0NvbmRpdGlvblByb3AsIHNDb250ZXh0UGF0aCwgb01ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5TWV0YWRhdGEgPSBvVmFsaWRQcm9wZXJ0aWVzW3NDb25kaXRpb25Qcm9wXTtcblx0XHQvLyBDcmVhdGUgY29uZGl0aW9ucyBmb3IgYWxsIHRoZSBzZWxlY3RPcHRpb25zIG9mIHRoZSBwcm9wZXJ0eVxuXHRcdGFDb25kaXRpb25zID0gaXNQYXJhbWV0ZXJcblx0XHRcdD8gYWRkU2VsZWN0T3B0aW9uVG9Db25kaXRpb25zKG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMsIGFDb25kaXRpb25zLCBhU2VsZWN0T3B0aW9uc1swXSlcblx0XHRcdDogYVNlbGVjdE9wdGlvbnMucmVkdWNlKGFkZFNlbGVjdE9wdGlvblRvQ29uZGl0aW9ucy5iaW5kKG51bGwsIG9Qcm9wZXJ0eU1ldGFkYXRhLCBhVmFsaWRPcGVyYXRvcnMpLCBhQ29uZGl0aW9ucyk7XG5cdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYgKHNDb25kaXRpb25QYXRoKSB7XG5cdFx0XHRcdG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblBhdGggKyBzQ29uZGl0aW9uUHJvcClcblx0XHRcdFx0XHQ/IG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc0NvbmRpdGlvblByb3BdLmNvbmNhdChhQ29uZGl0aW9ucylcblx0XHRcdFx0XHQ6IGFDb25kaXRpb25zO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0NvbmRpdGlvbnNbc0NvbmRpdGlvblByb3BdID0gb0NvbmRpdGlvbnMuaGFzT3duUHJvcGVydHkoc0NvbmRpdGlvblByb3ApXG5cdFx0XHRcdFx0PyBvQ29uZGl0aW9uc1tzQ29uZGl0aW9uUHJvcF0uY29uY2F0KGFDb25kaXRpb25zKVxuXHRcdFx0XHRcdDogYUNvbmRpdGlvbnM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgb0NvbmRpdGlvbnM6IG9iamVjdCwgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIHNDb250ZXh0UGF0aDogc3RyaW5nKSB7XG5cdGNvbnN0IGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdGFNZXRhZGF0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9WYWxpZFByb3BlcnRpZXMpLFxuXHRcdG9QYXJhbWV0ZXJJbmZvID0gQ29tbW9uVXRpbHMuZ2V0UGFyYW1ldGVySW5mbyhvTWV0YU1vZGVsLCBzQ29udGV4dFBhdGgpLFxuXHRcdHNQYXJhbWV0ZXJDb250ZXh0UGF0aCA9IG9QYXJhbWV0ZXJJbmZvLmNvbnRleHRQYXRoLFxuXHRcdG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMgPSBvUGFyYW1ldGVySW5mby5wYXJhbWV0ZXJQcm9wZXJ0aWVzLFxuXHRcdGJIYXNQYXJhbWV0ZXJzID0gISFvUGFyYW1ldGVySW5mby5jb250ZXh0UGF0aCAmJiBvVmFsaWRQYXJhbWV0ZXJQcm9wZXJ0aWVzICYmIE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpLmxlbmd0aCA+IDA7XG5cblx0aWYgKGJIYXNQYXJhbWV0ZXJzKSB7XG5cdFx0Y29uc3QgYU1ldGFkYXRhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9WYWxpZFBhcmFtZXRlclByb3BlcnRpZXMpO1xuXHRcdGFNZXRhZGF0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUGFyYW1ldGVyOiBzdHJpbmcpIHtcblx0XHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRcdGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYCRQYXJhbWV0ZXIuJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YCkpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgJFBhcmFtZXRlci4ke3NNZXRhZGF0YVBhcmFtZXRlcn1gO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUGFyYW1ldGVyKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IHNNZXRhZGF0YVBhcmFtZXRlcjtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHNNZXRhZGF0YVBhcmFtZXRlci5zdGFydHNXaXRoKFwiUF9cIikgJiZcblx0XHRcdFx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGAkUGFyYW1ldGVyLiR7c01ldGFkYXRhUGFyYW1ldGVyLnNsaWNlKDIsIHNNZXRhZGF0YVBhcmFtZXRlci5sZW5ndGgpfWApXG5cdFx0XHQpIHtcblx0XHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBgJFBhcmFtZXRlci4ke3NNZXRhZGF0YVBhcmFtZXRlci5zbGljZSgyLCBzTWV0YWRhdGFQYXJhbWV0ZXIubGVuZ3RoKX1gO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0c01ldGFkYXRhUGFyYW1ldGVyLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJlxuXHRcdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUGFyYW1ldGVyLnNsaWNlKDIsIHNNZXRhZGF0YVBhcmFtZXRlci5sZW5ndGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUGFyYW1ldGVyLnNsaWNlKDIsIHNNZXRhZGF0YVBhcmFtZXRlci5sZW5ndGgpO1xuXHRcdFx0fSBlbHNlIGlmIChhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoYCRQYXJhbWV0ZXIuUF8ke3NNZXRhZGF0YVBhcmFtZXRlcn1gKSkge1xuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGAkUGFyYW1ldGVyLlBfJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YDtcblx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGBQXyR7c01ldGFkYXRhUGFyYW1ldGVyfWApKSB7XG5cdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYFBfJHtzTWV0YWRhdGFQYXJhbWV0ZXJ9YDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRcdFx0c1BhcmFtZXRlckNvbnRleHRQYXRoLFxuXHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRzTWV0YWRhdGFQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0b1ZhbGlkUGFyYW1ldGVyUHJvcGVydGllcyxcblx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRhTWV0YWRhdFByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoc01ldGFkYXRhUHJvcGVydHk6IHN0cmluZykge1xuXHRcdGxldCBzU2VsZWN0T3B0aW9uTmFtZTtcblx0XHRpZiAoYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKHNNZXRhZGF0YVByb3BlcnR5KSkge1xuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUgPSBzTWV0YWRhdGFQcm9wZXJ0eTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0c01ldGFkYXRhUHJvcGVydHkuc3RhcnRzV2l0aChcIlBfXCIpICYmXG5cdFx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMuaW5jbHVkZXMoc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKSlcblx0XHQpIHtcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc01ldGFkYXRhUHJvcGVydHkuc2xpY2UoMiwgc01ldGFkYXRhUHJvcGVydHkubGVuZ3RoKTtcblx0XHR9IGVsc2UgaWYgKGFTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcy5pbmNsdWRlcyhgUF8ke3NNZXRhZGF0YVByb3BlcnR5fWApKSB7XG5cdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSA9IGBQXyR7c01ldGFkYXRhUHJvcGVydHl9YDtcblx0XHR9XG5cdFx0aWYgKHNTZWxlY3RPcHRpb25OYW1lKSB7XG5cdFx0XHRhZGRTZWxlY3RPcHRpb25zVG9Db25kaXRpb25zKFxuXHRcdFx0XHRzQ29udGV4dFBhdGgsXG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0XHRzU2VsZWN0T3B0aW9uTmFtZSxcblx0XHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0c01ldGFkYXRhUHJvcGVydHksXG5cdFx0XHRcdG9WYWxpZFByb3BlcnRpZXMsXG5cdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdGZhbHNlXG5cdFx0XHQpO1xuXHRcdH1cblx0fSk7XG5cblx0YVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmZvckVhY2goZnVuY3Rpb24gKHNTZWxlY3RPcHRpb246IGFueSkge1xuXHRcdGlmIChzU2VsZWN0T3B0aW9uLmluZGV4T2YoXCIuXCIpID4gMCAmJiAhc1NlbGVjdE9wdGlvbi5pbmNsdWRlcyhcIiRQYXJhbWV0ZXJcIikpIHtcblx0XHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBgLyR7c1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9YC5zdGFydHNXaXRoKHNDb250ZXh0UGF0aClcblx0XHRcdFx0PyBgLyR7c1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9YFxuXHRcdFx0XHQ6IGAke3NDb250ZXh0UGF0aH0vJHtzU2VsZWN0T3B0aW9uLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKX1gOyAvLyBjaGVjayBpZiB0aGUgZnVsbCBwYXRoLCBlZyBTYWxlc09yZGVyTWFuYWdlLl9JdGVtLk1hdGVyaWFsIGV4aXN0cyBpbiB0aGUgbWV0YW1vZGVsXG5cdFx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3Qoc0Z1bGxDb250ZXh0UGF0aC5yZXBsYWNlKFwiUF9cIiwgXCJcIikpKSB7XG5cdFx0XHRcdF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0XHRcdFx0XHRzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0b0NvbmRpdGlvbnNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gb0NvbmRpdGlvbnM7XG59XG4vKipcbiAqIEBwYXJhbSBzRnVsbENvbnRleHRQYXRoXG4gKiBAcGFyYW0gc01haW5FbnRpdHlTZXRQYXRoXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBzU2VsZWN0T3B0aW9uXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHBhcmFtIG9Db25kaXRpb25zXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVDb25kaXRpb25zRm9yTmF2UHJvcGVydGllcyhcblx0c0Z1bGxDb250ZXh0UGF0aDogYW55LFxuXHRzTWFpbkVudGl0eVNldFBhdGg6IGFueSxcblx0b1NlbGVjdGlvblZhcmlhbnQ6IGFueSxcblx0c1NlbGVjdE9wdGlvbjogYW55LFxuXHRvTWV0YU1vZGVsOiBhbnksXG5cdG9Db25kaXRpb25zOiBhbnlcbikge1xuXHRsZXQgYU5hdk9iamVjdE5hbWVzID0gc1NlbGVjdE9wdGlvbi5zcGxpdChcIi5cIik7XG5cdC8vIEVnOiBcIlNhbGVzT3JkZXJNYW5hZ2UuX0l0ZW0uX01hdGVyaWFsLk1hdGVyaWFsXCIgb3IgXCJfSXRlbS5NYXRlcmlhbFwiXG5cdGlmIChgLyR7c1NlbGVjdE9wdGlvbi5yZXBsYWNlQWxsKFwiLlwiLCBcIi9cIil9YC5zdGFydHNXaXRoKHNNYWluRW50aXR5U2V0UGF0aCkpIHtcblx0XHRjb25zdCBzRnVsbFBhdGggPSAoYC8ke3NTZWxlY3RPcHRpb259YCBhcyBhbnkpLnJlcGxhY2VBbGwoXCIuXCIsIFwiL1wiKSxcblx0XHRcdHNOYXZQYXRoID0gc0Z1bGxQYXRoLnJlcGxhY2UoYCR7c01haW5FbnRpdHlTZXRQYXRofS9gLCBcIlwiKTtcblx0XHRhTmF2T2JqZWN0TmFtZXMgPSBzTmF2UGF0aC5zcGxpdChcIi9cIik7XG5cdH1cblx0bGV0IHNDb25kaXRpb25QYXRoID0gXCJcIjtcblx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGFOYXZPYmplY3ROYW1lc1thTmF2T2JqZWN0TmFtZXMubGVuZ3RoIC0gMV07IC8vIE1hdGVyaWFsIGZyb20gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbFxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGFOYXZPYmplY3ROYW1lcy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRpZiAob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c01haW5FbnRpdHlTZXRQYXRofS8ke2FOYXZPYmplY3ROYW1lc1tpXS5yZXBsYWNlKFwiUF9cIiwgXCJcIil9YCkuJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0qL2A7IC8vIF9JdGVtKi8gaW4gY2FzZSBvZiAxOm4gY2FyZGluYWxpdHlcblx0XHR9IGVsc2Uge1xuXHRcdFx0c0NvbmRpdGlvblBhdGggPSBgJHtzQ29uZGl0aW9uUGF0aCArIGFOYXZPYmplY3ROYW1lc1tpXX0vYDsgLy8gX0l0ZW0vIGluIGNhc2Ugb2YgMToxIGNhcmRpbmFsaXR5XG5cdFx0fVxuXHRcdHNNYWluRW50aXR5U2V0UGF0aCA9IGAke3NNYWluRW50aXR5U2V0UGF0aH0vJHthTmF2T2JqZWN0TmFtZXNbaV19YDtcblx0fVxuXHRjb25zdCBzTmF2UHJvcGVydHlQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zbGljZSgwLCBzRnVsbENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSksXG5cdFx0b1ZhbGlkUHJvcGVydGllcyA9IENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTmF2UHJvcGVydHlQYXRoKSxcblx0XHRhU2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRsZXQgc1NlbGVjdE9wdGlvbk5hbWUgPSBzUHJvcGVydHlOYW1lO1xuXHRpZiAob1ZhbGlkUHJvcGVydGllc1tzUHJvcGVydHlOYW1lXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZTtcblx0fSBlbHNlIGlmIChzUHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoXCJQX1wiKSAmJiBvVmFsaWRQcm9wZXJ0aWVzW3NQcm9wZXJ0eU5hbWUucmVwbGFjZShcIlBfXCIsIFwiXCIpXSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gc1Byb3BlcnR5TmFtZS5yZXBsYWNlKFwiUF9cIiwgXCJcIik7XG5cdH0gZWxzZSBpZiAob1ZhbGlkUHJvcGVydGllc1tgUF8ke3NQcm9wZXJ0eU5hbWV9YF0gJiYgYVNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzLmluY2x1ZGVzKGBQXyR7c1Byb3BlcnR5TmFtZX1gKSkge1xuXHRcdHNTZWxlY3RPcHRpb25OYW1lID0gYFBfJHtzUHJvcGVydHlOYW1lfWA7XG5cdH1cblx0aWYgKHNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0Ly8gaWYgdGhlcmUgaXMgbm8gU2FsZXNPcmRlck1hbmFnZS5fSXRlbS5NYXRlcmlhbCB5ZXQgaW4gdGhlIG9Db25kaXRpb25zXG5cdH0gZWxzZSBpZiAoIXNQcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aChcIlBfXCIpICYmIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdKSB7XG5cdFx0ZGVsZXRlIG9Db25kaXRpb25zW3NDb25kaXRpb25QYXRoICsgc1NlbGVjdE9wdGlvbk5hbWVdO1xuXHRcdGFkZFNlbGVjdE9wdGlvbnNUb0NvbmRpdGlvbnMoXG5cdFx0XHRzTmF2UHJvcGVydHlQYXRoLFxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRzU2VsZWN0T3B0aW9uLFxuXHRcdFx0b0NvbmRpdGlvbnMsXG5cdFx0XHRzQ29uZGl0aW9uUGF0aCxcblx0XHRcdHNTZWxlY3RPcHRpb25OYW1lLFxuXHRcdFx0b1ZhbGlkUHJvcGVydGllcyxcblx0XHRcdG9NZXRhTW9kZWwsXG5cdFx0XHRmYWxzZVxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0YWRkU2VsZWN0T3B0aW9uc1RvQ29uZGl0aW9ucyhcblx0XHRcdHNOYXZQcm9wZXJ0eVBhdGgsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdHNTZWxlY3RPcHRpb24sXG5cdFx0XHRvQ29uZGl0aW9ucyxcblx0XHRcdHNDb25kaXRpb25QYXRoLFxuXHRcdFx0c1NlbGVjdE9wdGlvbk5hbWUsXG5cdFx0XHRvVmFsaWRQcm9wZXJ0aWVzLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblx0fVxufVxuZnVuY3Rpb24gYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgbVBhZ2VDb250ZXh0OiBhbnlbXSwgb1ZpZXc6IGFueSkge1xuXHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0Y29uc3Qgb05hdmlnYXRpb25TZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRyZXR1cm4gb05hdmlnYXRpb25TZXJ2aWNlLm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50KG1QYWdlQ29udGV4dCwgb1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCkpO1xufVxuZnVuY3Rpb24gYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQ6IGFueSwgbUZpbHRlcnM6IGFueSwgb1RhcmdldEluZm86IGFueSwgb0ZpbHRlckluZm8/OiBhbnkpIHtcblx0bGV0IHNGaWx0ZXI6IGFueSxcblx0XHRzTG93ID0gXCJcIixcblx0XHRzSGlnaCA9IG51bGw7XG5cdGNvbnN0IGZuR2V0U2lnbkFuZE9wdGlvbiA9IGZ1bmN0aW9uIChzT3BlcmF0b3I6IGFueSwgc0xvd1ZhbHVlOiBhbnksIHNIaWdoVmFsdWU6IGFueSkge1xuXHRcdGNvbnN0IG9TZWxlY3RPcHRpb25TdGF0ZSA9IHtcblx0XHRcdG9wdGlvbjogXCJcIixcblx0XHRcdHNpZ246IFwiSVwiLFxuXHRcdFx0bG93OiBzTG93VmFsdWUsXG5cdFx0XHRoaWdoOiBzSGlnaFZhbHVlXG5cdFx0fTtcblx0XHRzd2l0Y2ggKHNPcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIkNvbnRhaW5zXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlN0YXJ0c1dpdGhcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLmxvdyArPSBcIipcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRW5kc1dpdGhcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiQ1BcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLmxvdyA9IGAqJHtvU2VsZWN0T3B0aW9uU3RhdGUubG93fWA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdGNhc2UgXCJMVFwiOlxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gc09wZXJhdG9yO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUT0RBWVwiOlxuXHRcdFx0Y2FzZSBcIkRBVEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiRVFcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRUVRXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkVtcHR5XCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkVRXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBcIlwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJDUFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOT1RCVFwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJCVFwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RTdGFydHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgKz0gXCIqXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5zaWduID0gXCJFXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk5vdEVuZHNXaXRoXCI6XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5vcHRpb24gPSBcIkNQXCI7XG5cdFx0XHRcdG9TZWxlY3RPcHRpb25TdGF0ZS5sb3cgPSBgKiR7b1NlbGVjdE9wdGlvblN0YXRlLmxvd31gO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUuc2lnbiA9IFwiRVwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJOb3RFbXB0eVwiOlxuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUub3B0aW9uID0gXCJORVwiO1xuXHRcdFx0XHRvU2VsZWN0T3B0aW9uU3RhdGUubG93ID0gXCJcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTEVcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTEVcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR0VcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR0VcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UTFRcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiTFRcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTk9UR1RcIjpcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLm9wdGlvbiA9IFwiR1RcIjtcblx0XHRcdFx0b1NlbGVjdE9wdGlvblN0YXRlLnNpZ24gPSBcIkVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRMb2cud2FybmluZyhgJHtzT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWQuICR7c0ZpbHRlcn0gY291bGQgbm90IGJlIGFkZGVkIHRvIHRoZSBuYXZpZ2F0aW9uIGNvbnRleHRgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TZWxlY3RPcHRpb25TdGF0ZTtcblx0fTtcblx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zO1xuXHRjb25zdCBvRmlsdGVyc1dpdGhvdXRDb25mbGljdCA9IG1GaWx0ZXJzLmZpbHRlckNvbmRpdGlvbnNXaXRob3V0Q29uZmxpY3QgPyBtRmlsdGVycy5maWx0ZXJDb25kaXRpb25zV2l0aG91dENvbmZsaWN0IDoge307XG5cdGNvbnN0IG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QgPSBvVGFyZ2V0SW5mby5wcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0ID8gb1RhcmdldEluZm8ucHJvcGVydGllc1dpdGhvdXRDb25mbGljdCA6IHt9O1xuXHRjb25zdCBhZGRGaWx0ZXJzVG9TZWxlY3Rpb25WYXJpYW50ID0gZnVuY3Rpb24gKHNlbGVjdGlvblZhcmlhbnQ6IGFueSwgc0ZpbHRlck5hbWU6IGFueSwgc1BhdGg/OiBhbnkpIHtcblx0XHRjb25zdCBhRmlsdGVycyA9IG9GaWx0ZXJDb25kaXRpb25zW3NGaWx0ZXJOYW1lXTtcblx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYUZpbHRlcnMpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXIgPSBhRmlsdGVyc1tpdGVtXTtcblx0XHRcdHNMb3cgPSAob0ZpbHRlci52YWx1ZXNbMF0gJiYgb0ZpbHRlci52YWx1ZXNbMF0udG9TdHJpbmcoKSkgfHwgXCJcIjtcblx0XHRcdHNIaWdoID0gKG9GaWx0ZXIudmFsdWVzWzFdICYmIG9GaWx0ZXIudmFsdWVzWzFdLnRvU3RyaW5nKCkpIHx8IG51bGw7XG5cdFx0XHRpZiAob0ZpbHRlci5vcGVyYXRvciA9PT0gXCJUT0RBWVwiIHx8IG9GaWx0ZXIub3BlcmF0b3IgPT09IFwiREFURVwiKSB7XG5cdFx0XHRcdGNvbnN0IGFGaWx0ZXIgPSBvRmlsdGVySW5mb1swXS5hRmlsdGVycy5maWx0ZXIoZnVuY3Rpb24gKGZpbHRlcjogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZpbHRlci5zUGF0aCA9PT0gc0ZpbHRlck5hbWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzTG93ID0gYUZpbHRlclswXS5vVmFsdWUxIHx8IFwiXCI7XG5cdFx0XHRcdHNIaWdoID0gbnVsbDtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9TZWxlY3RPcHRpb25WYWx1ZXMgPSBmbkdldFNpZ25BbmRPcHRpb24ob0ZpbHRlci5vcGVyYXRvciwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0aWYgKG9TZWxlY3RPcHRpb25WYWx1ZXMub3B0aW9uKSB7XG5cdFx0XHRcdHNlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKFxuXHRcdFx0XHRcdHNQYXRoID8gc1BhdGggOiBzRmlsdGVyTmFtZSxcblx0XHRcdFx0XHRvU2VsZWN0T3B0aW9uVmFsdWVzLnNpZ24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5vcHRpb24sXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5sb3csXG5cdFx0XHRcdFx0b1NlbGVjdE9wdGlvblZhbHVlcy5oaWdoXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZvciAoc0ZpbHRlciBpbiBvRmlsdGVyQ29uZGl0aW9ucykge1xuXHRcdC8vIG9ubHkgYWRkIHRoZSBmaWx0ZXIgdmFsdWVzIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFNWIGFscmVhZHlcblx0XHRpZiAoIW9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzRmlsdGVyKSkge1xuXHRcdFx0Ly8gVE9ETyA6IGN1c3RvbSBmaWx0ZXJzIHNob3VsZCBiZSBpZ25vcmVkIG1vcmUgZ2VuZXJpY2FsbHlcblx0XHRcdGlmIChzRmlsdGVyID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGFkZEZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQob1NlbGVjdGlvblZhcmlhbnQsIHNGaWx0ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAob1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdCAmJiBzRmlsdGVyIGluIG9UYWJsZVByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb1RhYmxlUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFtzRmlsdGVyXSk7XG5cdFx0XHR9XG5cdFx0XHQvLyBpZiBwcm9wZXJ0eSB3YXMgd2l0aG91dCBjb25mbGljdCBpbiBwYWdlIGNvbnRleHQgdGhlbiBhZGQgcGF0aCBmcm9tIHBhZ2UgY29udGV4dCB0byBTVlxuXHRcdFx0aWYgKHNGaWx0ZXIgaW4gb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3QpIHtcblx0XHRcdFx0YWRkRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudChvU2VsZWN0aW9uVmFyaWFudCwgc0ZpbHRlciwgb0ZpbHRlcnNXaXRob3V0Q29uZmxpY3Rbc0ZpbHRlcl0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBpc1N0aWNreUVkaXRNb2RlKG9Db250cm9sOiBDb250cm9sKSB7XG5cdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9Db250cm9sLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRjb25zdCBiVUlFZGl0YWJsZSA9IG9Db250cm9sLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0cmV0dXJuIGJJc1N0aWNreU1vZGUgJiYgYlVJRWRpdGFibGU7XG59XG4vKipcbiAqIEBwYXJhbSBhTWFuZGF0b3J5RmlsdGVyRmllbGRzXG4gKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnRcbiAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXG4gKi9cbmZ1bmN0aW9uIGFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkczogYW55W10sIG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM6IGFueSkge1xuXHRpZiAob1NlbGVjdGlvblZhcmlhbnQgJiYgYU1hbmRhdG9yeUZpbHRlckZpZWxkcyAmJiBhTWFuZGF0b3J5RmlsdGVyRmllbGRzLmxlbmd0aCkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYU1hbmRhdG9yeUZpbHRlckZpZWxkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29uc3QgYVNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKFwiRGlzcGxheUN1cnJlbmN5XCIpLFxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyAmJiBvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiKTtcblx0XHRcdGlmIChcblx0XHRcdFx0YU1hbmRhdG9yeUZpbHRlckZpZWxkc1tpXS4kUHJvcGVydHlQYXRoID09PSBcIkRpc3BsYXlDdXJyZW5jeVwiICYmXG5cdFx0XHRcdCghYVNWT3B0aW9uIHx8ICFhU1ZPcHRpb24ubGVuZ3RoKSAmJlxuXHRcdFx0XHRhRGVmYXVsdFNWT3B0aW9uICYmXG5cdFx0XHRcdGFEZWZhdWx0U1ZPcHRpb24ubGVuZ3RoXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3QgZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uID0gYURlZmF1bHRTVk9wdGlvblswXTtcblx0XHRcdFx0Y29uc3Qgc1NpZ24gPSBkaXNwbGF5Q3VycmVuY3lTZWxlY3RPcHRpb25bXCJTaWduXCJdO1xuXHRcdFx0XHRjb25zdCBzT3B0aW9uID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiT3B0aW9uXCJdO1xuXHRcdFx0XHRjb25zdCBzTG93ID0gZGlzcGxheUN1cnJlbmN5U2VsZWN0T3B0aW9uW1wiTG93XCJdO1xuXHRcdFx0XHRjb25zdCBzSGlnaCA9IGRpc3BsYXlDdXJyZW5jeVNlbGVjdE9wdGlvbltcIkhpZ2hcIl07XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LmFkZFNlbGVjdE9wdGlvbihcIkRpc3BsYXlDdXJyZW5jeVwiLCBzU2lnbiwgc09wdGlvbiwgc0xvdywgc0hpZ2gpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gZ2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBzUGF0aDogYW55LCBvVmlldz86IGFueSkge1xuXHRjb25zdCBhVGVjaG5pY2FsS2V5cyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9gKS4kS2V5O1xuXHRjb25zdCBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzOiBhbnkgPSBbXTtcblx0Y29uc3QgYUltbXV0YWJsZVZpc2libGVGaWVsZHM6IGFueSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9gKTtcblx0Zm9yIChjb25zdCBpdGVtIGluIG9FbnRpdHlUeXBlKSB7XG5cdFx0aWYgKG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IG9Bbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS8ke2l0ZW19QGApIHx8IHt9LFxuXHRcdFx0XHRiSXNLZXkgPSBhVGVjaG5pY2FsS2V5cy5pbmRleE9mKGl0ZW0pID4gLTEsXG5cdFx0XHRcdGJJc0ltbXV0YWJsZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5JbW11dGFibGVcIl0sXG5cdFx0XHRcdGJJc05vbkNvbXB1dGVkID0gIW9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZFwiXSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuSGlkZGVuXCJdLFxuXHRcdFx0XHRiSXNDb21wdXRlZERlZmF1bHRWYWx1ZSA9IG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ29yZS5WMS5Db21wdXRlZERlZmF1bHRWYWx1ZVwiXSxcblx0XHRcdFx0YklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCA9XG5cdFx0XHRcdFx0YklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlID09PSBcIkVkbS5HdWlkXCJcblx0XHRcdFx0XHRcdD8gYklzQ29tcHV0ZWREZWZhdWx0VmFsdWUgJiYgb0Fubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ6IGZhbHNlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYklzS2V5Q29tcHV0ZWREZWZhdWx0VmFsdWVXaXRoVGV4dCB8fCAoYklzS2V5ICYmIG9FbnRpdHlUeXBlW2l0ZW1dLiRUeXBlICE9PSBcIkVkbS5HdWlkXCIpKSAmJlxuXHRcdFx0XHRiSXNOb25Db21wdXRlZCAmJlxuXHRcdFx0XHRiSXNWaXNpYmxlXG5cdFx0XHQpIHtcblx0XHRcdFx0YU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fSBlbHNlIGlmIChiSXNJbW11dGFibGUgJiYgYklzTm9uQ29tcHV0ZWQgJiYgYklzVmlzaWJsZSkge1xuXHRcdFx0XHRhSW1tdXRhYmxlVmlzaWJsZUZpZWxkcy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWJJc05vbkNvbXB1dGVkICYmIGJJc0NvbXB1dGVkRGVmYXVsdFZhbHVlICYmIG9WaWV3KSB7XG5cdFx0XHRcdGNvbnN0IG9EaWFnbm9zdGljcyA9IGdldEFwcENvbXBvbmVudChvVmlldykuZ2V0RGlhZ25vc3RpY3MoKTtcblx0XHRcdFx0Y29uc3Qgc01lc3NhZ2UgPSBcIkNvcmUuQ29tcHV0ZWREZWZhdWx0VmFsdWUgaXMgaWdub3JlZCBhcyBDb3JlLkNvbXB1dGVkIGlzIGFscmVhZHkgc2V0IHRvIHRydWVcIjtcblx0XHRcdFx0b0RpYWdub3N0aWNzLmFkZElzc3VlKFxuXHRcdFx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0XHRzTWVzc2FnZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZSxcblx0XHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uQW5ub3RhdGlvbnM/Lklnbm9yZWRBbm5vdGF0aW9uXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXMgPSBDb21tb25VdGlscy5nZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zKHNQYXRoLCBvTWV0YU1vZGVsKTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0YVJlcXVpcmVkUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChzUHJvcGVydHk6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0Fubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9LyR7c1Byb3BlcnR5fUBgKSxcblx0XHRcdFx0YklzVmlzaWJsZSA9ICFvQW5ub3RhdGlvbnMgfHwgIW9Bbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5IaWRkZW5cIl07XG5cdFx0XHRpZiAoYklzVmlzaWJsZSAmJiBhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLmluZGV4T2Yoc1Byb3BlcnR5KSA9PT0gLTEgJiYgYUltbXV0YWJsZVZpc2libGVGaWVsZHMuaW5kZXhPZihzUHJvcGVydHkpID09PSAtMSkge1xuXHRcdFx0XHRhTm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzLnB1c2goc1Byb3BlcnR5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gYU5vbkNvbXB1dGVkVmlzaWJsZUZpZWxkcy5jb25jYXQoYUltbXV0YWJsZVZpc2libGVGaWVsZHMpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXMoc1BhdGg6IGFueSwgb01ldGFNb2RlbDogYW55LCBiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRjb25zdCBhUGF0aFBhcnRzID0gc1BhdGguc3BsaXQoXCIvXCIpO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnkgPSBbXTtcblx0bGV0IGFSZXF1aXJlZFByb3BlcnRpZXNXaXRoUGF0aHM6IGFueSA9IFtdO1xuXHRsZXQgb0VudGl0eVNldEFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGApO1xuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Y29uc3Qgc05hdmlnYXRpb25QYXRoID0gYVBhdGhQYXJ0c1thUGF0aFBhcnRzLmxlbmd0aCAtIDFdO1xuXHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTsgLy8gcmVtb3ZpbmcgTmF2aWdhdGlvblByb3BlcnR5IGZyb20gdGhlIGVuZC5cblx0XHRjb25zdCBzUGFyZW50RW50aXR5U2V0UGF0aCA9IGFQYXRoUGFydHMuam9pbihcIi9cIik7XG5cdFx0Y29uc3Qgb05hdmlnYXRpb25SZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5nZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKG9NZXRhTW9kZWwsIHNQYXJlbnRFbnRpdHlTZXRQYXRoLCBzTmF2aWdhdGlvblBhdGgpO1xuXHRcdG9FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXJlbnRFbnRpdHlTZXRQYXRofS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke3NOYXZpZ2F0aW9uUGF0aH1AYCk7XG5cdFx0aWYgKENvbW1vblV0aWxzLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhvTmF2aWdhdGlvblJlc3RyaWN0aW9ucywgdHJ1ZSwgYkNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKSkge1xuXHRcdFx0YVJlcXVpcmVkUHJvcGVydGllc1dpdGhQYXRocyA9IGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0XHQ/IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdFx0XHQ6IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0KCFhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzIHx8ICFhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzLmxlbmd0aCkgJiZcblx0XHRcdENvbW1vblV0aWxzLmhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyhvRW50aXR5U2V0QW5ub3RhdGlvbnMsIGZhbHNlLCBiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpXG5cdFx0KSB7XG5cdFx0XHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzID0gQ29tbW9uVXRpbHMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKFxuXHRcdFx0XHRvRW50aXR5U2V0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoQ29tbW9uVXRpbHMuaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgZmFsc2UsIGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykpIHtcblx0XHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzID0gQ29tbW9uVXRpbHMuZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zKG9FbnRpdHlTZXRBbm5vdGF0aW9ucywgYkNoZWNrVXBkYXRlUmVzdHJpY3Rpb25zKTtcblx0fVxuXHRhUmVxdWlyZWRQcm9wZXJ0aWVzV2l0aFBhdGhzLmZvckVhY2goZnVuY3Rpb24gKG9SZXF1aXJlZFByb3BlcnR5OiBhbnkpIHtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBvUmVxdWlyZWRQcm9wZXJ0eVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0YVJlcXVpcmVkUHJvcGVydGllcy5wdXNoKHNQcm9wZXJ0eSk7XG5cdH0pO1xuXHRyZXR1cm4gYVJlcXVpcmVkUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyhzUGF0aDogYW55LCBvTWV0YU1vZGVsOiBhbnkpIHtcblx0cmV0dXJuIENvbW1vblV0aWxzLmdldFJlcXVpcmVkUHJvcGVydGllcyhzUGF0aCwgb01ldGFNb2RlbCk7XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnMoc1BhdGg6IGFueSwgb01ldGFNb2RlbDogYW55KSB7XG5cdHJldHVybiBDb21tb25VdGlscy5nZXRSZXF1aXJlZFByb3BlcnRpZXMoc1BhdGgsIG9NZXRhTW9kZWwsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnMob0Fubm90YXRpb25zOiBhbnksIGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9uczogYm9vbGVhbiA9IGZhbHNlKSB7XG5cdGlmIChiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcblx0fVxuXHRyZXR1cm4gb0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcztcbn1cblxuZnVuY3Rpb24gaGFzUmVzdHJpY3RlZFByb3BlcnRpZXNJbkFubm90YXRpb25zKFxuXHRvQW5ub3RhdGlvbnM6IGFueSxcblx0YklzTmF2aWdhdGlvblJlc3RyaWN0aW9uczogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSBmYWxzZVxuKSB7XG5cdGlmIChiSXNOYXZpZ2F0aW9uUmVzdHJpY3Rpb25zKSB7XG5cdFx0aWYgKGJDaGVja1VwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJVcGRhdGVSZXN0cmljdGlvbnNcIl0gJiYgb0Fubm90YXRpb25zW1wiVXBkYXRlUmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdFx0XHQ/IHRydWVcblx0XHRcdFx0OiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucyAmJiBvQW5ub3RhdGlvbnNbXCJJbnNlcnRSZXN0cmljdGlvbnNcIl0gJiYgb0Fubm90YXRpb25zW1wiSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllcyA/IHRydWUgOiBmYWxzZTtcblx0fSBlbHNlIGlmIChiQ2hlY2tVcGRhdGVSZXN0cmljdGlvbnMpIHtcblx0XHRyZXR1cm4gb0Fubm90YXRpb25zICYmXG5cdFx0XHRvQW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5VcGRhdGVSZXN0cmljdGlvbnNcIl0gJiZcblx0XHRcdG9Bbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLlVwZGF0ZVJlc3RyaWN0aW9uc1wiXS5SZXF1aXJlZFByb3BlcnRpZXNcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gb0Fubm90YXRpb25zICYmXG5cdFx0b0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdICYmXG5cdFx0b0Fubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuSW5zZXJ0UmVzdHJpY3Rpb25zXCJdLlJlcXVpcmVkUHJvcGVydGllc1xuXHRcdD8gdHJ1ZVxuXHRcdDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHNldFVzZXJEZWZhdWx0cyhcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRhUGFyYW1ldGVyczogYW55W10sXG5cdG9Nb2RlbDogSlNPTk1vZGVsLFxuXHRiSXNBY3Rpb246IGJvb2xlYW4sXG5cdGJJc0NyZWF0ZT86IGJvb2xlYW4sXG5cdG9BY3Rpb25EZWZhdWx0VmFsdWVzPzogYW55XG4pIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCksXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMgPSAob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9LFxuXHRcdFx0b1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRpZiAoIW9TaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpKSB7XG5cdFx0XHRhUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUGFyYW1ldGVyOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZSA9IGJJc0FjdGlvblxuXHRcdFx0XHRcdD8gYC8ke29QYXJhbWV0ZXIuJE5hbWV9YFxuXHRcdFx0XHRcdDogb1BhcmFtZXRlci5nZXRQYXRoKCkuc2xpY2Uob1BhcmFtZXRlci5nZXRQYXRoKCkubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJOYW1lID0gYklzQWN0aW9uID8gc1Byb3BlcnR5TmFtZS5zbGljZSgxKSA6IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHRcdGlmIChvQWN0aW9uRGVmYXVsdFZhbHVlcyAmJiBiSXNDcmVhdGUpIHtcblx0XHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb0FjdGlvbkRlZmF1bHRWYWx1ZXNbc1BhcmFtZXRlck5hbWVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdG9Nb2RlbC5zZXRQcm9wZXJ0eShzUHJvcGVydHlOYW1lLCBvU3RhcnR1cFBhcmFtZXRlcnNbc1BhcmFtZXRlck5hbWVdWzBdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2VzLmdldFN0YXJ0dXBBcHBTdGF0ZShvQXBwQ29tcG9uZW50KS50aGVuKGZ1bmN0aW9uIChvU3RhcnR1cEFwcFN0YXRlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EYXRhID0gb1N0YXJ0dXBBcHBTdGF0ZS5nZXREYXRhKCkgfHwge30sXG5cdFx0XHRcdGFFeHRlbmRlZFBhcmFtZXRlcnMgPSAob0RhdGEuc2VsZWN0aW9uVmFyaWFudCAmJiBvRGF0YS5zZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHx8IFtdO1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1BhcmFtZXRlcjogYW55KSB7XG5cdFx0XHRcdGNvbnN0IHNQcm9wZXJ0eU5hbWUgPSBiSXNBY3Rpb25cblx0XHRcdFx0XHQ/IGAvJHtvUGFyYW1ldGVyLiROYW1lfWBcblx0XHRcdFx0XHQ6IG9QYXJhbWV0ZXIuZ2V0UGF0aCgpLnNsaWNlKG9QYXJhbWV0ZXIuZ2V0UGF0aCgpLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTmFtZSA9IGJJc0FjdGlvbiA/IHNQcm9wZXJ0eU5hbWUuc2xpY2UoMSkgOiBzUHJvcGVydHlOYW1lO1xuXHRcdFx0XHRpZiAob0FjdGlvbkRlZmF1bHRWYWx1ZXMgJiYgYklzQ3JlYXRlKSB7XG5cdFx0XHRcdFx0aWYgKG9BY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSkge1xuXHRcdFx0XHRcdFx0b01vZGVsLnNldFByb3BlcnR5KHNQcm9wZXJ0eU5hbWUsIG9BY3Rpb25EZWZhdWx0VmFsdWVzW3NQYXJhbWV0ZXJOYW1lXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9TdGFydHVwUGFyYW1ldGVyc1tzUGFyYW1ldGVyTmFtZV0pIHtcblx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1N0YXJ0dXBQYXJhbWV0ZXJzW3NQYXJhbWV0ZXJOYW1lXVswXSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYUV4dGVuZGVkUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBpIGluIGFFeHRlbmRlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9FeHRlbmRlZFBhcmFtZXRlciA9IGFFeHRlbmRlZFBhcmFtZXRlcnNbaV07XG5cdFx0XHRcdFx0XHRpZiAob0V4dGVuZGVkUGFyYW1ldGVyLlByb3BlcnR5TmFtZSA9PT0gc1BhcmFtZXRlck5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb1JhbmdlID0gb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGhcblx0XHRcdFx0XHRcdFx0XHQ/IG9FeHRlbmRlZFBhcmFtZXRlci5SYW5nZXNbb0V4dGVuZGVkUGFyYW1ldGVyLlJhbmdlcy5sZW5ndGggLSAxXVxuXHRcdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRpZiAob1JhbmdlICYmIG9SYW5nZS5TaWduID09PSBcIklcIiAmJiBvUmFuZ2UuT3B0aW9uID09PSBcIkVRXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRvTW9kZWwuc2V0UHJvcGVydHkoc1Byb3BlcnR5TmFtZSwgb1JhbmdlLkxvdyk7IC8vIGhpZ2ggaXMgaWdub3JlZCB3aGVuIE9wdGlvbj1FUVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiByZXNvbHZlKHRydWUpO1xuXHRcdH0pO1xuXHR9KTtcbn1cbmZ1bmN0aW9uIGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUob1N0YXJ0dXBQYXJhbWV0ZXJzOiBhbnksIG9JbmJvdW5kUGFyYW1ldGVyczogYW55KSB7XG5cdGNvbnN0IG9JbmJvdW5kcyA9IG9JbmJvdW5kUGFyYW1ldGVycyxcblx0XHRhQ3JlYXRlUGFyYW1ldGVycyA9IG9JbmJvdW5kc1xuXHRcdFx0PyBPYmplY3Qua2V5cyhvSW5ib3VuZHMpLmZpbHRlcihmdW5jdGlvbiAoc1BhcmFtZXRlcjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9JbmJvdW5kc1tzUGFyYW1ldGVyXS51c2VGb3JDcmVhdGU7XG5cdFx0XHQgIH0pXG5cdFx0XHQ6IFtdO1xuXHRsZXQgb1JldDtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhQ3JlYXRlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHNDcmVhdGVQYXJhbWV0ZXIgPSBhQ3JlYXRlUGFyYW1ldGVyc1tpXTtcblx0XHRjb25zdCBhVmFsdWVzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICYmIG9TdGFydHVwUGFyYW1ldGVyc1tzQ3JlYXRlUGFyYW1ldGVyXTtcblx0XHRpZiAoYVZhbHVlcyAmJiBhVmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0b1JldCA9IG9SZXQgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0XHRcdG9SZXRbc0NyZWF0ZVBhcmFtZXRlcl0gPSBhVmFsdWVzWzBdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1JldDtcbn1cbmZ1bmN0aW9uIGdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQ6IGFueSkge1xuXHRjb25zdCBhU2VtYW50aWNPYmplY3RNYXBwaW5nOiBhbnlbXSA9IFtdO1xuXHRpZiAob091dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9PdXRib3VuZC5wYXJhbWV0ZXJzKSB8fCBbXTtcblx0XHRpZiAoYVBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoc1BhcmFtOiBzdHJpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBvT3V0Ym91bmQucGFyYW1ldGVyc1tzUGFyYW1dO1xuXHRcdFx0XHRpZiAob01hcHBpbmcudmFsdWUgJiYgb01hcHBpbmcudmFsdWUudmFsdWUgJiYgb01hcHBpbmcudmFsdWUuZm9ybWF0ID09PSBcImJpbmRpbmdcIikge1xuXHRcdFx0XHRcdC8vIHVzaW5nIHRoZSBmb3JtYXQgb2YgVUkuTWFwcGluZ1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY01hcHBpbmcgPSB7XG5cdFx0XHRcdFx0XHRcIkxvY2FsUHJvcGVydHlcIjoge1xuXHRcdFx0XHRcdFx0XHRcIiRQcm9wZXJ0eVBhdGhcIjogb01hcHBpbmcudmFsdWUudmFsdWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIjogc1BhcmFtXG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGlmIChhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdC8vIFRvIGNoZWNrIGlmIHRoZSBzZW1hbnRpY09iamVjdCBNYXBwaW5nIGlzIGRvbmUgZm9yIHRoZSBzYW1lIGxvY2FsIHByb3BlcnR5IG1vcmUgdGhhdCBvbmNlIHRoZW4gZmlyc3Qgb25lIHdpbGwgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhU2VtYW50aWNPYmplY3RNYXBwaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0gIT09XG5cdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljTWFwcGluZ1tcIkxvY2FsUHJvcGVydHlcIl1bXCIkUHJvcGVydHlQYXRoXCJdXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcucHVzaChvU2VtYW50aWNNYXBwaW5nKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nLnB1c2gob1NlbWFudGljTWFwcGluZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFTZW1hbnRpY09iamVjdE1hcHBpbmc7XG59XG5mdW5jdGlvbiBnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24ob1ZpZXdEYXRhOiBhbnksIG9Dcm9zc05hdjogYW55KSB7XG5cdGNvbnN0IG9IZWFkZXJGYWNldEl0ZW1zOiBhbnkgPSB7fTtcblx0bGV0IHNJZDtcblx0Y29uc3Qgb0NvbnRyb2xDb25maWcgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb247XG5cdGZvciAoY29uc3QgY29uZmlnIGluIG9Db250cm9sQ29uZmlnKSB7XG5cdFx0aWYgKGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiKSA+IC0xIHx8IGNvbmZpZy5pbmRleE9mKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpID4gLTEpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0b0NvbnRyb2xDb25maWdbY29uZmlnXS5uYXZpZ2F0aW9uICYmXG5cdFx0XHRcdG9Db250cm9sQ29uZmlnW2NvbmZpZ10ubmF2aWdhdGlvbi50YXJnZXRPdXRib3VuZCAmJlxuXHRcdFx0XHRvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmRcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBzT3V0Ym91bmQgPSBvQ29udHJvbENvbmZpZ1tjb25maWddLm5hdmlnYXRpb24udGFyZ2V0T3V0Ym91bmQub3V0Ym91bmQ7XG5cdFx0XHRcdGNvbnN0IG9PdXRib3VuZCA9IG9Dcm9zc05hdltzT3V0Ym91bmRdO1xuXHRcdFx0XHRpZiAob091dGJvdW5kLnNlbWFudGljT2JqZWN0ICYmIG9PdXRib3VuZC5hY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAoY29uZmlnLmluZGV4T2YoXCJDaGFydFwiKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIk1pY3JvQ2hhcnRMaW5rXCIsIGNvbmZpZ10pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzSWQgPSBnZW5lcmF0ZShbXCJmZVwiLCBcIkhlYWRlckRQTGlua1wiLCBjb25maWddKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvT3V0Ym91bmQpO1xuXHRcdFx0XHRcdG9IZWFkZXJGYWNldEl0ZW1zW3NJZF0gPSB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvT3V0Ym91bmQuYWN0aW9uLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYENyb3NzIG5hdmlnYXRpb24gb3V0Ym91bmQgaXMgY29uZmlndXJlZCB3aXRob3V0IHNlbWFudGljIG9iamVjdCBhbmQgYWN0aW9uIGZvciAke3NPdXRib3VuZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0hlYWRlckZhY2V0SXRlbXM7XG59XG5mdW5jdGlvbiBzZXRTZW1hbnRpY09iamVjdE1hcHBpbmdzKG9TZWxlY3Rpb25WYXJpYW50OiBhbnksIHZNYXBwaW5nczogb2JqZWN0KSB7XG5cdGNvbnN0IG9NYXBwaW5ncyA9IHR5cGVvZiB2TWFwcGluZ3MgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZNYXBwaW5ncykgOiB2TWFwcGluZ3M7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb01hcHBpbmdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc0xvY2FsUHJvcGVydHkgPVxuXHRcdFx0KG9NYXBwaW5nc1tpXVtcIkxvY2FsUHJvcGVydHlcIl0gJiYgb01hcHBpbmdzW2ldW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHQob01hcHBpbmdzW2ldW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmXG5cdFx0XHRcdG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTG9jYWxQcm9wZXJ0eVwiXVtcIiRQYXRoXCJdKTtcblx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRvTWFwcGluZ3NbaV1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IG9NYXBwaW5nc1tpXVtcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRpZiAob1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KSkge1xuXHRcdFx0Y29uc3Qgb1NlbGVjdE9wdGlvbiA9IG9TZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSk7XG5cblx0XHRcdC8vQ3JlYXRlIGEgbmV3IFNlbGVjdE9wdGlvbiB3aXRoIHNTZW1hbnRpY09iamVjdFByb3BlcnR5IGFzIHRoZSBwcm9wZXJ0eSBOYW1lIGFuZCByZW1vdmUgdGhlIG9sZGVyIG9uZVxuXHRcdFx0b1NlbGVjdGlvblZhcmlhbnQucmVtb3ZlU2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdG9TZWxlY3Rpb25WYXJpYW50Lm1hc3NBZGRTZWxlY3RPcHRpb24oc1NlbWFudGljT2JqZWN0UHJvcGVydHksIG9TZWxlY3RPcHRpb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoKG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkKSB7XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdGApO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KFxuXHRcdFx0YCR7c1BhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc2Bcblx0XHQpO1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdEZvckdldExpbmtzID0gW3sgc2VtYW50aWNPYmplY3Q6IHNTZW1hbnRpY09iamVjdCB9XTtcblx0XHRjb25zdCBvU2VtYW50aWNPYmplY3QgPSB7XG5cdFx0XHRzZW1hbnRpY09iamVjdDogc1NlbWFudGljT2JqZWN0XG5cdFx0fTtcblx0XHRyZXNvbHZlKHtcblx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc1BhdGgsXG5cdFx0XHRzZW1hbnRpY09iamVjdEZvckdldExpbmtzOiBhU2VtYW50aWNPYmplY3RGb3JHZXRMaW5rcyxcblx0XHRcdHNlbWFudGljT2JqZWN0OiBvU2VtYW50aWNPYmplY3QsXG5cdFx0XHR1bmF2YWlsYWJsZUFjdGlvbnM6IGFTZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1xuXHRcdH0pO1xuXHR9KS5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRMb2cuZXJyb3IoXCJFcnJvciBpbiBmbkdldFNlbWFudGljT2JqZWN0c0Zyb21QYXRoXCIsIG9FcnJvcik7XG5cdH0pO1xufVxuZnVuY3Rpb24gZm5VcGRhdGVTZW1hbnRpY1RhcmdldHNNb2RlbChhR2V0TGlua3NQcm9taXNlczogYW55LCBhU2VtYW50aWNPYmplY3RzOiBhbnksIG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBzQ3VycmVudEhhc2g6IGFueSkge1xuXHRyZXR1cm4gUHJvbWlzZS5hbGwoYUdldExpbmtzUHJvbWlzZXMpXG5cdFx0LnRoZW4oZnVuY3Rpb24gKGFWYWx1ZXM6IGFueVtdKSB7XG5cdFx0XHRsZXQgYUxpbmtzLFxuXHRcdFx0XHRfb0xpbmssXG5cdFx0XHRcdF9zTGlua0ludGVudEFjdGlvbixcblx0XHRcdFx0YUZpbmFsTGlua3M6IGFueVtdID0gW107XG5cdFx0XHRsZXQgb0ZpbmFsU2VtYW50aWNPYmplY3RzOiBhbnkgPSB7fTtcblx0XHRcdGNvbnN0IGJJbnRlbnRIYXNBY3Rpb25zID0gZnVuY3Rpb24gKHNJbnRlbnQ6IGFueSwgYUFjdGlvbnM6IGFueSkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGludGVudCBpbiBhQWN0aW9ucykge1xuXHRcdFx0XHRcdGlmIChpbnRlbnQgPT09IHNJbnRlbnQpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IGFWYWx1ZXMubGVuZ3RoOyBrKyspIHtcblx0XHRcdFx0YUxpbmtzID0gYVZhbHVlc1trXTtcblx0XHRcdFx0aWYgKGFMaW5rcyAmJiBhTGlua3MubGVuZ3RoID4gMCAmJiBhTGlua3NbMF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IG9TZW1hbnRpY09iamVjdDogYW55ID0ge307XG5cdFx0XHRcdFx0bGV0IG9UbXAgPSB7fTtcblx0XHRcdFx0XHRsZXQgc0FsdGVybmF0ZVBhdGg7XG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhTGlua3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdGFGaW5hbExpbmtzLnB1c2goW10pO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHNOb3RGaWx0ZXJlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0bGV0IGhhc1RhcmdldHMgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvciAobGV0IGlMaW5rQ291bnQgPSAwOyBpTGlua0NvdW50IDwgYUxpbmtzW2ldWzBdLmxlbmd0aDsgaUxpbmtDb3VudCsrKSB7XG5cdFx0XHRcdFx0XHRcdF9vTGluayA9IGFMaW5rc1tpXVswXVtpTGlua0NvdW50XTtcblx0XHRcdFx0XHRcdFx0X3NMaW5rSW50ZW50QWN0aW9uID0gX29MaW5rICYmIF9vTGluay5pbnRlbnQuc3BsaXQoXCI/XCIpWzBdLnNwbGl0KFwiLVwiKVsxXTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIShfb0xpbmsgJiYgX29MaW5rLmludGVudCAmJiBfb0xpbmsuaW50ZW50LmluZGV4T2Yoc0N1cnJlbnRIYXNoKSA9PT0gMCkpIHtcblx0XHRcdFx0XHRcdFx0XHRoYXNUYXJnZXRzTm90RmlsdGVyZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdGlmICghYkludGVudEhhc0FjdGlvbnMoX3NMaW5rSW50ZW50QWN0aW9uLCBhU2VtYW50aWNPYmplY3RzW2tdLnVuYXZhaWxhYmxlQWN0aW9ucykpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFGaW5hbExpbmtzW2ldLnB1c2goX29MaW5rKTtcblx0XHRcdFx0XHRcdFx0XHRcdGhhc1RhcmdldHMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b1RtcCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IGFTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdHBhdGg6IGFTZW1hbnRpY09iamVjdHNba10ucGF0aCxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0czogaGFzVGFyZ2V0cyxcblx0XHRcdFx0XHRcdFx0SGFzVGFyZ2V0c05vdEZpbHRlcmVkOiBoYXNUYXJnZXRzTm90RmlsdGVyZWRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRpZiAob1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzQWx0ZXJuYXRlUGF0aCA9IGFTZW1hbnRpY09iamVjdHNba10ucGF0aC5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xuXHRcdFx0XHRcdFx0aWYgKG9TZW1hbnRpY09iamVjdFthU2VtYW50aWNPYmplY3RzW2tdLnNlbWFudGljT2JqZWN0XVtzQWx0ZXJuYXRlUGF0aF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvU2VtYW50aWNPYmplY3RbYVNlbWFudGljT2JqZWN0c1trXS5zZW1hbnRpY09iamVjdF1bc0FsdGVybmF0ZVBhdGhdID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W2FTZW1hbnRpY09iamVjdHNba10uc2VtYW50aWNPYmplY3RdW3NBbHRlcm5hdGVQYXRoXSxcblx0XHRcdFx0XHRcdFx0b1RtcFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0TmFtZSA9IE9iamVjdC5rZXlzKG9TZW1hbnRpY09iamVjdClbMF07XG5cdFx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9GaW5hbFNlbWFudGljT2JqZWN0cykuaW5jbHVkZXMoc1NlbWFudGljT2JqZWN0TmFtZSkpIHtcblx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0c1tzU2VtYW50aWNPYmplY3ROYW1lXSA9IE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdG9GaW5hbFNlbWFudGljT2JqZWN0c1tzU2VtYW50aWNPYmplY3ROYW1lXSxcblx0XHRcdFx0XHRcdFx0b1NlbWFudGljT2JqZWN0W3NTZW1hbnRpY09iamVjdE5hbWVdXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvRmluYWxTZW1hbnRpY09iamVjdHMgPSBPYmplY3QuYXNzaWduKG9GaW5hbFNlbWFudGljT2JqZWN0cywgb1NlbWFudGljT2JqZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YUZpbmFsTGlua3MgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKE9iamVjdC5rZXlzKG9GaW5hbFNlbWFudGljT2JqZWN0cykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXG5cdFx0XHRcdFx0XCJzZW1hbnRpY3NUYXJnZXRzXCIsXG5cdFx0XHRcdFx0bWVyZ2VPYmplY3RzKG9GaW5hbFNlbWFudGljT2JqZWN0cywgb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwic2VtYW50aWNzVGFyZ2V0c1wiKSlcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG9GaW5hbFNlbWFudGljT2JqZWN0cztcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcImZuVXBkYXRlU2VtYW50aWNUYXJnZXRzTW9kZWw6IENhbm5vdCByZWFkIGxpbmtzXCIsIG9FcnJvcik7XG5cdFx0fSk7XG59XG5mdW5jdGlvbiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvQXBwQ29tcG9uZW50OiBhbnksIG9WaWV3OiBhbnksIG9NZXRhTW9kZWw6IGFueSwgc1BhdGg6IGFueSkge1xuXHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RzRnJvbVBhdGgob01ldGFNb2RlbCwgc1BhdGgpO1xufVxuZnVuY3Rpb24gZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKG9Db250cm9sbGVyOiBhbnksIHNQYWdlTW9kZWw6IHN0cmluZykge1xuXHRjb25zdCBfZm5maW5kVmFsdWVzSGVscGVyID0gZnVuY3Rpb24gKG9iajogYW55LCBrZXk6IGFueSwgbGlzdDogYW55KSB7XG5cdFx0aWYgKCFvYmopIHtcblx0XHRcdHJldHVybiBsaXN0O1xuXHRcdH1cblx0XHRpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGZvciAoY29uc3QgaSBpbiBvYmopIHtcblx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2ldLCBrZXksIFtdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGlzdDtcblx0XHR9XG5cdFx0aWYgKG9ialtrZXldKSB7XG5cdFx0XHRsaXN0LnB1c2gob2JqW2tleV0pO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgb2JqICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBjaGlsZHJlbiA9IE9iamVjdC5rZXlzKG9iaik7XG5cdFx0XHRpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0bGlzdCA9IGxpc3QuY29uY2F0KF9mbmZpbmRWYWx1ZXNIZWxwZXIob2JqW2NoaWxkcmVuW2ldXSwga2V5LCBbXSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBsaXN0O1xuXHR9O1xuXHRjb25zdCBfZm5maW5kVmFsdWVzID0gZnVuY3Rpb24gKG9iajogYW55LCBrZXk6IGFueSkge1xuXHRcdHJldHVybiBfZm5maW5kVmFsdWVzSGVscGVyKG9iaiwga2V5LCBbXSk7XG5cdH07XG5cdGNvbnN0IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyA9IGZ1bmN0aW9uIChhU2VtYW50aWNPYmplY3RQYXRoOiBhbnkpIHtcblx0XHRyZXR1cm4gYVNlbWFudGljT2JqZWN0UGF0aC5maWx0ZXIoZnVuY3Rpb24gKHZhbHVlOiBhbnksIGluZGV4OiBhbnkpIHtcblx0XHRcdHJldHVybiBhU2VtYW50aWNPYmplY3RQYXRoLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcblx0XHR9KTtcblx0fTtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cblx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNQcm9taXNlcyA9IFtdO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBvUGFnZU1vZGVsID0gb0NvbXBvbmVudC5nZXRNb2RlbChzUGFnZU1vZGVsKS5nZXREYXRhKCk7XG5cdFx0aWYgKEpTT04uc3RyaW5naWZ5KG9QYWdlTW9kZWwpID09PSBcInt9XCIpIHtcblx0XHRcdG9QYWdlTW9kZWwgPSBvQ29tcG9uZW50LmdldE1vZGVsKHNQYWdlTW9kZWwpLl9nZXRPYmplY3QoXCIvXCIsIHVuZGVmaW5lZCk7XG5cdFx0fVxuXHRcdGxldCBhU2VtYW50aWNPYmplY3RzRm91bmQgPSBfZm5maW5kVmFsdWVzKG9QYWdlTW9kZWwsIFwic2VtYW50aWNPYmplY3RQYXRoXCIpO1xuXHRcdGFTZW1hbnRpY09iamVjdHNGb3VuZCA9IF9mbkRlbGV0ZUR1cGxpY2F0ZVNlbWFudGljT2JqZWN0cyhhU2VtYW50aWNPYmplY3RzRm91bmQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VIZWxwZXIgPSBDb21tb25VdGlscy5nZXRTaGVsbFNlcnZpY2VzKG9BcHBDb21wb25lbnQpO1xuXHRcdGxldCBzQ3VycmVudEhhc2ggPSBDb21tb25VdGlscy5nZXRIYXNoKCk7XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0c0ZvckdldExpbmtzID0gW107XG5cdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0czogYW55W10gPSBbXTtcblx0XHRsZXQgc1BhdGg7XG5cdFx0bGV0IF9vU2VtYW50aWNPYmplY3Q7XG5cblx0XHRpZiAoc0N1cnJlbnRIYXNoICYmIHNDdXJyZW50SGFzaC5pbmRleE9mKFwiP1wiKSAhPT0gLTEpIHtcblx0XHRcdC8vIHNDdXJyZW50SGFzaCBjYW4gY29udGFpbiBxdWVyeSBzdHJpbmcsIGN1dCBpdCBvZmYhXG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3BsaXQoXCI/XCIpWzBdO1xuXHRcdH1cblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVNlbWFudGljT2JqZWN0c0ZvdW5kLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzUGF0aCA9IGFTZW1hbnRpY09iamVjdHNGb3VuZFtpXTtcblx0XHRcdGFTZW1hbnRpY09iamVjdHNQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0UHJvbWlzZShvQXBwQ29tcG9uZW50LCBvVmlldywgb01ldGFNb2RlbCwgc1BhdGgpKTtcblx0XHR9XG5cblx0XHRpZiAoYVNlbWFudGljT2JqZWN0c1Byb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRQcm9taXNlLmFsbChhU2VtYW50aWNPYmplY3RzUHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhVmFsdWVzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGNvbnN0IGFHZXRMaW5rc1Byb21pc2VzID0gW107XG5cdFx0XHRcdFx0bGV0IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZCA9IGFWYWx1ZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRzU2VtT2JqRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKGVsZW1lbnQuc2VtYW50aWNPYmplY3Quc2VtYW50aWNPYmplY3QuJFBhdGgpKTtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdCA9IHNTZW1PYmpFeHByZXNzaW9uO1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3NbMF0uc2VtYW50aWNPYmplY3QgPSBzU2VtT2JqRXhwcmVzc2lvbjtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1lbnQuc2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZC5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdCA9IGFTZW1hbnRpY09iamVjdHNSZXNvbHZlZFtqXTtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0X29TZW1hbnRpY09iamVjdCAmJlxuXHRcdFx0XHRcdFx0XHRfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0ICYmXG5cdFx0XHRcdFx0XHRcdCEoX29TZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5zZW1hbnRpY09iamVjdC5pbmRleE9mKFwie1wiKSA9PT0gMClcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RzRm9yR2V0TGlua3MucHVzaChfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3MpO1xuXHRcdFx0XHRcdFx0XHRhU2VtYW50aWNPYmplY3RzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdHVuYXZhaWxhYmxlQWN0aW9uczogX29TZW1hbnRpY09iamVjdC51bmF2YWlsYWJsZUFjdGlvbnMsXG5cdFx0XHRcdFx0XHRcdFx0cGF0aDogYVNlbWFudGljT2JqZWN0c1Jlc29sdmVkW2pdLnNlbWFudGljT2JqZWN0UGF0aFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0YUdldExpbmtzUHJvbWlzZXMucHVzaChvU2hlbGxTZXJ2aWNlSGVscGVyLmdldExpbmtzV2l0aENhY2hlKFtfb1NlbWFudGljT2JqZWN0LnNlbWFudGljT2JqZWN0Rm9yR2V0TGlua3NdKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBDb21tb25VdGlscy51cGRhdGVTZW1hbnRpY1RhcmdldHMoYUdldExpbmtzUHJvbWlzZXMsIGFTZW1hbnRpY09iamVjdHMsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgc0N1cnJlbnRIYXNoKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcImZuR2V0U2VtYW50aWNUYXJnZXRzRnJvbVRhYmxlOiBDYW5ub3QgZ2V0IFNlbWFudGljIE9iamVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uOiBhbnksIHNSZXN0cmljdGlvbjogYW55KSB7XG5cdGNvbnN0IEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucztcblx0aWYgKHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMgfHwgc1Jlc3RyaWN0aW9uID09PSBGaWx0ZXJSZXN0cmljdGlvbnMuTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUykge1xuXHRcdGxldCBhUHJvcHMgPSBbXTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXSkge1xuXHRcdFx0YVByb3BzID0gb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb25bc1Jlc3RyaWN0aW9uXS5tYXAoZnVuY3Rpb24gKG9Qcm9wZXJ0eTogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvUHJvcGVydHkuJFByb3BlcnR5UGF0aDtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BzO1xuXHR9IGVsc2UgaWYgKHNSZXN0cmljdGlvbiA9PT0gRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlMpIHtcblx0XHRjb25zdCBtQWxsb3dlZEV4cHJlc3Npb25zOiBhbnkgPSB7fTtcblx0XHRpZiAob0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24gJiYgb0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucykge1xuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0Fubm90YXRpb24uRmlsdGVyRXhwcmVzc2lvblJlc3RyaWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHQvL1NpbmdsZVZhbHVlIHwgTXVsdGlWYWx1ZSB8IFNpbmdsZVJhbmdlIHwgTXVsdGlSYW5nZSB8IFNlYXJjaEV4cHJlc3Npb24gfCBNdWx0aVJhbmdlT3JTZWFyY2hFeHByZXNzaW9uXG5cdFx0XHRcdGlmIChtQWxsb3dlZEV4cHJlc3Npb25zW29Qcm9wZXJ0eS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoXSkge1xuXHRcdFx0XHRcdG1BbGxvd2VkRXhwcmVzc2lvbnNbb1Byb3BlcnR5LlByb3BlcnR5LiRQcm9wZXJ0eVBhdGhdLnB1c2gob1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bUFsbG93ZWRFeHByZXNzaW9uc1tvUHJvcGVydHkuUHJvcGVydHkuJFByb3BlcnR5UGF0aF0gPSBbb1Byb3BlcnR5LkFsbG93ZWRFeHByZXNzaW9uc107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbUFsbG93ZWRFeHByZXNzaW9ucztcblx0fVxuXHQvLyBEZWZhdWx0IHJldHVybiB0aGUgRmlsdGVyUmVzdHJpY3Rpb25zIEFubm90YXRpb25cblx0cmV0dXJuIG9GaWx0ZXJSZXN0cmljdGlvbnNBbm5vdGF0aW9uO1xufVxuZnVuY3Rpb24gZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoKHNFbnRpdHlTZXRQYXRoOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRjb25zdCBvUmV0OiBhbnkgPSB7fSxcblx0XHRGaWx0ZXJSZXN0cmljdGlvbnMgPSBDb21tb25VdGlscy5GaWx0ZXJSZXN0cmljdGlvbnMsXG5cdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IHNFbnRpdHlTZXRQYXRoID8gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zYCkgOiB7fTtcblx0b1JldFtGaWx0ZXJSZXN0cmljdGlvbnMuUkVRVUlSRURfUFJPUEVSVElFU10gPSBnZXRGaWx0ZXJSZXN0cmljdGlvbnMob0ZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdO1xuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSA9XG5cdFx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zKG9GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXTtcblx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TXSA9IGdldEZpbHRlclJlc3RyaWN0aW9ucyhvRmlsdGVyUmVzdHJpY3Rpb25zLCBGaWx0ZXJSZXN0cmljdGlvbnMuQUxMT1dFRF9FWFBSRVNTSU9OUykgfHwge307XG5cblx0Y29uc3QgYVBhdGhQYXJ0cyA9IHNFbnRpdHlTZXRQYXRoLnNwbGl0KFwiL1wiKTtcblxuXHRpZiAoYVBhdGhQYXJ0cy5sZW5ndGggPiAyKSB7XG5cdFx0Ly8gSW4gbm9ybWFsIGZpbHRlcmJhciBzY2VuYXJpb3Mgc0VudGl0eVNldFBhdGggaXMgb2YgdGhlIGZvcm1hdCBcIi9DdXN0b21lclwiLlxuXHRcdC8vIEJ1dCwgSW4gY2FzZSBvZiBzRW50aXR5U2V0UGF0aCBvZiBmb3JtYXQgXCIvQ3VzdG9tZXIvU2V0XCIgdGhpcyBpcyB0byBjaGVjayBuYXZpZ2F0aW9uIHJlc3RyaWN0aW9ucyBvZiBcIkN1c3RvbWVyXCIgZm9yIG5vbi1maWx0ZXJhYmxlIHByb3BlcnRpZXMgaW4gXCJTZXRcIlxuXHRcdGNvbnN0IHNOYXZpZ2F0aW9uUGF0aCA9IGFQYXRoUGFydHNbYVBhdGhQYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7IC8vIHJlbW92aW5nIE5hdmlnYXRpb25Qcm9wZXJ0eSBmcm9tIHRoZSBlbmQuXG5cdFx0Y29uc3Qgc1BhcmVudEVudGl0eVNldFBhdGggPSBhUGF0aFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0TmF2aWdhdGlvblJlc3RyaWN0aW9ucyhvTWV0YU1vZGVsLCBzUGFyZW50RW50aXR5U2V0UGF0aCwgc05hdmlnYXRpb25QYXRoKTtcblx0XHRjb25zdCBvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucyA9IG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zICYmIG9OYXZpZ2F0aW9uUmVzdHJpY3Rpb25zW1wiRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVNdLmNvbmNhdChcblx0XHRcdGdldEZpbHRlclJlc3RyaWN0aW9ucyhvTmF2aWdhdGlvbkZpbHRlclJlc3RyaWN0aW9ucywgRmlsdGVyUmVzdHJpY3Rpb25zLlJFUVVJUkVEX1BST1BFUlRJRVMpIHx8IFtdXG5cdFx0KTtcblx0XHRvUmV0W0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXS5jb25jYXQoXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTKSB8fCBbXVxuXHRcdCk7XG5cdFx0Ly9TaW5nbGVWYWx1ZSB8IE11bHRpVmFsdWUgfCBTaW5nbGVSYW5nZSB8IE11bHRpUmFuZ2UgfCBTZWFyY2hFeHByZXNzaW9uIHwgTXVsdGlSYW5nZU9yU2VhcmNoRXhwcmVzc2lvblxuXHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdID0gbWVyZ2VPYmplY3RzKFxuXHRcdFx0e30sXG5cdFx0XHRnZXRGaWx0ZXJSZXN0cmljdGlvbnMob05hdmlnYXRpb25GaWx0ZXJSZXN0cmljdGlvbnMsIEZpbHRlclJlc3RyaWN0aW9ucy5BTExPV0VEX0VYUFJFU1NJT05TKSB8fCB7fSxcblx0XHRcdG9SZXRbRmlsdGVyUmVzdHJpY3Rpb25zLkFMTE9XRURfRVhQUkVTU0lPTlNdXG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiBvUmV0O1xufVxuZnVuY3Rpb24gdGVtcGxhdGVDb250cm9sRnJhZ21lbnQoc0ZyYWdtZW50TmFtZTogYW55LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3M6IGFueSwgb09wdGlvbnM6IGFueSwgb01vZGlmaWVyPzogYW55KSB7XG5cdG9PcHRpb25zID0gb09wdGlvbnMgfHwge307XG5cdGlmIChvTW9kaWZpZXIpIHtcblx0XHRyZXR1cm4gb01vZGlmaWVyLnRlbXBsYXRlQ29udHJvbEZyYWdtZW50KHNGcmFnbWVudE5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywgb09wdGlvbnMudmlldykudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdC8vIFRoaXMgaXMgcmVxdWlyZWQgYXMgRmxleCByZXR1cm5zIGFuIEhUTUxDb2xsZWN0aW9uIGFzIHRlbXBsYXRpbmcgcmVzdWx0IGluIFhNTCB0aW1lLlxuXHRcdFx0cmV0dXJuIG9Nb2RpZmllci50YXJnZXRzID09PSBcInhtbFRyZWVcIiAmJiBvRnJhZ21lbnQubGVuZ3RoID4gMCA/IG9GcmFnbWVudFswXSA6IG9GcmFnbWVudDtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbG9hZE1hY3JvTGlicmFyeSgpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyhcblx0XHRcdFx0XHRYTUxUZW1wbGF0ZVByb2Nlc3Nvci5sb2FkVGVtcGxhdGUoc0ZyYWdtZW50TmFtZSwgXCJmcmFnbWVudFwiKSxcblx0XHRcdFx0XHR7IG5hbWU6IHNGcmFnbWVudE5hbWUgfSxcblx0XHRcdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3Ncblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAob0ZyYWdtZW50OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSBvRnJhZ21lbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdGlmICghIW9PcHRpb25zLmlzWE1MICYmIG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBGcmFnbWVudC5sb2FkKHtcblx0XHRcdFx0XHRpZDogb09wdGlvbnMuaWQsXG5cdFx0XHRcdFx0ZGVmaW5pdGlvbjogb0ZyYWdtZW50LFxuXHRcdFx0XHRcdGNvbnRyb2xsZXI6IG9PcHRpb25zLmNvbnRyb2xsZXJcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0U2luZ2xldG9uUGF0aChwYXRoOiBzdHJpbmcsIG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRwcm9wZXJ0eU5hbWUgPSBwYXJ0cy5wb3AoKSxcblx0XHRuYXZpZ2F0aW9uUGF0aCA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdGVudGl0eVNldCA9IG5hdmlnYXRpb25QYXRoICYmIG1ldGFNb2RlbC5nZXRPYmplY3QoYC8ke25hdmlnYXRpb25QYXRofWApO1xuXHRpZiAoZW50aXR5U2V0Py4ka2luZCA9PT0gXCJTaW5nbGV0b25cIikge1xuXHRcdGNvbnN0IHNpbmdsZXRvbk5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcblx0XHRyZXR1cm4gYC8ke3NpbmdsZXRvbk5hbWV9LyR7cHJvcGVydHlOYW1lfWA7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eShwYXRoOiBzdHJpbmcsIG1vZGVsOiBPRGF0YU1vZGVsKSB7XG5cdGlmICghcGF0aCB8fCAhbW9kZWwpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuXHR9XG5cdGNvbnN0IG1ldGFNb2RlbCA9IG1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHQvLyBGaW5kIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzZXQgZnJvbSB0aGUgcHJvcGVydHkgcGF0aCBhbmQgY2hlY2sgd2hldGhlciBpdCBpcyBhIHNpbmdsZXRvbi5cblx0Y29uc3QgcmVzb2x2ZWRQYXRoID0gZ2V0U2luZ2xldG9uUGF0aChwYXRoLCBtZXRhTW9kZWwpO1xuXHRpZiAocmVzb2x2ZWRQYXRoKSB7XG5cdFx0Y29uc3QgcHJvcGVydHlCaW5kaW5nID0gbW9kZWwuYmluZFByb3BlcnR5KHJlc29sdmVkUGF0aCk7XG5cdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZy5yZXF1ZXN0VmFsdWUoKTtcblx0fVxuXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG59XG5mdW5jdGlvbiBhZGRFdmVudFRvQmluZGluZ0luZm8ob0NvbnRyb2w6IENvbnRyb2wsIHNFdmVudE5hbWU6IHN0cmluZywgZkhhbmRsZXI6IEZ1bmN0aW9uKSB7XG5cdGxldCBvQmluZGluZ0luZm86IGFueTtcblx0Y29uc3Qgc2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9CaW5kaW5nSW5mbykge1xuXHRcdFx0aWYgKCFvQmluZGluZ0luZm8uZXZlbnRzKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5ldmVudHMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSkge1xuXHRcdFx0XHRvQmluZGluZ0luZm8uZXZlbnRzW3NFdmVudE5hbWVdID0gZkhhbmRsZXI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmT3JpZ2luYWxIYW5kbGVyID0gb0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXTtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmV2ZW50c1tzRXZlbnROYW1lXSA9IGZ1bmN0aW9uICguLi5hcmdzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZIYW5kbGVyLmFwcGx5KHRoaXMsIC4uLmFyZ3MpO1xuXHRcdFx0XHRcdGZPcmlnaW5hbEhhbmRsZXIuYXBwbHkodGhpcywgLi4uYXJncyk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdChvQ29udHJvbCBhcyBhbnkpXG5cdFx0XHQuaW5uZXJDaGFydEJvdW5kKClcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvID0gKG9Db250cm9sIGFzIGFueSkuZ2V0Q29udHJvbERlbGVnYXRlKCkuX2dldENoYXJ0KG9Db250cm9sKS5nZXRCaW5kaW5nSW5mbyhcImRhdGFcIik7XG5cdFx0XHRcdHNldEJpbmRpbmdJbmZvKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChzRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3Ioc0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9CaW5kaW5nSW5mbyA9IG9Db250cm9sLmRhdGEoXCJyb3dzQmluZGluZ0luZm9cIik7XG5cdFx0c2V0QmluZGluZ0luZm8oKTtcblx0fVxufVxuZnVuY3Rpb24gbG9hZE1hY3JvTGlicmFyeSgpIHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL2ZlL21hY3Jvcy9tYWNyb0xpYnJhcnlcIl0sIGZ1bmN0aW9uICgvKm1hY3JvTGlicmFyeSovKSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBmbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQoc0dyb3VwSWQ6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nLCBvTW9kZWw6IE9EYXRhTW9kZWwsIGFNZXNzYWdlczogYW55W10pIHtcblx0Y29uc3QgbG9jYWxJMThuUmVmID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRzQWN0aW9uTmFtZSA9IGFjdGlvbk5hbWUsXG5cdFx0c0NhbmNlbEJ1dHRvblR4dCA9IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fRElBTE9HX0NBTkNFTFwiKTtcblx0aWYgKGFNZXNzYWdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRjb25zdCBzTWVzc2FnZSA9IGAke2FNZXNzYWdlc1swXS5tZXNzYWdlfVxcbiR7bG9jYWxJMThuUmVmLmdldFRleHQoXCJQUk9DRUVEXCIpfWA7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRNZXNzYWdlQm94Lndhcm5pbmcoc01lc3NhZ2UsIHtcblx0XHRcdFx0dGl0bGU6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiV0FSTklOR1wiKSxcblx0XHRcdFx0YWN0aW9uczogW3NBY3Rpb25OYW1lLCBzQ2FuY2VsQnV0dG9uVHh0XSxcblx0XHRcdFx0ZW1waGFzaXplZEFjdGlvbjogc0FjdGlvbk5hbWUsXG5cdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uIChzQWN0aW9uOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRpZiAoc0FjdGlvbiA9PT0gc0FjdGlvbk5hbWUpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IHRydWU7XG5cdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBtZXNzYWdlSGFuZGxpbmcucHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdGNvbnRlbnQ6IG9NZXNzYWdlT2JqZWN0Lm9NZXNzYWdlVmlldyxcblx0XHRcdHN0YXRlOiBcIldhcm5pbmdcIixcblx0XHRcdGN1c3RvbUhlYWRlcjogbmV3IEJhcih7XG5cdFx0XHRcdGNvbnRlbnRMZWZ0OiBbb01lc3NhZ2VPYmplY3Qub0JhY2tCdXR0b25dLFxuXHRcdFx0XHRjb250ZW50TWlkZGxlOiBbbmV3IFRpdGxlKHsgdGV4dDogXCJXYXJuaW5nXCIgfSldXG5cdFx0XHR9KSxcblx0XHRcdGNvbnRlbnRIZWlnaHQ6IFwiNTAlXCIsXG5cdFx0XHRjb250ZW50V2lkdGg6IFwiNTAlXCIsXG5cdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2Vcblx0XHR9KTtcblx0XHRvRGlhbG9nLnNldEJlZ2luQnV0dG9uKFxuXHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHRvTW9kZWwuc3VibWl0QmF0Y2goc0dyb3VwSWQpO1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0KFwiSUdOT1JFXCIsIGxvY2FsSTE4blJlZiwgc0FjdGlvbk5hbWUpXG5cdFx0XHR9KVxuXHRcdCk7XG5cdFx0b0RpYWxvZy5zZXRFbmRCdXR0b24oXG5cdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHRvRGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRleHQ6IHNDYW5jZWxCdXR0b25UeHRcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1lc3NhZ2VDb2x1bW4ob0NvbnRyb2w6IGFueSk6IHN0cmluZyB7XG5cdGlmICghb0NvbnRyb2wgfHwgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmNvcmUubXZjLlhNTFZpZXdcIikpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRjb25zdCBoZWFkZXJJbmZvVGl0bGVQYXRoID0gb0NvbnRyb2wuZ2V0UGFyZW50KCkuZ2V0VGFibGVEZWZpbml0aW9uKCkuaGVhZGVySW5mb1RpdGxlO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRyb2wgJiYgb0NvbnRyb2wuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRzQ3VycmVudEVudGl0eVNldE5hbWUgPSBvQ29udHJvbC5kYXRhKFwibWV0YVBhdGhcIik7XG5cdGNvbnN0IGFUZWNobmljYWxLZXlzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0N1cnJlbnRFbnRpdHlTZXROYW1lfS8kVHlwZS8kS2V5YCk7XG5cdGNvbnN0IGFGaWx0ZXJlZFRlY2huaWNhbEtleXM6IHN0cmluZ1tdID0gW107XG5cblx0YVRlY2huaWNhbEtleXMuZm9yRWFjaChmdW5jdGlvbiAodGVjaG5pY2FsS2V5OiBzdHJpbmcpIHtcblx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdGFGaWx0ZXJlZFRlY2huaWNhbEtleXMucHVzaCh0ZWNobmljYWxLZXkpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNlbWFudGljS2V5Q29sdW1ucyA9IG9Db250cm9sLmdldFBhcmVudCgpLmdldFRhYmxlRGVmaW5pdGlvbigpLnNlbWFudGljS2V5cztcblxuXHRjb25zdCBhVmlzaWJsZUNvbHVtbnM6IGFueSA9IFtdO1xuXHRjb25zdCBhVGFibGVDb2x1bW5zID0gb0NvbnRyb2wuZ2V0Q29sdW1ucygpO1xuXHRhVGFibGVDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKG9Db2x1bW46IGFueSkge1xuXHRcdGNvbnN0IGNvbHVtblBhdGhTcGxpdCA9IG9Db2x1bW4uZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRcdGFWaXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtblBhdGhTcGxpdFtjb2x1bW5QYXRoU3BsaXQubGVuZ3RoIC0gMV0pO1xuXHR9KTtcblx0bGV0IHN1YnRpdGxlQ29sdW1uOiBzdHJpbmcgPSBcIlwiOyAvL3NldCB0aGUgY29ycmVzc3BvbmRpbmcgc3VidGl0bGUgY29sdW1uXG5cdGlmIChoZWFkZXJJbmZvVGl0bGVQYXRoICE9PSB1bmRlZmluZWQgJiYgYVZpc2libGVDb2x1bW5zLmluZGV4T2YoaGVhZGVySW5mb1RpdGxlUGF0aCkgIT09IC0xKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBoZWFkZXJJbmZvVGl0bGVQYXRoO1xuXHR9IGVsc2UgaWYgKFxuXHRcdHNlbWFudGljS2V5Q29sdW1ucyAhPT0gdW5kZWZpbmVkICYmXG5cdFx0c2VtYW50aWNLZXlDb2x1bW5zLmxlbmd0aCA9PT0gMSAmJlxuXHRcdGFWaXNpYmxlQ29sdW1ucy5pbmRleE9mKHNlbWFudGljS2V5Q29sdW1uc1swXSkgIT09IC0xXG5cdCkge1xuXHRcdHN1YnRpdGxlQ29sdW1uID0gc2VtYW50aWNLZXlDb2x1bW5zWzBdO1xuXHR9XG5cdC8vIHNldCBjb3JyZWN0IGNvbnRleHQgdG8gY29ycmVjdCBtZXNzYWdlIGluIG1lc3NhZ2UgbW9kZWxcblx0ZWxzZSBpZiAoYUZpbHRlcmVkVGVjaG5pY2FsS2V5cyAhPT0gdW5kZWZpbmVkICYmIGFGaWx0ZXJlZFRlY2huaWNhbEtleXMubGVuZ3RoID09PSAxKSB7XG5cdFx0c3VidGl0bGVDb2x1bW4gPSBhRmlsdGVyZWRUZWNobmljYWxLZXlzWzBdO1xuXHR9XG5cdHJldHVybiBzdWJ0aXRsZUNvbHVtbjtcbn1cblxuZnVuY3Rpb24gZ2V0S2V5cyhvTWV0YU1vZGVsOiBhbnksIHNQYXRoOiBzdHJpbmcsIHNFbnRpdHlTZXROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzTWV0YVBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0Y29uc3QgYVRlY2huaWNhbEtleXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzTWV0YVBhdGh9LyRUeXBlLyRLZXlgKTtcblx0bGV0IHNLZXk6IHN0cmluZyA9IFwiXCI7XG5cdGNvbnN0IHNlbWFudGljS2V5ID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG9NZXRhTW9kZWwsIHNFbnRpdHlTZXROYW1lKTtcblx0aWYgKHNlbWFudGljS2V5ICE9PSB1bmRlZmluZWQgJiYgc2VtYW50aWNLZXkubGVuZ3RoID09PSAxKSB7XG5cdFx0c0tleSA9IHNlbWFudGljS2V5WzBdLiRQcm9wZXJ0eVBhdGg7XG5cdH0gZWxzZSBpZiAoYVRlY2huaWNhbEtleXMpIHtcblx0XHRjb25zdCBhRmlsdGVyZWRUZWNobmljYWxLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGFUZWNobmljYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKHRlY2huaWNhbEtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAodGVjaG5pY2FsS2V5ICE9PSBcIklzQWN0aXZlRW50aXR5XCIpIHtcblx0XHRcdFx0YUZpbHRlcmVkVGVjaG5pY2FsS2V5cy5wdXNoKHRlY2huaWNhbEtleSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGFGaWx0ZXJlZFRlY2huaWNhbEtleXMgIT09IHVuZGVmaW5lZCAmJiBhRmlsdGVyZWRUZWNobmljYWxLZXlzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0c0tleSA9IGFGaWx0ZXJlZFRlY2huaWNhbEtleXNbMF07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzS2V5O1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlU3RyaXBUZXh0KFxuXHR2aWV3OiBhbnksXG5cdGFJZ25vcmVkTGFiZWxzOiBhbnksXG5cdG9GaWx0ZXJCYXI6IGFueSxcblx0YklzQ2hhcnQ6IGFueSxcblx0YklzU2VhcmNoSWdub3JlZDogYW55LFxuXHRzVGFiVGl0bGU6IGFueSxcblx0b1Jlc291cmNlQnVuZGxlOiBhbnksXG5cdGZuR2V0TG9jYWxpemVkVGV4dDogYW55XG4pOiBzdHJpbmcge1xuXHRsZXQgc1RleHQgPSBcIlwiO1xuXHRpZiAoYklzQ2hhcnQpIHtcblx0XHRjb25zdCBvQ2hhcnQgPSB2aWV3LmdldENvbnRyb2xsZXIoKS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRjb25zdCBiSXNEcmFmdFN1cHBvcnRlZCA9IG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiO1xuXHRcdGNvbnN0IG9NYWNyb1Jlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUubWFjcm9zXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXHRcdGJJc1NlYXJjaElnbm9yZWQgPSBiSXNTZWFyY2hJZ25vcmVkICYmIGFJZ25vcmVkTGFiZWxzLmluY2x1ZGVzKG9NYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0ZJTFRFUkJBUl9TRUFSQ0hcIikpO1xuXHRcdGlmIChhSWdub3JlZExhYmVscy5sZW5ndGggPT09IDIgJiYgYklzU2VhcmNoSWdub3JlZCAmJiBiSXNEcmFmdFN1cHBvcnRlZCkge1xuXHRcdFx0c1RleHQgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTFJfTVVMVElWSVpfQ0hBUlRfSUdOT1JFRF9GSUxURVJfRFJBRlRfREFUQV9BTkRfU0VBUkNIXCIpO1xuXHRcdH0gZWxzZSBpZiAoYUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxICYmIGJJc0RyYWZ0U3VwcG9ydGVkKSB7XG5cdFx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NVUxUSVZJWl9DSEFSVF9JR05PUkVEX0ZJTFRFUl9EUkFGVF9EQVRBXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBzUmVzb3VyY2UgPSBgQ19MUl9NVUxUSVZJWl9DSEFSVF8ke2FJZ25vcmVkTGFiZWxzLmxlbmd0aCA9PT0gMSA/IFwiU0lOR0xFXCIgOiBcIk1VTFRJXCJ9X0lHTk9SRURfRklMVEVSXyR7XG5cdFx0XHRcdHN5c3RlbS5kZXNrdG9wID8gXCJMQVJHRVwiIDogXCJTTUFMTFwiXG5cdFx0XHR9YDtcblx0XHRcdHNUZXh0ID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoc1Jlc291cmNlLCBbYUlnbm9yZWRMYWJlbHMuam9pbihcIiwgXCIpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHNSZXNvdXJjZSA9IGBDX0xSX01VTFRJVEFCTEVTXyR7YUlnbm9yZWRMYWJlbHMubGVuZ3RoID09PSAxID8gXCJTSU5HTEVcIiA6IFwiTVVMVElcIn1fSUdOT1JFRF9GSUxURVJfJHtcblx0XHRcdFx0c3lzdGVtLmRlc2t0b3AgPyBcIkxBUkdFXCIgOiBcIlNNQUxMXCJcblx0XHRcdH1gLFxuXHRcdFx0c0xvY2FsaXplZFRhYmxlVGl0bGUgPSBmbkdldExvY2FsaXplZFRleHQoc1RhYlRpdGxlLCBvRmlsdGVyQmFyKTtcblx0XHRzVGV4dCA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KHNSZXNvdXJjZSwgW2FJZ25vcmVkTGFiZWxzLmpvaW4oXCIsIFwiKSwgc0xvY2FsaXplZFRhYmxlVGl0bGVdKTtcblx0fVxuXHRyZXR1cm4gc1RleHQ7XG59XG5cbmNvbnN0IENvbW1vblV0aWxzID0ge1xuXHRpc1Byb3BlcnR5RmlsdGVyYWJsZTogaXNQcm9wZXJ0eUZpbHRlcmFibGUsXG5cdGlzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZTogaXNGaWVsZENvbnRyb2xQYXRoSW5hcHBsaWNhYmxlLFxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhOiByZW1vdmVTZW5zaXRpdmVEYXRhLFxuXHRmaXJlQnV0dG9uUHJlc3M6IGZuRmlyZUJ1dHRvblByZXNzLFxuXHRnZXRUYXJnZXRWaWV3OiBnZXRUYXJnZXRWaWV3LFxuXHRoYXNUcmFuc2llbnRDb250ZXh0OiBmbkhhc1RyYW5zaWVudENvbnRleHRzLFxuXHR1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHM6IGZuVXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzLFxuXHRyZXNvbHZlU3RyaW5ndG9Cb29sZWFuOiBmblJlc29sdmVTdHJpbmd0b0Jvb2xlYW4sXG5cdGdldEFwcENvbXBvbmVudDogZ2V0QXBwQ29tcG9uZW50LFxuXHRnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHM6IGZuR2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzLFxuXHRnZXRDb250ZXh0UGF0aFByb3BlcnRpZXM6IGZuR2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzLFxuXHRnZXRQYXJhbWV0ZXJJbmZvOiBnZXRQYXJhbWV0ZXJJbmZvLFxuXHR1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eTogZm5VcGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSxcblx0Z2V0VHJhbnNsYXRlZFRleHQ6IGdldFRyYW5zbGF0ZWRUZXh0LFxuXHRnZXRFbnRpdHlTZXROYW1lOiBnZXRFbnRpdHlTZXROYW1lLFxuXHRnZXRBY3Rpb25QYXRoOiBnZXRBY3Rpb25QYXRoLFxuXHRjb21wdXRlRGlzcGxheU1vZGU6IGNvbXB1dGVEaXNwbGF5TW9kZSxcblx0c2V0QWN0aW9uRW5hYmxlbWVudDogc2V0QWN0aW9uRW5hYmxlbWVudCxcblx0aXNTdGlja3lFZGl0TW9kZTogaXNTdGlja3lFZGl0TW9kZSxcblx0Z2V0T3BlcmF0b3JzRm9yUHJvcGVydHk6IGdldE9wZXJhdG9yc0ZvclByb3BlcnR5LFxuXHRhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zOiBhZGRTZWxlY3Rpb25WYXJpYW50VG9Db25kaXRpb25zLFxuXHRhZGRFeHRlcm5hbFN0YXRlRmlsdGVyc1RvU2VsZWN0aW9uVmFyaWFudDogYWRkRXh0ZXJuYWxTdGF0ZUZpbHRlcnNUb1NlbGVjdGlvblZhcmlhbnQsXG5cdGFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50OiBhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCxcblx0YWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeTogYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSxcblx0Z2V0Tm9uQ29tcHV0ZWRWaXNpYmxlRmllbGRzOiBnZXROb25Db21wdXRlZFZpc2libGVGaWVsZHMsXG5cdHNldFVzZXJEZWZhdWx0czogc2V0VXNlckRlZmF1bHRzLFxuXHRnZXRTaGVsbFNlcnZpY2VzOiBnZXRTaGVsbFNlcnZpY2VzLFxuXHRnZXRIYXNoOiBnZXRIYXNoLFxuXHRnZXRJQk5BY3Rpb25zOiBmbkdldElCTkFjdGlvbnMsXG5cdGdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbjogZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uLFxuXHRnZXRTZW1hbnRpY09iamVjdE1hcHBpbmc6IGdldFNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0c2V0U2VtYW50aWNPYmplY3RNYXBwaW5nczogc2V0U2VtYW50aWNPYmplY3RNYXBwaW5ncyxcblx0Z2V0U2VtYW50aWNPYmplY3RQcm9taXNlOiBmbkdldFNlbWFudGljT2JqZWN0UHJvbWlzZSxcblx0Z2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbDogZm5HZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsLFxuXHRnZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aDogZm5HZXRTZW1hbnRpY09iamVjdHNGcm9tUGF0aCxcblx0dXBkYXRlU2VtYW50aWNUYXJnZXRzOiBmblVwZGF0ZVNlbWFudGljVGFyZ2V0c01vZGVsLFxuXHRnZXRQcm9wZXJ0eURhdGFUeXBlOiBnZXRQcm9wZXJ0eURhdGFUeXBlLFxuXHRnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zOiBnZXROYXZpZ2F0aW9uUmVzdHJpY3Rpb25zLFxuXHRnZXRTZWFyY2hSZXN0cmljdGlvbnM6IGdldFNlYXJjaFJlc3RyaWN0aW9ucyxcblx0Z2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoOiBnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgsXG5cdGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb246IGdldFNwZWNpZmljQWxsb3dlZEV4cHJlc3Npb24sXG5cdGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGU6IGdldEFkZGl0aW9uYWxQYXJhbXNGb3JDcmVhdGUsXG5cdHJlcXVlc3RTaW5nbGV0b25Qcm9wZXJ0eTogcmVxdWVzdFNpbmdsZXRvblByb3BlcnR5LFxuXHR0ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudDogdGVtcGxhdGVDb250cm9sRnJhZ21lbnQsXG5cdGFkZEV2ZW50VG9CaW5kaW5nSW5mbzogYWRkRXZlbnRUb0JpbmRpbmdJbmZvLFxuXHRzZXRPYmplY3RNYXBwaW5nczogc2V0T2JqZWN0TWFwcGluZ3MsXG5cdEZpbHRlclJlc3RyaWN0aW9uczoge1xuXHRcdFJFUVVJUkVEX1BST1BFUlRJRVM6IFwiUmVxdWlyZWRQcm9wZXJ0aWVzXCIsXG5cdFx0Tk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUzogXCJOb25GaWx0ZXJhYmxlUHJvcGVydGllc1wiLFxuXHRcdEFMTE9XRURfRVhQUkVTU0lPTlM6IFwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zXCJcblx0fSxcblx0QWxsb3dlZEV4cHJlc3Npb25zUHJpbzogW1wiU2luZ2xlVmFsdWVcIiwgXCJNdWx0aVZhbHVlXCIsIFwiU2luZ2xlUmFuZ2VcIiwgXCJNdWx0aVJhbmdlXCIsIFwiU2VhcmNoRXhwcmVzc2lvblwiLCBcIk11bHRpUmFuZ2VPclNlYXJjaEV4cHJlc3Npb25cIl0sXG5cdG5vcm1hbGl6ZVNlYXJjaFRlcm06IG5vcm1hbGl6ZVNlYXJjaFRlcm0sXG5cdGZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZDogZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLFxuXHRnZXRTaW5nbGV0b25QYXRoOiBnZXRTaW5nbGV0b25QYXRoLFxuXHRnZXRNZXNzYWdlU3RyaXBUZXh0OiBnZXRNZXNzYWdlU3RyaXBUZXh0LFxuXHRnZXRNZXNzYWdlQ29sdW1uOiBnZXRNZXNzYWdlQ29sdW1uLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zOiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zLFxuXHRnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zOiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zLFxuXHRoYXNSZXN0cmljdGVkUHJvcGVydGllc0luQW5ub3RhdGlvbnM6IGhhc1Jlc3RyaWN0ZWRQcm9wZXJ0aWVzSW5Bbm5vdGF0aW9ucyxcblx0Z2V0UmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUFubm90YXRpb25zOiBnZXRSZXF1aXJlZFByb3BlcnRpZXNGcm9tQW5ub3RhdGlvbnMsXG5cdGdldFJlcXVpcmVkUHJvcGVydGllczogZ2V0UmVxdWlyZWRQcm9wZXJ0aWVzLFxuXHRnZXRLZXlzOiBnZXRLZXlzXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21tb25VdGlscztcbiJdfQ==
|