@sapui5/sap.fe.core 1.102.2 → 1.104.1
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 +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +73 -30
- package/src/sap/fe/core/AppComponent.ts +65 -43
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- 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 +227 -126
- package/src/sap/fe/core/CommonUtils.ts +240 -163
- 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/BuildingBlock.js +181 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
- 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 +101 -74
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
- 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 +9 -9
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -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 +170 -139
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- 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 +200 -131
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- 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 +11 -10
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- 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 +190 -141
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
- 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 +71 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
- 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 +7 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +15 -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 +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- 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 +52 -61
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
- 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 +64 -35
- package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
- 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 +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- 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 +26 -33
- 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 +30 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
- package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
- package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
- package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
- 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 +65 -59
- 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 +77 -73
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- 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 +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -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 -5
- 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 +55 -42
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
- 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 +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -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 +1832 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -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 +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- 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/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- 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 +39 -63
- package/src/sap/fe/core/messagebundle_ar.properties +25 -39
- package/src/sap/fe/core/messagebundle_bg.properties +25 -39
- package/src/sap/fe/core/messagebundle_ca.properties +25 -39
- package/src/sap/fe/core/messagebundle_cs.properties +25 -39
- package/src/sap/fe/core/messagebundle_cy.properties +25 -39
- package/src/sap/fe/core/messagebundle_da.properties +25 -39
- package/src/sap/fe/core/messagebundle_de.properties +25 -39
- package/src/sap/fe/core/messagebundle_el.properties +26 -40
- package/src/sap/fe/core/messagebundle_en.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
- package/src/sap/fe/core/messagebundle_es.properties +27 -41
- package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
- package/src/sap/fe/core/messagebundle_et.properties +25 -39
- package/src/sap/fe/core/messagebundle_fi.properties +25 -39
- package/src/sap/fe/core/messagebundle_fr.properties +26 -40
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
- package/src/sap/fe/core/messagebundle_hi.properties +25 -39
- package/src/sap/fe/core/messagebundle_hr.properties +25 -39
- package/src/sap/fe/core/messagebundle_hu.properties +25 -39
- package/src/sap/fe/core/messagebundle_id.properties +25 -39
- package/src/sap/fe/core/messagebundle_it.properties +41 -55
- package/src/sap/fe/core/messagebundle_iw.properties +25 -39
- package/src/sap/fe/core/messagebundle_ja.properties +25 -39
- package/src/sap/fe/core/messagebundle_kk.properties +25 -39
- package/src/sap/fe/core/messagebundle_ko.properties +30 -44
- package/src/sap/fe/core/messagebundle_lt.properties +25 -39
- package/src/sap/fe/core/messagebundle_lv.properties +25 -39
- package/src/sap/fe/core/messagebundle_ms.properties +25 -39
- package/src/sap/fe/core/messagebundle_nl.properties +27 -41
- package/src/sap/fe/core/messagebundle_no.properties +25 -39
- package/src/sap/fe/core/messagebundle_pl.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt.properties +26 -40
- package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
- package/src/sap/fe/core/messagebundle_ro.properties +25 -39
- package/src/sap/fe/core/messagebundle_ru.properties +25 -39
- package/src/sap/fe/core/messagebundle_sh.properties +25 -39
- package/src/sap/fe/core/messagebundle_sk.properties +25 -39
- package/src/sap/fe/core/messagebundle_sl.properties +25 -39
- package/src/sap/fe/core/messagebundle_sv.properties +25 -39
- package/src/sap/fe/core/messagebundle_th.properties +25 -39
- package/src/sap/fe/core/messagebundle_tr.properties +25 -39
- package/src/sap/fe/core/messagebundle_uk.properties +25 -39
- package/src/sap/fe/core/messagebundle_vi.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
- package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
- 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 +97 -69
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
- 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 +61 -49
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- 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 +92 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -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 +224 -198
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
- 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 +16 -15
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- 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 +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- 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
|
@@ -11,7 +11,6 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
11
11
|
var aResolveFunctions = [];
|
|
12
12
|
var oDialog;
|
|
13
13
|
var oBackButton;
|
|
14
|
-
var oMessageTemplate;
|
|
15
14
|
var oMessageView;
|
|
16
15
|
|
|
17
16
|
function fnFormatTechnicalDetails() {
|
|
@@ -39,68 +38,67 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
39
38
|
|
|
40
39
|
return [{
|
|
41
40
|
"groupName": "",
|
|
42
|
-
"property": sTD
|
|
41
|
+
"property": "".concat(sTD, "/status")
|
|
43
42
|
}, {
|
|
44
43
|
"groupName": "",
|
|
45
|
-
"property": sTD
|
|
44
|
+
"property": "".concat(sTD, "/statusText")
|
|
46
45
|
}, {
|
|
47
46
|
"groupName": "Application",
|
|
48
|
-
"property": sTD
|
|
47
|
+
"property": "".concat(sTD, "/error/@SAP__common.Application/ComponentId")
|
|
49
48
|
}, {
|
|
50
49
|
"groupName": "Application",
|
|
51
|
-
"property": sTD
|
|
50
|
+
"property": "".concat(sTD, "/error/@SAP__common.Application/ServiceId")
|
|
52
51
|
}, {
|
|
53
52
|
"groupName": "Application",
|
|
54
|
-
"property": sTD
|
|
53
|
+
"property": "".concat(sTD, "/error/@SAP__common.Application/ServiceRepository")
|
|
55
54
|
}, {
|
|
56
55
|
"groupName": "Application",
|
|
57
|
-
"property": sTD
|
|
56
|
+
"property": "".concat(sTD, "/error/@SAP__common.Application/ServiceVersion")
|
|
58
57
|
}, {
|
|
59
58
|
"groupName": "ErrorResolution",
|
|
60
|
-
"property": sTD
|
|
59
|
+
"property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/Analysis")
|
|
61
60
|
}, {
|
|
62
61
|
"groupName": "ErrorResolution",
|
|
63
|
-
"property": sTD
|
|
62
|
+
"property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/Note")
|
|
64
63
|
}, {
|
|
65
64
|
"groupName": "ErrorResolution",
|
|
66
|
-
"property": sTD
|
|
65
|
+
"property": "".concat(sTD, "/error/@SAP__common.ErrorResolution/DetailedNote")
|
|
67
66
|
}, {
|
|
68
67
|
"groupName": "ErrorResolution",
|
|
69
|
-
"property": sTD
|
|
68
|
+
"property": "".concat(sTD, "/error/@SAP__common.ExceptionCategory")
|
|
70
69
|
}, {
|
|
71
70
|
"groupName": "ErrorResolution",
|
|
72
|
-
"property": sTD
|
|
71
|
+
"property": "".concat(sTD, "/error/@SAP__common.TimeStamp")
|
|
73
72
|
}, {
|
|
74
73
|
"groupName": "ErrorResolution",
|
|
75
|
-
"property": sTD
|
|
74
|
+
"property": "".concat(sTD, "/error/@SAP__common.TransactionId")
|
|
76
75
|
}, {
|
|
77
76
|
"groupName": "Messages",
|
|
78
|
-
"property": sTD
|
|
77
|
+
"property": "".concat(sTD, "/error/code")
|
|
79
78
|
}, {
|
|
80
79
|
"groupName": "Messages",
|
|
81
|
-
"property": sTD
|
|
80
|
+
"property": "".concat(sTD, "/error/message")
|
|
82
81
|
}];
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
var sHTML = "Object.keys(" + "${technicalDetails}" + ').length > 0 ? "<h2>Technical Details</h2>" : "" ';
|
|
86
85
|
getPaths().forEach(function (oProperty) {
|
|
87
|
-
sHTML = sHTML + insertGroupName(oProperty)
|
|
86
|
+
sHTML = "".concat(sHTML + insertGroupName(oProperty)).concat(insertDetail(oProperty), " + ");
|
|
88
87
|
});
|
|
89
88
|
return sHTML;
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
function fnFormatDescription() {
|
|
93
|
-
|
|
94
|
-
return sHTML;
|
|
92
|
+
return "(${" + 'description} ? ("<h2>Description</h2>" + ${' + 'description}) : "")';
|
|
95
93
|
}
|
|
96
94
|
/**
|
|
97
95
|
* Calculates the highest priority message type(Error/Warning/Success/Information) from the available messages.
|
|
98
|
-
|
|
96
|
+
*
|
|
99
97
|
* @function
|
|
100
98
|
* @name sap.fe.core.actions.messageHandling.fnGetHighestMessagePriority
|
|
101
99
|
* @memberof sap.fe.core.actions.messageHandling
|
|
102
|
-
* @param
|
|
103
|
-
* @returns
|
|
100
|
+
* @param [aMessages] Messages list
|
|
101
|
+
* @returns Highest priority message from the available messages
|
|
104
102
|
* @private
|
|
105
103
|
* @ui5-restricted
|
|
106
104
|
*/
|
|
@@ -193,7 +191,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
193
191
|
//same year
|
|
194
192
|
if (bMessageDialog) {
|
|
195
193
|
//less than 2 min
|
|
196
|
-
sRetryAfterMessage = oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE")
|
|
194
|
+
sRetryAfterMessage = "".concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_TITLE"), " ").concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_DESC"));
|
|
197
195
|
} else if (dNow.getMonth() !== dRetryAfter.getMonth() || dNow.getDate() !== dRetryAfter.getDate()) {
|
|
198
196
|
oDateFormat = DateFormat.getDateTimeInstance({
|
|
199
197
|
pattern: "MMMM dd 'at' hh:mm a"
|
|
@@ -218,8 +216,10 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
218
216
|
}
|
|
219
217
|
|
|
220
218
|
function prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow) {
|
|
219
|
+
var oMessageTemplate;
|
|
220
|
+
|
|
221
221
|
if (!bStrictHandlingFlow) {
|
|
222
|
-
oMessageTemplate =
|
|
222
|
+
oMessageTemplate = new MessageItem(undefined, {
|
|
223
223
|
counter: {
|
|
224
224
|
path: "counter"
|
|
225
225
|
},
|
|
@@ -240,7 +240,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
240
240
|
});
|
|
241
241
|
}
|
|
242
242
|
|
|
243
|
-
oMessageView =
|
|
243
|
+
oMessageView = new MessageView({
|
|
244
244
|
showDetailsPageHeader: false,
|
|
245
245
|
itemSelect: function () {
|
|
246
246
|
oBackButton.setVisible(true);
|
|
@@ -266,7 +266,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
266
266
|
};
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition,
|
|
269
|
+
function showUnboundMessages(aCustomMessages, oContext, bHasEtagMessage, bShowBoundTransition, showErrorInAPD, bShowMessageBox, concurrentEditFlag) {
|
|
270
270
|
var aUnboundMessages = this.getMessages();
|
|
271
271
|
var oMessageManager = Core.getMessageManager();
|
|
272
272
|
var sHighestPriority;
|
|
@@ -348,7 +348,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
348
348
|
|
|
349
349
|
if (aUnboundMessages.length === 1 && (aUnboundMessages[0].getCode() === "503" || bShowMessageBox)) {
|
|
350
350
|
if (aUnboundMessages[0].getCode() !== "503") {
|
|
351
|
-
showMessageBox = !
|
|
351
|
+
showMessageBox = !showErrorInAPD;
|
|
352
352
|
} else {
|
|
353
353
|
showMessageBox = true;
|
|
354
354
|
}
|
|
@@ -357,16 +357,22 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
357
357
|
aCurrentContexts = oListBinding.getCurrentContexts();
|
|
358
358
|
|
|
359
359
|
if (aCurrentContexts && aCurrentContexts.length > 0) {
|
|
360
|
+
var _oContext$getObject;
|
|
361
|
+
|
|
360
362
|
// Don't show dialog incase there are no errors to show
|
|
361
|
-
|
|
363
|
+
if (oContext && oContext !== null && oContext !== void 0 && (_oContext$getObject = oContext.getObject()) !== null && _oContext$getObject !== void 0 && _oContext$getObject.IsActiveEntity && !showErrorInAPD) {
|
|
364
|
+
showMessageDialog = true;
|
|
365
|
+
} else {
|
|
366
|
+
showMessageDialog = !showErrorInAPD;
|
|
367
|
+
} // if false, show messages in dialog
|
|
362
368
|
// As fitering has already happened here hence
|
|
363
369
|
// using the message model again for the message dialog view and then filtering on that binding again is unnecessary.
|
|
364
370
|
// So we create new json model to use for the message dialog view.
|
|
365
371
|
|
|
372
|
+
|
|
366
373
|
var aMessages = [];
|
|
367
|
-
aCurrentContexts.forEach(function (
|
|
368
|
-
var oMessage;
|
|
369
|
-
oMessage = oContext.getObject();
|
|
374
|
+
aCurrentContexts.forEach(function (currentContext) {
|
|
375
|
+
var oMessage = currentContext.getObject();
|
|
370
376
|
aMessages.push(oMessage);
|
|
371
377
|
aMessageDataList = aMessages;
|
|
372
378
|
}); // if(aMessages.length === 0 && aMessageList.length) {
|
|
@@ -413,7 +419,6 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
413
419
|
var oMessageObject = prepareMessageViewForDialog(oMessageDialogModel, bStrictHandlingFlow);
|
|
414
420
|
oDialog = oDialog || new Dialog({
|
|
415
421
|
resizable: true,
|
|
416
|
-
content: oMessageObject.oMessageView,
|
|
417
422
|
endButton: new Button({
|
|
418
423
|
press: function () {
|
|
419
424
|
dialogCloseHandler(); // also remove bound transition messages if we were showing them
|
|
@@ -441,6 +446,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
441
446
|
aResolveFunctions = [];
|
|
442
447
|
}
|
|
443
448
|
});
|
|
449
|
+
oDialog.addContent(oMessageObject.oMessageView);
|
|
444
450
|
|
|
445
451
|
if (messageHasETag) {
|
|
446
452
|
sap.ui.require(["sap/m/ButtonType"], function (ButtonType) {
|
|
@@ -468,6 +474,7 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
468
474
|
oDialog.getCustomHeader().getContentMiddle()[0].setText(sHighestPriorityText);
|
|
469
475
|
oMessageView.navigateBack();
|
|
470
476
|
oDialog.open();
|
|
477
|
+
resolve(oDialog);
|
|
471
478
|
}).catch(reject);
|
|
472
479
|
});
|
|
473
480
|
} else if (showMessageBox) {
|
|
@@ -480,13 +487,13 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
480
487
|
var retryAfterMessage = getRetryAfterMessage(oMessage, true);
|
|
481
488
|
|
|
482
489
|
if (retryAfterMessage) {
|
|
483
|
-
formattedTextString = "<h6>"
|
|
490
|
+
formattedTextString = "<h6>".concat(retryAfterMessage, "</h6><br>");
|
|
484
491
|
}
|
|
485
492
|
|
|
486
493
|
if (oMessage.getCode() !== "503" && oMessage.getAdditionalText() !== undefined) {
|
|
487
|
-
formattedTextString = formattedTextString + oMessage.getAdditionalText()
|
|
494
|
+
formattedTextString = "".concat(formattedTextString + oMessage.getAdditionalText(), ": ").concat(oMessage.getMessage(), "</html></body>");
|
|
488
495
|
} else {
|
|
489
|
-
formattedTextString = formattedTextString + oMessage.getMessage()
|
|
496
|
+
formattedTextString = "".concat(formattedTextString + oMessage.getMessage(), "</html></body>");
|
|
490
497
|
}
|
|
491
498
|
|
|
492
499
|
var formattedText = new FormattedText({
|
|
@@ -536,19 +543,42 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
536
543
|
removeTransitionMessages(false);
|
|
537
544
|
}
|
|
538
545
|
|
|
539
|
-
function removeBoundTransitionMessages() {
|
|
540
|
-
removeTransitionMessages(true);
|
|
546
|
+
function removeBoundTransitionMessages(sPathToBeRemoved) {
|
|
547
|
+
removeTransitionMessages(true, sPathToBeRemoved);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
function getMessagesFromMessageModel(oMessageModel, sPathToBeRemoved) {
|
|
551
|
+
if (sPathToBeRemoved === undefined) {
|
|
552
|
+
return oMessageModel.getObject("/");
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
var listBinding = oMessageModel.bindList("/");
|
|
556
|
+
listBinding.filter(new Filter({
|
|
557
|
+
path: "target",
|
|
558
|
+
operator: FilterOperator.StartsWith,
|
|
559
|
+
value1: sPathToBeRemoved
|
|
560
|
+
}));
|
|
561
|
+
return listBinding.getCurrentContexts().map(function (oContext) {
|
|
562
|
+
return oContext.getObject();
|
|
563
|
+
});
|
|
541
564
|
}
|
|
542
565
|
|
|
543
566
|
function getMessages() {
|
|
544
567
|
var bBoundMessages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
545
568
|
var bTransitionOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
569
|
+
var sPathToBeRemoved = arguments.length > 2 ? arguments[2] : undefined;
|
|
546
570
|
var i;
|
|
547
571
|
var oMessageManager = Core.getMessageManager(),
|
|
548
572
|
oMessageModel = oMessageManager.getMessageModel(),
|
|
549
|
-
aMessages = oMessageModel.getObject("/"),
|
|
550
573
|
oResourceBundle = Core.getLibraryResourceBundle("sap.fe.core"),
|
|
551
574
|
aTransitionMessages = [];
|
|
575
|
+
var aMessages = [];
|
|
576
|
+
|
|
577
|
+
if (bBoundMessages && bTransitionOnly && sPathToBeRemoved) {
|
|
578
|
+
aMessages = getMessagesFromMessageModel(oMessageModel, sPathToBeRemoved);
|
|
579
|
+
} else {
|
|
580
|
+
aMessages = oMessageModel.getObject("/");
|
|
581
|
+
}
|
|
552
582
|
|
|
553
583
|
for (i = 0; i < aMessages.length; i++) {
|
|
554
584
|
if ((!bTransitionOnly || aMessages[i].persistent) && (bBoundMessages && aMessages[i].target !== "" || !bBoundMessages && (!aMessages[i].target || aMessages[i].target === "")) && aMessages[i].code) {
|
|
@@ -558,15 +588,15 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
558
588
|
|
|
559
589
|
for (i = 0; i < aTransitionMessages.length; i++) {
|
|
560
590
|
if (aTransitionMessages[i].code === "503" && aTransitionMessages[i].message !== "" && aTransitionMessages[i].message.indexOf(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")) === -1) {
|
|
561
|
-
aTransitionMessages[i].message = "\n"
|
|
591
|
+
aTransitionMessages[i].message = "\n".concat(oResourceBundle.getText("C_MESSAGE_HANDLING_SAPFE_503_BACKEND_PREFIX")).concat(aTransitionMessages[i].message);
|
|
562
592
|
}
|
|
563
593
|
}
|
|
564
594
|
|
|
565
595
|
return aTransitionMessages;
|
|
566
596
|
}
|
|
567
597
|
|
|
568
|
-
function removeTransitionMessages(bBoundMessages) {
|
|
569
|
-
var aMessagesToBeDeleted = getMessages(bBoundMessages, true);
|
|
598
|
+
function removeTransitionMessages(bBoundMessages, sPathToBeRemoved) {
|
|
599
|
+
var aMessagesToBeDeleted = getMessages(bBoundMessages, true, sPathToBeRemoved);
|
|
570
600
|
|
|
571
601
|
if (aMessagesToBeDeleted.length > 0) {
|
|
572
602
|
Core.getMessageManager().removeMessages(aMessagesToBeDeleted);
|
|
@@ -594,4 +624,4 @@ sap.ui.define(["sap/m/Bar", "sap/m/Button", "sap/m/Dialog", "sap/m/FormattedText
|
|
|
594
624
|
};
|
|
595
625
|
return messageHandling;
|
|
596
626
|
}, false);
|
|
597
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVRlbXBsYXRlIiwib01lc3NhZ2VWaWV3IiwiZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzIiwic1ByZXZpb3VzR3JvdXBOYW1lIiwiaW5zZXJ0RGV0YWlsIiwib1Byb3BlcnR5IiwicHJvcGVydHkiLCJzdWJzdHIiLCJNYXRoIiwibWF4IiwibGFzdEluZGV4T2YiLCJpbnNlcnRHcm91cE5hbWUiLCJzSFRNTCIsImdyb3VwTmFtZSIsImdldFBhdGhzIiwic1REIiwiZm9yRWFjaCIsImZuRm9ybWF0RGVzY3JpcHRpb24iLCJmbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHkiLCJhTWVzc2FnZXMiLCJzTWVzc2FnZVByaW9yaXR5IiwiTm9uZSIsImlMZW5ndGgiLCJsZW5ndGgiLCJvTWVzc2FnZUNvdW50IiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiaSIsImdldFR5cGUiLCJmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkiLCJvTWVzc2FnZU1hbmFnZXIiLCJvUmVzb3VyY2VCdW5kbGUiLCJjb25jdXJyZW50RWRpdEZsYWciLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXRPYmplY3QiLCJiTWVzc2FnZXNNb2RpZmllZCIsInNFdGFnTWVzc2FnZSIsIm9NZXNzYWdlIiwib1RlY2huaWNhbERldGFpbHMiLCJnZXRUZWNobmljYWxEZXRhaWxzIiwiaHR0cFN0YXR1cyIsImlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiIsImdldFRleHQiLCJyZW1vdmVNZXNzYWdlcyIsInNldE1lc3NhZ2UiLCJ0YXJnZXQiLCJhZGRNZXNzYWdlcyIsImRpYWxvZ0Nsb3NlSGFuZGxlciIsImNsb3NlIiwic2V0VmlzaWJsZSIsIm9NZXNzYWdlRGlhbG9nTW9kZWwiLCJnZXRNb2RlbCIsInNldERhdGEiLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0UmV0cnlBZnRlck1lc3NhZ2UiLCJiTWVzc2FnZURpYWxvZyIsImROb3ciLCJEYXRlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInNSZXRyeUFmdGVyTWVzc2FnZSIsInJldHJ5QWZ0ZXIiLCJkUmV0cnlBZnRlciIsIm9EYXRlRm9ybWF0IiwiZ2V0RnVsbFllYXIiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZVRpbWVJbnN0YW5jZSIsInBhdHRlcm4iLCJmb3JtYXQiLCJnZXRNb250aCIsImdldERhdGUiLCJwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2ciLCJiU3RyaWN0SGFuZGxpbmdGbG93IiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwiZXJyb3JUYXJnZXRzSW5BUE0iLCJiU2hvd01lc3NhZ2VCb3giLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiZXhpc3RpbmdNZXNzYWdlcyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGEiLCJvVW5pcXVlT2JqIiwiYU1vZGVsRGF0YUFycmF5IiwiZmlsdGVyIiwib2JqIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1lc3NhZ2VUb2FzdCIsInNob3ciLCJyZWplY3QiLCJ0aGVuIiwibWVzc2FnZUhhc0VUYWciLCJvTWVzc2FnZU9iamVjdCIsInJlc2l6YWJsZSIsImNvbnRlbnQiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsInNhcCIsInVpIiwicmVxdWlyZSIsIkJ1dHRvblR5cGUiLCJzZXRCZWdpbkJ1dHRvbiIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsInJlZnJlc2giLCJFbXBoYXNpemVkIiwiZGVzdHJveUJlZ2luQnV0dG9uIiwiZ2V0SXRlbXMiLCJnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2ciLCJzZXRTdGF0ZSIsImdldEN1c3RvbUhlYWRlciIsImdldENvbnRlbnRNaWRkbGUiLCJzZXRUZXh0Iiwib3BlbiIsImNhdGNoIiwidGVjaG5pY2FsRGV0YWlscyIsIm9yaWdpbmFsTWVzc2FnZSIsImZvcm1hdHRlZFRleHRTdHJpbmciLCJyZXRyeUFmdGVyTWVzc2FnZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ2V0TWVzc2FnZSIsImZvcm1hdHRlZFRleHQiLCJGb3JtYXR0ZWRUZXh0IiwiaHRtbFRleHQiLCJNZXNzYWdlQm94IiwiZXJyb3IiLCJvbkNsb3NlIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJvTWVzc2FnZU1vZGVsIiwiYVRyYW5zaXRpb25NZXNzYWdlcyIsImFNZXNzYWdlc1RvQmVEZWxldGVkIiwibWVzc2FnZUhhbmRsaW5nIiwibW9kaWZ5RVRhZ01lc3NhZ2VzT25seSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQW1CQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBNUI7QUFDQSxNQUFJRSxZQUFtQixHQUFHLEVBQTFCO0FBQ0EsTUFBSUMsZ0JBQXVCLEdBQUcsRUFBOUI7QUFDQSxNQUFJQyxpQkFBd0IsR0FBRyxFQUEvQjtBQUNBLE1BQUlDLE9BQUo7QUFDQSxNQUFJQyxXQUFKO0FBQ0EsTUFBSUMsZ0JBQUo7QUFDQSxNQUFJQyxZQUFKOztBQW9CQSxXQUFTQyx3QkFBVCxHQUFvQztBQUNuQyxRQUFJQyxrQkFBSixDQURtQyxDQUduQzs7QUFDQSxhQUFTQyxZQUFULENBQXNCQyxTQUF0QixFQUFzQztBQUNyQyxhQUFPQSxTQUFTLENBQUNDLFFBQVYsR0FDSixTQUNBRCxTQUFTLENBQUNDLFFB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aEIsQ0FBd0IsNkNBQXhCLENBQXZDLE1BQW1ILENBQUMsQ0FIckgsRUFJRTtBQUNEMEssUUFBQUEsbUJBQW1CLENBQUN6TCxDQUFELENBQW5CLENBQXVCOEcsT0FBdkIsR0FDQyxPQUFPMUcsZUFBZSxDQUFDVyxPQUFoQixDQUF3Qiw2Q0FBeEIsQ0FBUCxHQUFnRjBLLG1CQUFtQixDQUFDekwsQ0FBRCxDQUFuQixDQUF1QjhHLE9BRHhHO0FBRUE7QUFDRDs7QUFDRCxXQUFPMkUsbUJBQVA7QUFDQTs7QUFDRCxXQUFTSix3QkFBVCxDQUFrQ0MsY0FBbEMsRUFBdUQ7QUFDdEQsUUFBTUksb0JBQW9CLEdBQUc3RyxXQUFXLENBQUN5RyxjQUFELEVBQWlCLElBQWpCLENBQXhDOztBQUVBLFFBQUlJLG9CQUFvQixDQUFDaE0sTUFBckIsR0FBOEIsQ0FBbEMsRUFBcUM7QUFDcENxQyxNQUFBQSxJQUFJLENBQUMrQyxpQkFBTCxHQUF5QjlELGNBQXpCLENBQXdDMEssb0JBQXhDO0FBQ0E7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsTUFBTUMsZUFBb0MsR0FBRztBQUM1QzlHLElBQUFBLFdBQVcsRUFBRUEsV0FEK0I7QUFFNUNSLElBQUFBLG1CQUFtQixFQUFFQSxtQkFGdUI7QUFHNUMzQyxJQUFBQSwrQkFBK0IsRUFBRUEsK0JBSFc7QUFJNUNpSCxJQUFBQSw2QkFBNkIsRUFBRUEsNkJBSmE7QUFLNUNpRCxJQUFBQSxzQkFBc0IsRUFBRTFMLHdCQUxvQjtBQU01Q3lCLElBQUFBLG9CQUFvQixFQUFFQSxvQkFOc0I7QUFPNUNpQixJQUFBQSwyQkFBMkIsRUFBRUE7QUFQZSxHQUE3QztTQVVlK0ksZSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhciBmcm9tIFwic2FwL20vQmFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZvcm1hdHRlZFRleHQgZnJvbSBcInNhcC9tL0Zvcm1hdHRlZFRleHRcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBNZXNzYWdlVmlldyBmcm9tIFwic2FwL20vTWVzc2FnZVZpZXdcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IEljb25Qb29sIGZyb20gXCJzYXAvdWkvY29yZS9JY29uUG9vbFwiO1xuaW1wb3J0IENvcmVMaWIgZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB7IENvcmVFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcblxuY29uc3QgTWVzc2FnZVR5cGUgPSBDb3JlTGliLk1lc3NhZ2VUeXBlO1xubGV0IGFNZXNzYWdlTGlzdDogYW55W10gPSBbXTtcbmxldCBhTWVzc2FnZURhdGFMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFSZXNvbHZlRnVuY3Rpb25zOiBhbnlbXSA9IFtdO1xubGV0IG9EaWFsb2c6IERpYWxvZztcbmxldCBvQmFja0J1dHRvbjogQnV0dG9uO1xubGV0IG9NZXNzYWdlVGVtcGxhdGU6IE1lc3NhZ2VJdGVtO1xubGV0IG9NZXNzYWdlVmlldzogTWVzc2FnZVZpZXc7XG5cbmV4cG9ydCB0eXBlIG1lc3NhZ2VIYW5kbGluZ1R5cGUgPSB7XG5cdGdldE1lc3NhZ2VzOiAoYkJvdW5kTWVzc2FnZXM/OiBhbnksIGJUcmFuc2l0aW9uT25seT86IGFueSkgPT4gYW55W107XG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IChcblx0XHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0XHRvQ29udGV4dD86IGFueSxcblx0XHRiSGFzRXRhZ01lc3NhZ2U/OiBib29sZWFuLFxuXHRcdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0XHRlcnJvclRhcmdldHNJbkFQTT86IGJvb2xlYW4sXG5cdFx0YlNob3dNZXNzYWdlQm94PzogYm9vbGVhbixcblx0XHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuXG5cdCkgPT4gUHJvbWlzZTxhbnk+O1xuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiAoKSA9PiB2b2lkO1xuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogKCkgPT4gdm9pZDtcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogKG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSA9PiBib29sZWFuO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSA9PiBhbnk7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZnVuY3Rpb24gZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IGFueSkge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRsZXQgc0hUTUwgPSBcIlwiO1xuXHRcdGlmIChvUHJvcGVydHkuZ3JvdXBOYW1lICYmIG9Qcm9wZXJ0eS5wcm9wZXJ0eSAmJiBvUHJvcGVydHkuZ3JvdXBOYW1lICE9PSBzUHJldmlvdXNHcm91cE5hbWUpIHtcblx0XHRcdHNIVE1MICs9IFwiKCAke1wiICsgb1Byb3BlcnR5LnByb3BlcnR5ICsgJ30gPyBcIjxicj48aDM+JyArIG9Qcm9wZXJ0eS5ncm91cE5hbWUgKyAnPC9oMz5cIiA6IFwiXCIgKSArICc7XG5cdFx0XHRzUHJldmlvdXNHcm91cE5hbWUgPSBvUHJvcGVydHkuZ3JvdXBOYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gc0hUTUw7XG5cdH1cblxuXHQvLyBMaXN0IG9mIHRlY2huaWNhbCBkZXRhaWxzIHRvIGJlIHNob3duXG5cdGZ1bmN0aW9uIGdldFBhdGhzKCkge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIlwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL3N0YXR1c1wiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvc3RhdHVzVGV4dFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vQ29tcG9uZW50SWRcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VJZFwiIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL1NlcnZpY2VWZXJzaW9uXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0FuYWx5c2lzXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vRGV0YWlsZWROb3RlXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBzVEQgKyBcIi9lcnJvci9AU0FQX19jb21tb24uRXhjZXB0aW9uQ2F0ZWdvcnlcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkVycm9yUmVzb2x1dGlvblwiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL0BTQVBfX2NvbW1vbi5UcmFuc2FjdGlvbklkXCIgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJNZXNzYWdlc1wiLCBcInByb3BlcnR5XCI6IHNURCArIFwiL2Vycm9yL2NvZGVcIiB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIk1lc3NhZ2VzXCIsIFwicHJvcGVydHlcIjogc1REICsgXCIvZXJyb3IvbWVzc2FnZVwiIH1cblx0XHRdO1xuXHR9XG5cblx0bGV0IHNIVE1MID0gXCJPYmplY3Qua2V5cyhcIiArIFwiJHt0ZWNobmljYWxEZXRhaWxzfVwiICsgJykubGVuZ3RoID4gMCA/IFwiPGgyPlRlY2huaWNhbCBEZXRhaWxzPC9oMj5cIiA6IFwiXCIgJztcblx0Z2V0UGF0aHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHk6IHsgZ3JvdXBOYW1lOiBzdHJpbmc7IHByb3BlcnR5OiBzdHJpbmcgfSkge1xuXHRcdHNIVE1MID0gc0hUTUwgKyBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5KSArIFwiXCIgKyBpbnNlcnREZXRhaWwob1Byb3BlcnR5KSArIFwiICsgXCI7XG5cdH0pO1xuXHRyZXR1cm4gc0hUTUw7XG59XG5mdW5jdGlvbiBmbkZvcm1hdERlc2NyaXB0aW9uKCkge1xuXHRjb25zdCBzSFRNTCA9IFwiKCR7XCIgKyAnZGVzY3JpcHRpb259ID8gKFwiPGgyPkRlc2NyaXB0aW9uPC9oMj5cIiArICR7JyArICdkZXNjcmlwdGlvbn0pIDogXCJcIiknO1xuXHRyZXR1cm4gc0hUTUw7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSB0eXBlKEVycm9yL1dhcm5pbmcvU3VjY2Vzcy9JbmZvcm1hdGlvbikgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzLlxuXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nLmZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eVxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcGFyYW0ge0FycmF5fSBbYU1lc3NhZ2VzXSBNZXNzYWdlcyBsaXN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIaWdoZXN0IHByaW9yaXR5IG1lc3NhZ2UgZnJvbSB0aGUgYXZhaWxhYmxlIG1lc3NhZ2VzXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShhTWVzc2FnZXM6IGFueVtdKSB7XG5cdGxldCBzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0Y29uc3QgaUxlbmd0aCA9IGFNZXNzYWdlcy5sZW5ndGg7XG5cdGNvbnN0IG9NZXNzYWdlQ291bnQ6IGFueSA9IHsgRXJyb3I6IDAsIFdhcm5pbmc6IDAsIFN1Y2Nlc3M6IDAsIEluZm9ybWF0aW9uOiAwIH07XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBpTGVuZ3RoOyBpKyspIHtcblx0XHQrK29NZXNzYWdlQ291bnRbYU1lc3NhZ2VzW2ldLmdldFR5cGUoKV07XG5cdH1cblx0aWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuRXJyb3JdID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLldhcm5pbmddID4gMCkge1xuXHRcdHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuU3VjY2Vzc10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uO1xuXHR9XG5cdHJldHVybiBzTWVzc2FnZVByaW9yaXR5O1xufVxuLy8gZnVuY3Rpb24gd2hpY2ggbW9kaWZ5IGUtVGFnIG1lc3NhZ2VzIG9ubHkuXG4vLyByZXR1cm5zIDogdHJ1ZSwgaWYgYW55IGUtVGFnIG1lc3NhZ2UgaXMgbW9kaWZpZWQsIG90aGVyd2lzZSBmYWxzZS5cbmZ1bmN0aW9uIGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seShvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnksIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRjb25zdCBhTWVzc2FnZXMgPSBvTWVzc2FnZU1hbmFnZXIuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0T2JqZWN0KFwiL1wiKTtcblx0bGV0IGJNZXNzYWdlc01vZGlmaWVkID0gZmFsc2U7XG5cdGxldCBzRXRhZ01lc3NhZ2UgPSBcIlwiO1xuXHRhTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSwgaTogYW55KSB7XG5cdFx0Y29uc3Qgb1RlY2huaWNhbERldGFpbHMgPSBvTWVzc2FnZS5nZXRUZWNobmljYWxEZXRhaWxzKCk7XG5cdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDQxMikge1xuXHRcdFx0aWYgKG9UZWNobmljYWxEZXRhaWxzLmlzQ29uY3VycmVudE1vZGlmaWNhdGlvbiAmJiBjb25jdXJyZW50RWRpdEZsYWcpIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID1cblx0XHRcdFx0XHRzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTX0NPTkNVUlJFTlRfTU9ESUZJQ0FUSU9OXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0V0YWdNZXNzYWdlID0gc0V0YWdNZXNzYWdlIHx8IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0VUQUdfVEVDSE5JQ0FMX0lTU1VFU1wiKTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNbaV0pO1xuXHRcdFx0b01lc3NhZ2Uuc2V0TWVzc2FnZShzRXRhZ01lc3NhZ2UpO1xuXHRcdFx0b01lc3NhZ2UudGFyZ2V0ID0gXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhvTWVzc2FnZSk7XG5cdFx0XHRiTWVzc2FnZXNNb2RpZmllZCA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGJNZXNzYWdlc01vZGlmaWVkO1xufVxuLy8gRGlhbG9nIGNsb3NlIEhhbmRsaW5nXG5mdW5jdGlvbiBkaWFsb2dDbG9zZUhhbmRsZXIoKSB7XG5cdG9EaWFsb2cuY2xvc2UoKTtcblx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZShmYWxzZSk7XG5cdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsOiBhbnkgPSBvTWVzc2FnZVZpZXcuZ2V0TW9kZWwoKTtcblx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHR9XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcbn1cbmZ1bmN0aW9uIGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSB7XG5cdGNvbnN0IGROb3cgPSBuZXcgRGF0ZSgpO1xuXHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0bGV0IHNSZXRyeUFmdGVyTWVzc2FnZTtcblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyKSB7XG5cdFx0Y29uc3QgZFJldHJ5QWZ0ZXIgPSBvVGVjaG5pY2FsRGV0YWlscy5yZXRyeUFmdGVyO1xuXHRcdGxldCBvRGF0ZUZvcm1hdDtcblx0XHRpZiAoZE5vdy5nZXRGdWxsWWVhcigpICE9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL2RpZmZlcmVudCB5ZWFyc1xuXHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRwYXR0ZXJuOiBcIk1NTU0gZGQsIHl5eXkgJ2F0JyBoaDptbSBhXCJcblx0XHRcdH0pO1xuXHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0fSBlbHNlIGlmIChkTm93LmdldEZ1bGxZZWFyKCkgPT0gZFJldHJ5QWZ0ZXIuZ2V0RnVsbFllYXIoKSkge1xuXHRcdFx0Ly9zYW1lIHllYXJcblx0XHRcdGlmIChiTWVzc2FnZURpYWxvZykge1xuXHRcdFx0XHQvL2xlc3MgdGhhbiAyIG1pblxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPVxuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKSArXG5cdFx0XHRcdFx0XCIgXCIgK1xuXHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19ERVNDXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChkTm93LmdldE1vbnRoKCkgIT09IGRSZXRyeUFmdGVyLmdldE1vbnRoKCkgfHwgZE5vdy5nZXREYXRlKCkgIT09IGRSZXRyeUFmdGVyLmdldERhdGUoKSkge1xuXHRcdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0cGF0dGVybjogXCJNTU1NIGRkICdhdCcgaGg6bW0gYVwiXG5cdFx0XHRcdH0pOyAvL2RpZmZlcmVudCBtb250aHMgb3IgZGlmZmVyZW50IGRheXMgb2Ygc2FtZSBtb250aFxuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vc2FtZSBkYXlcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiaGg6bW0gYVwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfREFZXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9UZWNobmljYWxEZXRhaWxzICYmIG9UZWNobmljYWxEZXRhaWxzLmh0dHBTdGF0dXMgPT09IDUwMyAmJiAhb1RlY2huaWNhbERldGFpbHMucmV0cnlBZnRlcikge1xuXHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19FUlJPUl9OT19SRVRSWV9BRlRFUlwiKTtcblx0fVxuXHRyZXR1cm4gc1JldHJ5QWZ0ZXJNZXNzYWdlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cob01lc3NhZ2VEaWFsb2dNb2RlbDogSlNPTk1vZGVsLCBiU3RyaWN0SGFuZGxpbmdGbG93OiBib29sZWFuKSB7XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPVxuXHRcdFx0b01lc3NhZ2VUZW1wbGF0ZSB8fFxuXHRcdFx0bmV3IE1lc3NhZ2VJdGVtKHVuZGVmaW5lZCwge1xuXHRcdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0XHRzdWJ0aXRsZTogXCJ7YWRkaXRpb25hbFRleHR9XCIsXG5cdFx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdFx0dHlwZTogeyBwYXRoOiBcInR5cGVcIiB9LFxuXHRcdFx0XHRkZXNjcmlwdGlvbjpcblx0XHRcdFx0XHRcIns9ICR7XCIgK1xuXHRcdFx0XHRcdFwiZGVzY3JpcHRpb259IHx8ICR7dGVjaG5pY2FsRGV0YWlsc30gPyBcIiArXG5cdFx0XHRcdFx0J1wiPGh0bWw+PGJvZHk+XCIgKyAnICtcblx0XHRcdFx0XHRmbkZvcm1hdERlc2NyaXB0aW9uKCkgK1xuXHRcdFx0XHRcdFwiICsgXCIgK1xuXHRcdFx0XHRcdGZuRm9ybWF0VGVjaG5pY2FsRGV0YWlscygpICtcblx0XHRcdFx0XHQnXCI8L2JvZHk+PC9odG1sPlwiJyArXG5cdFx0XHRcdFx0JyA6IFwiXCIgfScsXG5cdFx0XHRcdG1hcmt1cERlc2NyaXB0aW9uOiB0cnVlXG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPVxuXHRcdG9NZXNzYWdlVmlldyB8fFxuXHRcdG5ldyBNZXNzYWdlVmlldyh7XG5cdFx0XHRzaG93RGV0YWlsc1BhZ2VIZWFkZXI6IGZhbHNlLFxuXHRcdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdGl0ZW1zOiB7XG5cdFx0XHRcdHBhdGg6IFwiL1wiLFxuXHRcdFx0XHR0ZW1wbGF0ZTogb01lc3NhZ2VUZW1wbGF0ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRvQmFja0J1dHRvbiA9XG5cdFx0b0JhY2tCdXR0b24gfHxcblx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdGljb246IEljb25Qb29sLmdldEljb25VUkkoXCJuYXYtYmFja1wiKSxcblx0XHRcdHZpc2libGU6IGZhbHNlLFxuXHRcdFx0cHJlc3M6IGZ1bmN0aW9uICh0aGlzOiBCdXR0b24pIHtcblx0XHRcdFx0b01lc3NhZ2VWaWV3Lm5hdmlnYXRlQmFjaygpO1xuXHRcdFx0XHR0aGlzLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHQvLyBVcGRhdGUgcHJvcGVyIEVUYWcgTWlzbWF0Y2ggZXJyb3Jcblx0b01lc3NhZ2VWaWV3LnNldE1vZGVsKG9NZXNzYWdlRGlhbG9nTW9kZWwpO1xuXHRyZXR1cm4ge1xuXHRcdG9NZXNzYWdlVmlldyxcblx0XHRvQmFja0J1dHRvblxuXHR9O1xufVxuXG5mdW5jdGlvbiBzaG93VW5ib3VuZE1lc3NhZ2VzKFxuXHR0aGlzOiBtZXNzYWdlSGFuZGxpbmdUeXBlLFxuXHRhQ3VzdG9tTWVzc2FnZXM/OiBhbnlbXSxcblx0b0NvbnRleHQ/OiBhbnksXG5cdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdGJTaG93Qm91bmRUcmFuc2l0aW9uPzogYm9vbGVhbixcblx0ZXJyb3JUYXJnZXRzSW5BUE0/OiBib29sZWFuLFxuXHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRjb25jdXJyZW50RWRpdEZsYWc/OiBib29sZWFuXG4pIHtcblx0bGV0IGFVbmJvdW5kTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbXG5cdFx0bmV3IEZpbHRlcih7IHBhdGg6IFwiY29kZVwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogbnVsbCB9KSxcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KVxuXHRdO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFVbmJvdW5kTWVzc2FnZXMgPSBhVW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBhbnkpIHtcblx0XHRcdGxldCBpbmRleCA9IEluZmluaXR5LFxuXHRcdFx0XHRvQ29udHJvbCA9IENvcmUuYnlJZChhQ29udHJvbElkc1swXSkgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBDb250cm9sO1xuXHRcdFx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID1cblx0XHRcdFx0XHRvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZ1xuXHRcdFx0XHRcdFx0PyAoZXJyb3JGaWVsZENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgYW55KS5maW5kRWxlbWVudHModHJ1ZSkuaW5kZXhPZihlcnJvckZpZWxkQ29udHJvbClcblx0XHRcdFx0XHRcdDogSW5maW5pdHk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGZpZWxkUmFua2luRGlhbG9nO1xuXHRcdFx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2wuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBvbmx5IHVuYm91bmQgbWVzc2FnZXMgaGF2ZSB0byBiZSBzaG93biBzbyBhZGQgZmlsdGVyIGFjY29yZGluZ2x5XG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJ0YXJnZXRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IFwiXCIgfSkpO1xuXHR9XG5cdGlmIChhQ3VzdG9tTWVzc2FnZXMgJiYgYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFDdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgKGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiIHx8IGJTaG93TWVzc2FnZUJveCkpIHtcblx0XHRpZiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgIT09IFwiNTAzXCIpIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gIWVycm9yVGFyZ2V0c0luQVBNO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cdFx0XHRzaG93TWVzc2FnZURpYWxvZyA9ICFlcnJvclRhcmdldHNJbkFQTTsgLy8gaWYgZmFsc2UsIHNob3cgbWVzc2FnZXMgaW4gZGlhbG9nXG5cdFx0XHQvLyBBcyBmaXRlcmluZyBoYXMgYWxyZWFkeSBoYXBwZW5lZCBoZXJlIGhlbmNlXG5cdFx0XHQvLyB1c2luZyB0aGUgbWVzc2FnZSBtb2RlbCBhZ2FpbiBmb3IgdGhlIG1lc3NhZ2UgZGlhbG9nIHZpZXcgYW5kIHRoZW4gZmlsdGVyaW5nIG9uIHRoYXQgYmluZGluZyBhZ2FpbiBpcyB1bm5lY2Vzc2FyeS5cblx0XHRcdC8vIFNvIHdlIGNyZWF0ZSBuZXcganNvbiBtb2RlbCB0byB1c2UgZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3LlxuXHRcdFx0Y29uc3QgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0YUN1cnJlbnRDb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ29udGV4dDogYW55KSB7XG5cdFx0XHRcdGxldCBvTWVzc2FnZTtcblx0XHRcdFx0b01lc3NhZ2UgPSBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0YU1lc3NhZ2VzLnB1c2gob01lc3NhZ2UpO1xuXHRcdFx0XHRhTWVzc2FnZURhdGFMaXN0ID0gYU1lc3NhZ2VzO1xuXHRcdFx0fSk7XG5cdFx0XHQvLyBpZihhTWVzc2FnZXMubGVuZ3RoID09PSAwICYmIGFNZXNzYWdlTGlzdC5sZW5ndGgpIHtcblx0XHRcdC8vIFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNZXNzYWdlcyk7XG5cdFx0XHQvLyB9XG5cdFx0XHRsZXQgZXhpc3RpbmdNZXNzYWdlczogYW55W10gPSBbXTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9NZXNzYWdlRGlhbG9nTW9kZWwuZ2V0RGF0YSgpKSkge1xuXHRcdFx0XHRleGlzdGluZ01lc3NhZ2VzID0gb01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvVW5pcXVlT2JqOiBhbnkgPSB7fTtcblx0XHRcdGxldCBhTW9kZWxEYXRhQXJyYXk6IGFueVtdID0gW107XG5cdFx0XHRhTW9kZWxEYXRhQXJyYXkgPSBhTWVzc2FnZURhdGFMaXN0LmNvbmNhdChleGlzdGluZ01lc3NhZ2VzKS5maWx0ZXIoZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0XHQvLyByZW1vdmUgZW50cmllcyBoYXZpbmcgZHVwbGljYXRlIG1lc3NhZ2UgaWRzXG5cdFx0XHRcdHJldHVybiAhb1VuaXF1ZU9ialtvYmouaWRdICYmIChvVW5pcXVlT2JqW29iai5pZF0gPSB0cnVlKTtcblx0XHRcdH0pO1xuXHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKGFNb2RlbERhdGFBcnJheSk7XG5cdFx0fVxuXHR9XG5cdGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMCAmJiAhYUN1c3RvbU1lc3NhZ2VzICYmICFiSGFzRXRhZ01lc3NhZ2UpIHtcblx0XHQvLyBEb24ndCBzaG93IHRoZSBwb3B1cCBpZiB0aGVyZSBhcmUgbm8gdHJhbnNpZW50IG1lc3NhZ2VzXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fSBlbHNlIGlmIChhVW5ib3VuZE1lc3NhZ2VzLmxlbmd0aCA9PT0gMSAmJiBhVW5ib3VuZE1lc3NhZ2VzWzBdLmdldFR5cGUoKSA9PT0gTWVzc2FnZVR5cGUuU3VjY2VzcyAmJiAhYUN1c3RvbU1lc3NhZ2VzKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhhVW5ib3VuZE1lc3NhZ2VzWzBdLm1lc3NhZ2UpO1xuXHRcdFx0aWYgKG9NZXNzYWdlRGlhbG9nTW9kZWwpIHtcblx0XHRcdFx0b01lc3NhZ2VEaWFsb2dNb2RlbC5zZXREYXRhKHt9KTtcblx0XHRcdH1cblx0XHRcdG9NZXNzYWdlTWFuYWdlci5yZW1vdmVNZXNzYWdlcyhhVW5ib3VuZE1lc3NhZ2VzKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fSBlbHNlIGlmIChzaG93TWVzc2FnZURpYWxvZykge1xuXHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gYVJlc29sdmVGdW5jdGlvbnMgfHwgW107XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlOiAodmFsdWU6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkKSB7XG5cdFx0XHRhUmVzb2x2ZUZ1bmN0aW9ucy5wdXNoKHJlc29sdmUpO1xuXHRcdFx0KENvcmUgYXMgQ29yZUV4KVxuXHRcdFx0XHQuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiwgdHJ1ZSlcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYlN0cmljdEhhbmRsaW5nRmxvdyA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VIYXNFVGFnID0gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlciwgb1Jlc291cmNlQnVuZGxlLCBjb25jdXJyZW50RWRpdEZsYWcpO1xuXHRcdFx0XHRcdGNvbnN0IG9NZXNzYWdlT2JqZWN0ID0gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWwsIGJTdHJpY3RIYW5kbGluZ0Zsb3cpO1xuXHRcdFx0XHRcdG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0b0RpYWxvZyB8fFxuXHRcdFx0XHRcdFx0bmV3IERpYWxvZyh7XG5cdFx0XHRcdFx0XHRcdHJlc2l6YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Y29udGVudDogb01lc3NhZ2VPYmplY3Qub01lc3NhZ2VWaWV3LFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9uc1tpXS5jYWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VIYXNFVGFnKSB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9CdXR0b25UeXBlXCJdLCBmdW5jdGlvbiAoQnV0dG9uVHlwZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHQob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBhbnkpLmdldENvbnRlbnRNaWRkbGUoKVswXS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChyZWplY3QpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlQm94KSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBvTWVzc2FnZSA9IGFVbmJvdW5kTWVzc2FnZXNbMF07XG5cdFx0XHRpZiAob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscyAmJiBhTWVzc2FnZUxpc3QuaW5kZXhPZihvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKSA9PT0gLTEpIHtcblx0XHRcdFx0YU1lc3NhZ2VMaXN0LnB1c2gob01lc3NhZ2UudGVjaG5pY2FsRGV0YWlscy5vcmlnaW5hbE1lc3NhZ2UubWVzc2FnZSk7XG5cdFx0XHRcdGxldCBmb3JtYXR0ZWRUZXh0U3RyaW5nID0gXCI8aHRtbD48Ym9keT5cIjtcblx0XHRcdFx0Y29uc3QgcmV0cnlBZnRlck1lc3NhZ2UgPSBnZXRSZXRyeUFmdGVyTWVzc2FnZShvTWVzc2FnZSwgdHJ1ZSk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyTWVzc2FnZSkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxoNj5cIiArIHJldHJ5QWZ0ZXJNZXNzYWdlICsgXCI8L2g2Pjxicj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob01lc3NhZ2UuZ2V0Q29kZSgpICE9PSBcIjUwM1wiICYmIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPVxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyArIG9NZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0KCkgKyBcIjogXCIgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGZvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRNZXNzYWdlKCkgKyBcIjwvaHRtbD48L2JvZHk+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVGV4dDogYW55ID0gbmV3IEZvcm1hdHRlZFRleHQoe1xuXHRcdFx0XHRcdGh0bWxUZXh0OiBmb3JtYXR0ZWRUZXh0U3RyaW5nXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKGZvcm1hdHRlZFRleHQsIHtcblx0XHRcdFx0XHRvbkNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRhTWVzc2FnZUxpc3QgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdH1cbn1cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRUZXh0Rm9yTWVzc2FnZURpYWxvZyhzSGlnaGVzdFByaW9yaXR5OiBhbnkpIHtcblx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0c3dpdGNoIChzSGlnaGVzdFByaW9yaXR5KSB7XG5cdFx0Y2FzZSBcIkVycm9yXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX0VSUk9SXCIpO1xuXHRcdGNhc2UgXCJJbmZvcm1hdGlvblwiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfSU5GT1wiKTtcblx0XHRjYXNlIFwiU3VjY2Vzc1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfU1VDQ0VTU1wiKTtcblx0XHRjYXNlIFwiV2FybmluZ1wiOlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfV0FSTklOR1wiKTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIik7XG5cdH1cbn1cbmZ1bmN0aW9uIHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKSB7XG5cdHJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSk7XG59XG5mdW5jdGlvbiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUpO1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZSwgYlRyYW5zaXRpb25Pbmx5OiBib29sZWFuID0gZmFsc2UpIHtcblx0bGV0IGk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IChDb3JlIGFzIENvcmVFeCBhcyBhbnkpLmdldE1lc3NhZ2VNYW5hZ2VyKCksXG5cdFx0b01lc3NhZ2VNb2RlbCA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKSxcblx0XHRhTWVzc2FnZXMgPSBvTWVzc2FnZU1vZGVsLmdldE9iamVjdChcIi9cIiksXG5cdFx0b1Jlc291cmNlQnVuZGxlID0gKENvcmUgYXMgQ29yZUV4KS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSxcblx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzID0gW107XG5cblx0Zm9yIChpID0gMDsgaSA8IGFNZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmIChcblx0XHRcdCghYlRyYW5zaXRpb25Pbmx5IHx8IGFNZXNzYWdlc1tpXS5wZXJzaXN0ZW50KSAmJlxuXHRcdFx0KChiQm91bmRNZXNzYWdlcyAmJiBhTWVzc2FnZXNbaV0udGFyZ2V0ICE9PSBcIlwiKSB8fCAoIWJCb3VuZE1lc3NhZ2VzICYmICghYU1lc3NhZ2VzW2ldLnRhcmdldCB8fCBhTWVzc2FnZXNbaV0udGFyZ2V0ID09PSBcIlwiKSkpICYmXG5cdFx0XHRhTWVzc2FnZXNbaV0uY29kZVxuXHRcdCkge1xuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlcy5wdXNoKGFNZXNzYWdlc1tpXSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFUcmFuc2l0aW9uTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLmNvZGUgPT09IFwiNTAzXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSAhPT0gXCJcIiAmJlxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlLmluZGV4T2Yob1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0JBQ0tFTkRfUFJFRklYXCIpKSA9PT0gLTFcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZSA9XG5cdFx0XHRcdFwiXFxuXCIgKyBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIikgKyBhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhVHJhbnNpdGlvbk1lc3NhZ2VzO1xufVxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzOiBhbnkpIHtcblx0Y29uc3QgYU1lc3NhZ2VzVG9CZURlbGV0ZWQgPSBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlcywgdHJ1ZSk7XG5cblx0aWYgKGFNZXNzYWdlc1RvQmVEZWxldGVkLmxlbmd0aCA+IDApIHtcblx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkucmVtb3ZlTWVzc2FnZXMoYU1lc3NhZ2VzVG9CZURlbGV0ZWQpO1xuXHR9XG59XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgRmlvcmkgTWVzc2FnZSBIYW5kbGluZ1xuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZ1xuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWwgVGhpcyBtb2R1bGUgaXMgb25seSBmb3IgZXhwZXJpbWVudGFsIHVzZSEgPGJyLz48Yj5UaGlzIGlzIG9ubHkgYSBQT0MgYW5kIG1heWJlIGRlbGV0ZWQ8L2I+XG4gKiBAc2luY2UgMS41Ni4wXG4gKi9cbmNvbnN0IG1lc3NhZ2VIYW5kbGluZzogbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IGdldE1lc3NhZ2VzLFxuXHRzaG93VW5ib3VuZE1lc3NhZ2VzOiBzaG93VW5ib3VuZE1lc3NhZ2VzLFxuXHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzLFxuXHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlczogcmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IGZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSxcblx0Z2V0UmV0cnlBZnRlck1lc3NhZ2U6IGdldFJldHJ5QWZ0ZXJNZXNzYWdlLFxuXHRwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2c6IHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVzc2FnZUhhbmRsaW5nO1xuIl19
|
|
627
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1lc3NhZ2VIYW5kbGluZy50cyJdLCJuYW1lcyI6WyJNZXNzYWdlVHlwZSIsIkNvcmVMaWIiLCJhTWVzc2FnZUxpc3QiLCJhTWVzc2FnZURhdGFMaXN0IiwiYVJlc29sdmVGdW5jdGlvbnMiLCJvRGlhbG9nIiwib0JhY2tCdXR0b24iLCJvTWVzc2FnZVZpZXciLCJmbkZvcm1hdFRlY2huaWNhbERldGFpbHMiLCJzUHJldmlvdXNHcm91cE5hbWUiLCJpbnNlcnREZXRhaWwiLCJvUHJvcGVydHkiLCJwcm9wZXJ0eSIsInN1YnN0ciIsIk1hdGgiLCJtYXgiLCJsYXN0SW5kZXhPZiIsImluc2VydEdyb3VwTmFtZSIsInNIVE1MIiwiZ3JvdXBOYW1lIiwiZ2V0UGF0aHMiLCJzVEQiLCJmb3JFYWNoIiwiZm5Gb3JtYXREZXNjcmlwdGlvbiIsImZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eSIsImFNZXNzYWdlcyIsInNNZXNzYWdlUHJpb3JpdHkiLCJOb25lIiwiaUxlbmd0aCIsImxlbmd0aCIsIm9NZXNzYWdlQ291bnQiLCJFcnJvciIsIldhcm5pbmciLCJTdWNjZXNzIiwiSW5mb3JtYXRpb24iLCJpIiwiZ2V0VHlwZSIsImZuTW9kaWZ5RVRhZ01lc3NhZ2VzT25seSIsIm9NZXNzYWdlTWFuYWdlciIsIm9SZXNvdXJjZUJ1bmRsZSIsImNvbmN1cnJlbnRFZGl0RmxhZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldE9iamVjdCIsImJNZXNzYWdlc01vZGlmaWVkIiwic0V0YWdNZXNzYWdlIiwib01lc3NhZ2UiLCJvVGVjaG5pY2FsRGV0YWlscyIsImdldFRlY2huaWNhbERldGFpbHMiLCJodHRwU3RhdHVzIiwiaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uIiwiZ2V0VGV4dCIsInJlbW92ZU1lc3NhZ2VzIiwic2V0TWVzc2FnZSIsInRhcmdldCIsImFkZE1lc3NhZ2VzIiwiZGlhbG9nQ2xvc2VIYW5kbGVyIiwiY2xvc2UiLCJzZXRWaXNpYmxlIiwib01lc3NhZ2VEaWFsb2dNb2RlbCIsImdldE1vZGVsIiwic2V0RGF0YSIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSZXRyeUFmdGVyTWVzc2FnZSIsImJNZXNzYWdlRGlhbG9nIiwiZE5vdyIsIkRhdGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwic1JldHJ5QWZ0ZXJNZXNzYWdlIiwicmV0cnlBZnRlciIsImRSZXRyeUFmdGVyIiwib0RhdGVGb3JtYXQiLCJnZXRGdWxsWWVhciIsIkRhdGVGb3JtYXQiLCJnZXREYXRlVGltZUluc3RhbmNlIiwicGF0dGVybiIsImZvcm1hdCIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZyIsImJTdHJpY3RIYW5kbGluZ0Zsb3ciLCJvTWVzc2FnZVRlbXBsYXRlIiwiTWVzc2FnZUl0ZW0iLCJ1bmRlZmluZWQiLCJjb3VudGVyIiwicGF0aCIsInRpdGxlIiwic3VidGl0bGUiLCJsb25ndGV4dFVybCIsInR5cGUiLCJkZXNjcmlwdGlvbiIsIm1hcmt1cERlc2NyaXB0aW9uIiwiTWVzc2FnZVZpZXciLCJzaG93RGV0YWlsc1BhZ2VIZWFkZXIiLCJpdGVtU2VsZWN0IiwiaXRlbXMiLCJ0ZW1wbGF0ZSIsIkJ1dHRvbiIsImljb24iLCJJY29uUG9vbCIsImdldEljb25VUkkiLCJ2aXNpYmxlIiwicHJlc3MiLCJuYXZpZ2F0ZUJhY2siLCJzZXRNb2RlbCIsInNob3dVbmJvdW5kTWVzc2FnZXMiLCJhQ3VzdG9tTWVzc2FnZXMiLCJvQ29udGV4dCIsImJIYXNFdGFnTWVzc2FnZSIsImJTaG93Qm91bmRUcmFuc2l0aW9uIiwic2hvd0Vycm9ySW5BUEQiLCJiU2hvd01lc3NhZ2VCb3giLCJhVW5ib3VuZE1lc3NhZ2VzIiwiZ2V0TWVzc2FnZXMiLCJnZXRNZXNzYWdlTWFuYWdlciIsInNIaWdoZXN0UHJpb3JpdHkiLCJzSGlnaGVzdFByaW9yaXR5VGV4dCIsImFGaWx0ZXJzIiwiRmlsdGVyIiwib3BlcmF0b3IiLCJGaWx0ZXJPcGVyYXRvciIsIk5FIiwidmFsdWUxIiwic2hvd01lc3NhZ2VEaWFsb2ciLCJzaG93TWVzc2FnZUJveCIsImNvbmNhdCIsInB1c2giLCJFUSIsImZuQ2hlY2tDb250cm9sSWRJbkRpYWxvZyIsImFDb250cm9sSWRzIiwiaW5kZXgiLCJJbmZpbml0eSIsIm9Db250cm9sIiwiYnlJZCIsImVycm9yRmllbGRDb250cm9sIiwiZmllbGRSYW5raW5EaWFsb2ciLCJEaWFsb2ciLCJnZXRQYXJlbnQiLCJmaW5kRWxlbWVudHMiLCJpbmRleE9mIiwiZm9jdXMiLCJ0ZXN0IiwiY2FzZVNlbnNpdGl2ZSIsIm1lc3NhZ2VDb2RlIiwiY29kZSIsIk1lc3NhZ2UiLCJtZXNzYWdlIiwidGV4dCIsInBlcnNpc3RlbnQiLCJKU09OTW9kZWwiLCJnZXRDb2RlIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJhQ3VycmVudENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwiSXNBY3RpdmVFbnRpdHkiLCJjdXJyZW50Q29udGV4dCIsImV4aXN0aW5nTWVzc2FnZXMiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhIiwib1VuaXF1ZU9iaiIsImFNb2RlbERhdGFBcnJheSIsImZpbHRlciIsIm9iaiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwicmVqZWN0IiwidGhlbiIsIm1lc3NhZ2VIYXNFVGFnIiwib01lc3NhZ2VPYmplY3QiLCJyZXNpemFibGUiLCJlbmRCdXR0b24iLCJyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsImN1c3RvbUhlYWRlciIsIkJhciIsImNvbnRlbnRNaWRkbGUiLCJUZXh0IiwiY29udGVudExlZnQiLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwidmVydGljYWxTY3JvbGxpbmciLCJhZnRlckNsb3NlIiwiY2FsbCIsImFkZENvbnRlbnQiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJCdXR0b25UeXBlIiwic2V0QmVnaW5CdXR0b24iLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJyZWZyZXNoIiwiRW1waGFzaXplZCIsImRlc3Ryb3lCZWdpbkJ1dHRvbiIsImdldEl0ZW1zIiwiZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nIiwic2V0U3RhdGUiLCJnZXRDdXN0b21IZWFkZXIiLCJnZXRDb250ZW50TWlkZGxlIiwic2V0VGV4dCIsIm9wZW4iLCJjYXRjaCIsInRlY2huaWNhbERldGFpbHMiLCJvcmlnaW5hbE1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0U3RyaW5nIiwicmV0cnlBZnRlck1lc3NhZ2UiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImdldE1lc3NhZ2UiLCJmb3JtYXR0ZWRUZXh0IiwiRm9ybWF0dGVkVGV4dCIsImh0bWxUZXh0IiwiTWVzc2FnZUJveCIsImVycm9yIiwib25DbG9zZSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsInNQYXRoVG9CZVJlbW92ZWQiLCJnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwiLCJvTWVzc2FnZU1vZGVsIiwibGlzdEJpbmRpbmciLCJTdGFydHNXaXRoIiwibWFwIiwiYkJvdW5kTWVzc2FnZXMiLCJiVHJhbnNpdGlvbk9ubHkiLCJhVHJhbnNpdGlvbk1lc3NhZ2VzIiwiYU1lc3NhZ2VzVG9CZURlbGV0ZWQiLCJtZXNzYWdlSGFuZGxpbmciLCJtb2RpZnlFVGFnTWVzc2FnZXNPbmx5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBbUJBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUE1QjtBQUNBLE1BQUlFLFlBQW1CLEdBQUcsRUFBMUI7QUFDQSxNQUFJQyxnQkFBdUIsR0FBRyxFQUE5QjtBQUNBLE1BQUlDLGlCQUF3QixHQUFHLEVBQS9CO0FBQ0EsTUFBSUMsT0FBSjtBQUNBLE1BQUlDLFdBQUo7QUFDQSxNQUFJQyxZQUFKOztBQW9CQSxXQUFTQyx3QkFBVCxHQUFvQztBQUNuQyxRQUFJQyxrQkFBSixD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QkFBbUIsQ0FBQ2pNLENBQUQsQ0FBbkIsQ0FBdUIrRyxPQUF2QixlQUFzQzNHLGVBQWUsQ0FBQ1csT0FBaEIsQ0FBd0IsNkNBQXhCLENBQXRDLFNBQ0NrTCxtQkFBbUIsQ0FBQ2pNLENBQUQsQ0FBbkIsQ0FBdUIrRyxPQUR4QjtBQUdBO0FBQ0Q7O0FBQ0QsV0FBT2tGLG1CQUFQO0FBQ0E7O0FBQ0QsV0FBU1Qsd0JBQVQsQ0FBa0NPLGNBQWxDLEVBQXVETixnQkFBdkQsRUFBa0Y7QUFDakYsUUFBTVMsb0JBQW9CLEdBQUdwSCxXQUFXLENBQUNpSCxjQUFELEVBQWlCLElBQWpCLEVBQXVCTixnQkFBdkIsQ0FBeEM7O0FBRUEsUUFBSVMsb0JBQW9CLENBQUN4TSxNQUFyQixHQUE4QixDQUFsQyxFQUFxQztBQUNwQ3FDLE1BQUFBLElBQUksQ0FBQ2dELGlCQUFMLEdBQXlCL0QsY0FBekIsQ0FBd0NrTCxvQkFBeEM7QUFDQTtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxNQUFNQyxlQUFvQyxHQUFHO0FBQzVDckgsSUFBQUEsV0FBVyxFQUFFQSxXQUQrQjtBQUU1Q1IsSUFBQUEsbUJBQW1CLEVBQUVBLG1CQUZ1QjtBQUc1QzVDLElBQUFBLCtCQUErQixFQUFFQSwrQkFIVztBQUk1Q21ILElBQUFBLDZCQUE2QixFQUFFQSw2QkFKYTtBQUs1Q3VELElBQUFBLHNCQUFzQixFQUFFbE0sd0JBTG9CO0FBTTVDeUIsSUFBQUEsb0JBQW9CLEVBQUVBLG9CQU5zQjtBQU81Q2lCLElBQUFBLDJCQUEyQixFQUFFQTtBQVBlLEdBQTdDO1NBVWV1SixlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFyIGZyb20gXCJzYXAvbS9CYXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRm9ybWF0dGVkVGV4dCBmcm9tIFwic2FwL20vRm9ybWF0dGVkVGV4dFwiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE1lc3NhZ2VWaWV3IGZyb20gXCJzYXAvbS9NZXNzYWdlVmlld1wiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBJY29uUG9vbCBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblBvb2xcIjtcbmltcG9ydCBDb3JlTGliIGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29yZUV4IH0gZnJvbSBcInR5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuXG5jb25zdCBNZXNzYWdlVHlwZSA9IENvcmVMaWIuTWVzc2FnZVR5cGU7XG5sZXQgYU1lc3NhZ2VMaXN0OiBhbnlbXSA9IFtdO1xubGV0IGFNZXNzYWdlRGF0YUxpc3Q6IGFueVtdID0gW107XG5sZXQgYVJlc29sdmVGdW5jdGlvbnM6IGFueVtdID0gW107XG5sZXQgb0RpYWxvZzogRGlhbG9nO1xubGV0IG9CYWNrQnV0dG9uOiBCdXR0b247XG5sZXQgb01lc3NhZ2VWaWV3OiBNZXNzYWdlVmlldztcblxuZXhwb3J0IHR5cGUgbWVzc2FnZUhhbmRsaW5nVHlwZSA9IHtcblx0Z2V0TWVzc2FnZXM6IChiQm91bmRNZXNzYWdlcz86IGFueSwgYlRyYW5zaXRpb25Pbmx5PzogYW55KSA9PiBhbnlbXTtcblx0c2hvd1VuYm91bmRNZXNzYWdlczogKFxuXHRcdGFDdXN0b21NZXNzYWdlcz86IGFueVtdLFxuXHRcdG9Db250ZXh0PzogYW55LFxuXHRcdGJIYXNFdGFnTWVzc2FnZT86IGJvb2xlYW4sXG5cdFx0YlNob3dCb3VuZFRyYW5zaXRpb24/OiBib29sZWFuLFxuXHRcdHNob3dFcnJvckluQVBEPzogYm9vbGVhbixcblx0XHRiU2hvd01lc3NhZ2VCb3g/OiBib29sZWFuLFxuXHRcdGNvbmN1cnJlbnRFZGl0RmxhZz86IGJvb2xlYW5cblx0KSA9PiBQcm9taXNlPGFueT47XG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6ICgpID0+IHZvaWQ7XG5cdG1vZGlmeUVUYWdNZXNzYWdlc09ubHk6IChvTWVzc2FnZU1hbmFnZXI6IGFueSwgb1Jlc291cmNlQnVuZGxlOiBhbnksIGNvbmN1cnJlbnRFZGl0RmxhZzogYm9vbGVhbiB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbjtcblx0cmVtb3ZlQm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IChzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSA9PiB2b2lkO1xuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogKG9NZXNzYWdlOiBhbnksIGJNZXNzYWdlRGlhbG9nPzogYW55KSA9PiBhbnk7XG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbikgPT4gYW55O1xufTtcblxuZnVuY3Rpb24gZm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkge1xuXHRsZXQgc1ByZXZpb3VzR3JvdXBOYW1lOiBzdHJpbmc7XG5cblx0Ly8gSW5zZXJ0IHRlY2huaWNhbCBkZXRhaWwgaWYgaXQgZXhpc3RzXG5cdGZ1bmN0aW9uIGluc2VydERldGFpbChvUHJvcGVydHk6IGFueSkge1xuXHRcdHJldHVybiBvUHJvcGVydHkucHJvcGVydHlcblx0XHRcdD8gXCIoICR7XCIgK1xuXHRcdFx0XHRcdG9Qcm9wZXJ0eS5wcm9wZXJ0eSArXG5cdFx0XHRcdFx0J30gPyAoXCI8cD4nICtcblx0XHRcdFx0XHRvUHJvcGVydHkucHJvcGVydHkuc3Vic3RyKE1hdGgubWF4KG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi9cIiksIG9Qcm9wZXJ0eS5wcm9wZXJ0eS5sYXN0SW5kZXhPZihcIi5cIikpICsgMSkgK1xuXHRcdFx0XHRcdCcgOiBcIiArICcgK1xuXHRcdFx0XHRcdFwiJHtcIiArXG5cdFx0XHRcdFx0b1Byb3BlcnR5LnByb3BlcnR5ICtcblx0XHRcdFx0XHQnfSArIFwiPC9wPlwiKSA6IFwiXCIgKSdcblx0XHRcdDogXCJcIjtcblx0fVxuXHQvLyBJbnNlcnQgZ3JvdXBuYW1lIGlmIGl0IGV4aXN0c1xuXHRmdW5jdGlvbiBpbnNlcnRHcm91cE5hbWUob1Byb3BlcnR5OiBhbnkpIHtcblx0XHRsZXQgc0hUTUwgPSBcIlwiO1xuXHRcdGlmIChvUHJvcGVydHkuZ3JvdXBOYW1lICYmIG9Qcm9wZXJ0eS5wcm9wZXJ0eSAmJiBvUHJvcGVydHkuZ3JvdXBOYW1lICE9PSBzUHJldmlvdXNHcm91cE5hbWUpIHtcblx0XHRcdHNIVE1MICs9IFwiKCAke1wiICsgb1Byb3BlcnR5LnByb3BlcnR5ICsgJ30gPyBcIjxicj48aDM+JyArIG9Qcm9wZXJ0eS5ncm91cE5hbWUgKyAnPC9oMz5cIiA6IFwiXCIgKSArICc7XG5cdFx0XHRzUHJldmlvdXNHcm91cE5hbWUgPSBvUHJvcGVydHkuZ3JvdXBOYW1lO1xuXHRcdH1cblx0XHRyZXR1cm4gc0hUTUw7XG5cdH1cblxuXHQvLyBMaXN0IG9mIHRlY2huaWNhbCBkZXRhaWxzIHRvIGJlIHNob3duXG5cdGZ1bmN0aW9uIGdldFBhdGhzKCkge1xuXHRcdGNvbnN0IHNURCA9IFwidGVjaG5pY2FsRGV0YWlsc1wiOyAvLyBuYW1lIG9mIHByb3BlcnR5IGluIG1lc3NhZ2UgbW9kZWwgZGF0YSBmb3IgdGVjaG5pY2FsIGRldGFpbHNcblx0XHRyZXR1cm4gW1xuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIlwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vc3RhdHVzYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIlwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vc3RhdHVzVGV4dGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJBcHBsaWNhdGlvblwiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvQFNBUF9fY29tbW9uLkFwcGxpY2F0aW9uL0NvbXBvbmVudElkYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZUlkYCB9LFxuXHRcdFx0eyBcImdyb3VwTmFtZVwiOiBcIkFwcGxpY2F0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uQXBwbGljYXRpb24vU2VydmljZVJlcG9zaXRvcnlgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiQXBwbGljYXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5BcHBsaWNhdGlvbi9TZXJ2aWNlVmVyc2lvbmAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FcnJvclJlc29sdXRpb24vQW5hbHlzaXNgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL05vdGVgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uRXJyb3JSZXNvbHV0aW9uL0RldGFpbGVkTm90ZWAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5FeGNlcHRpb25DYXRlZ29yeWAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJFcnJvclJlc29sdXRpb25cIiwgXCJwcm9wZXJ0eVwiOiBgJHtzVER9L2Vycm9yL0BTQVBfX2NvbW1vbi5UaW1lU3RhbXBgIH0sXG5cdFx0XHR7IFwiZ3JvdXBOYW1lXCI6IFwiRXJyb3JSZXNvbHV0aW9uXCIsIFwicHJvcGVydHlcIjogYCR7c1REfS9lcnJvci9AU0FQX19jb21tb24uVHJhbnNhY3Rpb25JZGAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJNZXNzYWdlc1wiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvY29kZWAgfSxcblx0XHRcdHsgXCJncm91cE5hbWVcIjogXCJNZXNzYWdlc1wiLCBcInByb3BlcnR5XCI6IGAke3NURH0vZXJyb3IvbWVzc2FnZWAgfVxuXHRcdF07XG5cdH1cblxuXHRsZXQgc0hUTUwgPSBcIk9iamVjdC5rZXlzKFwiICsgXCIke3RlY2huaWNhbERldGFpbHN9XCIgKyAnKS5sZW5ndGggPiAwID8gXCI8aDI+VGVjaG5pY2FsIERldGFpbHM8L2gyPlwiIDogXCJcIiAnO1xuXHRnZXRQYXRocygpLmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eTogeyBncm91cE5hbWU6IHN0cmluZzsgcHJvcGVydHk6IHN0cmluZyB9KSB7XG5cdFx0c0hUTUwgPSBgJHtzSFRNTCArIGluc2VydEdyb3VwTmFtZShvUHJvcGVydHkpfSR7aW5zZXJ0RGV0YWlsKG9Qcm9wZXJ0eSl9ICsgYDtcblx0fSk7XG5cdHJldHVybiBzSFRNTDtcbn1cbmZ1bmN0aW9uIGZuRm9ybWF0RGVzY3JpcHRpb24oKSB7XG5cdHJldHVybiBcIigke1wiICsgJ2Rlc2NyaXB0aW9ufSA/IChcIjxoMj5EZXNjcmlwdGlvbjwvaDI+XCIgKyAkeycgKyAnZGVzY3JpcHRpb259KSA6IFwiXCIpJztcbn1cbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgaGlnaGVzdCBwcmlvcml0eSBtZXNzYWdlIHR5cGUoRXJyb3IvV2FybmluZy9TdWNjZXNzL0luZm9ybWF0aW9uKSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZy5mbkdldEhpZ2hlc3RNZXNzYWdlUHJpb3JpdHlcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLm1lc3NhZ2VIYW5kbGluZ1xuICogQHBhcmFtIFthTWVzc2FnZXNdIE1lc3NhZ2VzIGxpc3RcbiAqIEByZXR1cm5zIEhpZ2hlc3QgcHJpb3JpdHkgbWVzc2FnZSBmcm9tIHRoZSBhdmFpbGFibGUgbWVzc2FnZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gZm5HZXRIaWdoZXN0TWVzc2FnZVByaW9yaXR5KGFNZXNzYWdlczogYW55W10pIHtcblx0bGV0IHNNZXNzYWdlUHJpb3JpdHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRjb25zdCBpTGVuZ3RoID0gYU1lc3NhZ2VzLmxlbmd0aDtcblx0Y29uc3Qgb01lc3NhZ2VDb3VudDogYW55ID0geyBFcnJvcjogMCwgV2FybmluZzogMCwgU3VjY2VzczogMCwgSW5mb3JtYXRpb246IDAgfTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGlMZW5ndGg7IGkrKykge1xuXHRcdCsrb01lc3NhZ2VDb3VudFthTWVzc2FnZXNbaV0uZ2V0VHlwZSgpXTtcblx0fVxuXHRpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5FcnJvcl0gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKG9NZXNzYWdlQ291bnRbTWVzc2FnZVR5cGUuV2FybmluZ10gPiAwKSB7XG5cdFx0c01lc3NhZ2VQcmlvcml0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAob01lc3NhZ2VDb3VudFtNZXNzYWdlVHlwZS5TdWNjZXNzXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fSBlbHNlIGlmIChvTWVzc2FnZUNvdW50W01lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXSA+IDApIHtcblx0XHRzTWVzc2FnZVByaW9yaXR5ID0gTWVzc2FnZVR5cGUuSW5mb3JtYXRpb247XG5cdH1cblx0cmV0dXJuIHNNZXNzYWdlUHJpb3JpdHk7XG59XG4vLyBmdW5jdGlvbiB3aGljaCBtb2RpZnkgZS1UYWcgbWVzc2FnZXMgb25seS5cbi8vIHJldHVybnMgOiB0cnVlLCBpZiBhbnkgZS1UYWcgbWVzc2FnZSBpcyBtb2RpZmllZCwgb3RoZXJ3aXNlIGZhbHNlLlxuZnVuY3Rpb24gZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5KG9NZXNzYWdlTWFuYWdlcjogYW55LCBvUmVzb3VyY2VCdW5kbGU6IGFueSwgY29uY3VycmVudEVkaXRGbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XG5cdGNvbnN0IGFNZXNzYWdlcyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5nZXRPYmplY3QoXCIvXCIpO1xuXHRsZXQgYk1lc3NhZ2VzTW9kaWZpZWQgPSBmYWxzZTtcblx0bGV0IHNFdGFnTWVzc2FnZSA9IFwiXCI7XG5cdGFNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55LCBpOiBhbnkpIHtcblx0XHRjb25zdCBvVGVjaG5pY2FsRGV0YWlscyA9IG9NZXNzYWdlLmdldFRlY2huaWNhbERldGFpbHMoKTtcblx0XHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNDEyKSB7XG5cdFx0XHRpZiAob1RlY2huaWNhbERldGFpbHMuaXNDb25jdXJyZW50TW9kaWZpY2F0aW9uICYmIGNvbmN1cnJlbnRFZGl0RmxhZykge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPVxuXHRcdFx0XHRcdHNFdGFnTWVzc2FnZSB8fCBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9FVEFHX1RFQ0hOSUNBTF9JU1NVRVNfQ09OQ1VSUkVOVF9NT0RJRklDQVRJT05cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRXRhZ01lc3NhZ2UgPSBzRXRhZ01lc3NhZ2UgfHwgb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0FQUF9DT01QT05FTlRfU0FQRkVfRVRBR19URUNITklDQUxfSVNTVUVTXCIpO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFNZXNzYWdlc1tpXSk7XG5cdFx0XHRvTWVzc2FnZS5zZXRNZXNzYWdlKHNFdGFnTWVzc2FnZSk7XG5cdFx0XHRvTWVzc2FnZS50YXJnZXQgPSBcIlwiO1xuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLmFkZE1lc3NhZ2VzKG9NZXNzYWdlKTtcblx0XHRcdGJNZXNzYWdlc01vZGlmaWVkID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gYk1lc3NhZ2VzTW9kaWZpZWQ7XG59XG4vLyBEaWFsb2cgY2xvc2UgSGFuZGxpbmdcbmZ1bmN0aW9uIGRpYWxvZ0Nsb3NlSGFuZGxlcigpIHtcblx0b0RpYWxvZy5jbG9zZSgpO1xuXHRvQmFja0J1dHRvbi5zZXRWaXNpYmxlKGZhbHNlKTtcblx0YU1lc3NhZ2VMaXN0ID0gW107XG5cdGNvbnN0IG9NZXNzYWdlRGlhbG9nTW9kZWw6IGFueSA9IG9NZXNzYWdlVmlldy5nZXRNb2RlbCgpO1xuXHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdG9NZXNzYWdlRGlhbG9nTW9kZWwuc2V0RGF0YSh7fSk7XG5cdH1cblx0cmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xufVxuZnVuY3Rpb24gZ2V0UmV0cnlBZnRlck1lc3NhZ2Uob01lc3NhZ2U6IGFueSwgYk1lc3NhZ2VEaWFsb2c/OiBhbnkpIHtcblx0Y29uc3QgZE5vdyA9IG5ldyBEYXRlKCk7XG5cdGNvbnN0IG9UZWNobmljYWxEZXRhaWxzID0gb01lc3NhZ2UuZ2V0VGVjaG5pY2FsRGV0YWlscygpO1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRsZXQgc1JldHJ5QWZ0ZXJNZXNzYWdlO1xuXHRpZiAob1RlY2huaWNhbERldGFpbHMgJiYgb1RlY2huaWNhbERldGFpbHMuaHR0cFN0YXR1cyA9PT0gNTAzICYmIG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRjb25zdCBkUmV0cnlBZnRlciA9IG9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXI7XG5cdFx0bGV0IG9EYXRlRm9ybWF0O1xuXHRcdGlmIChkTm93LmdldEZ1bGxZZWFyKCkgIT09IGRSZXRyeUFmdGVyLmdldEZ1bGxZZWFyKCkpIHtcblx0XHRcdC8vZGlmZmVyZW50IHllYXJzXG5cdFx0XHRvRGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSh7XG5cdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCwgeXl5eSAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0fSk7XG5cdFx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JcIiwgW29EYXRlRm9ybWF0LmZvcm1hdChkUmV0cnlBZnRlcildKTtcblx0XHR9IGVsc2UgaWYgKGROb3cuZ2V0RnVsbFllYXIoKSA9PSBkUmV0cnlBZnRlci5nZXRGdWxsWWVhcigpKSB7XG5cdFx0XHQvL3NhbWUgeWVhclxuXHRcdFx0aWYgKGJNZXNzYWdlRGlhbG9nKSB7XG5cdFx0XHRcdC8vbGVzcyB0aGFuIDIgbWluXG5cdFx0XHRcdHNSZXRyeUFmdGVyTWVzc2FnZSA9IGAke29SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19USVRMRVwiKX0gJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfREVTQ1wiXG5cdFx0XHRcdCl9YDtcblx0XHRcdH0gZWxzZSBpZiAoZE5vdy5nZXRNb250aCgpICE9PSBkUmV0cnlBZnRlci5nZXRNb250aCgpIHx8IGROb3cuZ2V0RGF0ZSgpICE9PSBkUmV0cnlBZnRlci5nZXREYXRlKCkpIHtcblx0XHRcdFx0b0RhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2Uoe1xuXHRcdFx0XHRcdHBhdHRlcm46IFwiTU1NTSBkZCAnYXQnIGhoOm1tIGFcIlxuXHRcdFx0XHR9KTsgLy9kaWZmZXJlbnQgbW9udGhzIG9yIGRpZmZlcmVudCBkYXlzIG9mIHNhbWUgbW9udGhcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SXCIsIFtvRGF0ZUZvcm1hdC5mb3JtYXQoZFJldHJ5QWZ0ZXIpXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3NhbWUgZGF5XG5cdFx0XHRcdG9EYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBcImhoOm1tIGFcIlxuXHRcdFx0XHR9KTtcblx0XHRcdFx0c1JldHJ5QWZ0ZXJNZXNzYWdlID0gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfNTAzX0VSUk9SX0RBWVwiLCBbb0RhdGVGb3JtYXQuZm9ybWF0KGRSZXRyeUFmdGVyKV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmIChvVGVjaG5pY2FsRGV0YWlscyAmJiBvVGVjaG5pY2FsRGV0YWlscy5odHRwU3RhdHVzID09PSA1MDMgJiYgIW9UZWNobmljYWxEZXRhaWxzLnJldHJ5QWZ0ZXIpIHtcblx0XHRzUmV0cnlBZnRlck1lc3NhZ2UgPSBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfRVJST1JfTk9fUkVUUllfQUZURVJcIik7XG5cdH1cblx0cmV0dXJuIHNSZXRyeUFmdGVyTWVzc2FnZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nKG9NZXNzYWdlRGlhbG9nTW9kZWw6IEpTT05Nb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdzogYm9vbGVhbikge1xuXHRsZXQgb01lc3NhZ2VUZW1wbGF0ZTogTWVzc2FnZUl0ZW07XG5cdGlmICghYlN0cmljdEhhbmRsaW5nRmxvdykge1xuXHRcdG9NZXNzYWdlVGVtcGxhdGUgPSBuZXcgTWVzc2FnZUl0ZW0odW5kZWZpbmVkLCB7XG5cdFx0XHRjb3VudGVyOiB7IHBhdGg6IFwiY291bnRlclwiIH0sXG5cdFx0XHR0aXRsZTogXCJ7bWVzc2FnZX1cIixcblx0XHRcdHN1YnRpdGxlOiBcInthZGRpdGlvbmFsVGV4dH1cIixcblx0XHRcdGxvbmd0ZXh0VXJsOiBcIntkZXNjcmlwdGlvblVybH1cIixcblx0XHRcdHR5cGU6IHsgcGF0aDogXCJ0eXBlXCIgfSxcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIns9ICR7XCIgK1xuXHRcdFx0XHRcImRlc2NyaXB0aW9ufSB8fCAke3RlY2huaWNhbERldGFpbHN9ID8gXCIgK1xuXHRcdFx0XHQnXCI8aHRtbD48Ym9keT5cIiArICcgK1xuXHRcdFx0XHRmbkZvcm1hdERlc2NyaXB0aW9uKCkgK1xuXHRcdFx0XHRcIiArIFwiICtcblx0XHRcdFx0Zm5Gb3JtYXRUZWNobmljYWxEZXRhaWxzKCkgK1xuXHRcdFx0XHQnXCI8L2JvZHk+PC9odG1sPlwiJyArXG5cdFx0XHRcdCcgOiBcIlwiIH0nLFxuXHRcdFx0bWFya3VwRGVzY3JpcHRpb246IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvTWVzc2FnZVRlbXBsYXRlID0gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBcInttZXNzYWdlfVwiLFxuXHRcdFx0dHlwZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRsb25ndGV4dFVybDogXCJ7ZGVzY3JpcHRpb25Vcmx9XCJcblx0XHR9KTtcblx0fVxuXHRvTWVzc2FnZVZpZXcgPSBuZXcgTWVzc2FnZVZpZXcoe1xuXHRcdHNob3dEZXRhaWxzUGFnZUhlYWRlcjogZmFsc2UsXG5cdFx0aXRlbVNlbGVjdDogZnVuY3Rpb24gKCkge1xuXHRcdFx0b0JhY2tCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHR9LFxuXHRcdGl0ZW1zOiB7XG5cdFx0XHRwYXRoOiBcIi9cIixcblx0XHRcdHRlbXBsYXRlOiBvTWVzc2FnZVRlbXBsYXRlXG5cdFx0fVxuXHR9KTtcblx0b0JhY2tCdXR0b24gPVxuXHRcdG9CYWNrQnV0dG9uIHx8XG5cdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRpY29uOiBJY29uUG9vbC5nZXRJY29uVVJJKFwibmF2LWJhY2tcIiksXG5cdFx0XHR2aXNpYmxlOiBmYWxzZSxcblx0XHRcdHByZXNzOiBmdW5jdGlvbiAodGhpczogQnV0dG9uKSB7XG5cdFx0XHRcdG9NZXNzYWdlVmlldy5uYXZpZ2F0ZUJhY2soKTtcblx0XHRcdFx0dGhpcy5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0Ly8gVXBkYXRlIHByb3BlciBFVGFnIE1pc21hdGNoIGVycm9yXG5cdG9NZXNzYWdlVmlldy5zZXRNb2RlbChvTWVzc2FnZURpYWxvZ01vZGVsKTtcblx0cmV0dXJuIHtcblx0XHRvTWVzc2FnZVZpZXcsXG5cdFx0b0JhY2tCdXR0b25cblx0fTtcbn1cblxuZnVuY3Rpb24gc2hvd1VuYm91bmRNZXNzYWdlcyhcblx0dGhpczogbWVzc2FnZUhhbmRsaW5nVHlwZSxcblx0YUN1c3RvbU1lc3NhZ2VzPzogYW55W10sXG5cdG9Db250ZXh0PzogYW55LFxuXHRiSGFzRXRhZ01lc3NhZ2U/OiBib29sZWFuLFxuXHRiU2hvd0JvdW5kVHJhbnNpdGlvbj86IGJvb2xlYW4sXG5cdHNob3dFcnJvckluQVBEPzogYm9vbGVhbixcblx0YlNob3dNZXNzYWdlQm94PzogYm9vbGVhbixcblx0Y29uY3VycmVudEVkaXRGbGFnPzogYm9vbGVhblxuKTogUHJvbWlzZTxhbnk+IHtcblx0bGV0IGFVbmJvdW5kTWVzc2FnZXMgPSB0aGlzLmdldE1lc3NhZ2VzKCk7XG5cdGNvbnN0IG9NZXNzYWdlTWFuYWdlciA9IENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKTtcblx0bGV0IHNIaWdoZXN0UHJpb3JpdHk7XG5cdGxldCBzSGlnaGVzdFByaW9yaXR5VGV4dDtcblx0Y29uc3QgYUZpbHRlcnMgPSBbXG5cdFx0bmV3IEZpbHRlcih7IHBhdGg6IFwiY29kZVwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHZhbHVlMTogbnVsbCB9KSxcblx0XHRuZXcgRmlsdGVyKHsgcGF0aDogXCJwZXJzaXN0ZW50XCIsIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5ORSwgdmFsdWUxOiBmYWxzZSB9KVxuXHRdO1xuXHRsZXQgc2hvd01lc3NhZ2VEaWFsb2c6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZSxcblx0XHRzaG93TWVzc2FnZUJveDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuXG5cdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdGFVbmJvdW5kTWVzc2FnZXMgPSBhVW5ib3VuZE1lc3NhZ2VzLmNvbmNhdChnZXRNZXNzYWdlcyh0cnVlLCB0cnVlKSk7XG5cdFx0Ly8gd2Ugb25seSB3YW50IHRvIHNob3cgYm91bmQgdHJhbnNpdGlvbiBtZXNzYWdlcyBub3QgYm91bmQgc3RhdGUgbWVzc2FnZXMgaGVuY2UgYWRkIGEgZmlsdGVyIGZvciB0aGUgc2FtZVxuXHRcdGFGaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IHBhdGg6IFwicGVyc2lzdGVudFwiLCBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuRVEsIHZhbHVlMTogdHJ1ZSB9KSk7XG5cdFx0Y29uc3QgZm5DaGVja0NvbnRyb2xJZEluRGlhbG9nID0gZnVuY3Rpb24gKGFDb250cm9sSWRzOiBhbnkpIHtcblx0XHRcdGxldCBpbmRleCA9IEluZmluaXR5LFxuXHRcdFx0XHRvQ29udHJvbCA9IENvcmUuYnlJZChhQ29udHJvbElkc1swXSkgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdGNvbnN0IGVycm9yRmllbGRDb250cm9sID0gQ29yZS5ieUlkKGFDb250cm9sSWRzWzBdKSBhcyBDb250cm9sO1xuXHRcdFx0d2hpbGUgKG9Db250cm9sKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkUmFua2luRGlhbG9nID1cblx0XHRcdFx0XHRvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZ1xuXHRcdFx0XHRcdFx0PyAoZXJyb3JGaWVsZENvbnRyb2wuZ2V0UGFyZW50KCkgYXMgYW55KS5maW5kRWxlbWVudHModHJ1ZSkuaW5kZXhPZihlcnJvckZpZWxkQ29udHJvbClcblx0XHRcdFx0XHRcdDogSW5maW5pdHk7XG5cdFx0XHRcdGlmIChvQ29udHJvbCBpbnN0YW5jZW9mIERpYWxvZykge1xuXHRcdFx0XHRcdGlmIChpbmRleCA+IGZpZWxkUmFua2luRGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRpbmRleCA9IGZpZWxkUmFua2luRGlhbG9nO1xuXHRcdFx0XHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZGlhbG9nJ3MgY29udHJvbFxuXHRcdFx0XHRcdFx0ZXJyb3JGaWVsZENvbnRyb2wuZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gbWVzc2FnZXMgd2l0aCB0YXJnZXQgaW5zaWRlIHNhcC5tLkRpYWxvZyBzaG91bGQgbm90IGJyaW5nIHVwIHRoZSBtZXNzYWdlIGRpYWxvZ1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvQ29udHJvbCA9IG9Db250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fTtcblx0XHRhRmlsdGVycy5wdXNoKFxuXHRcdFx0bmV3IEZpbHRlcih7XG5cdFx0XHRcdHBhdGg6IFwiY29udHJvbElkc1wiLFxuXHRcdFx0XHR0ZXN0OiBmbkNoZWNrQ29udHJvbElkSW5EaWFsb2csXG5cdFx0XHRcdGNhc2VTZW5zaXRpdmU6IHRydWVcblx0XHRcdH0pXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBvbmx5IHVuYm91bmQgbWVzc2FnZXMgaGF2ZSB0byBiZSBzaG93biBzbyBhZGQgZmlsdGVyIGFjY29yZGluZ2x5XG5cdFx0YUZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHsgcGF0aDogXCJ0YXJnZXRcIiwgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLCB2YWx1ZTE6IFwiXCIgfSkpO1xuXHR9XG5cdGlmIChhQ3VzdG9tTWVzc2FnZXMgJiYgYUN1c3RvbU1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdGFDdXN0b21NZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlQ29kZSA9IG9NZXNzYWdlLmNvZGUgPyBvTWVzc2FnZS5jb2RlIDogXCJcIjtcblx0XHRcdG9NZXNzYWdlTWFuYWdlci5hZGRNZXNzYWdlcyhcblx0XHRcdFx0bmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG9NZXNzYWdlLnRleHQsXG5cdFx0XHRcdFx0dHlwZTogb01lc3NhZ2UudHlwZSxcblx0XHRcdFx0XHR0YXJnZXQ6IFwiXCIsXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlOiBtZXNzYWdlQ29kZVxuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHRcdC8vVGhlIHRhcmdldCBhbmQgcGVyc2lzdGVudCBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlIGFyZSBoYXJkY29kZWQgYXMgXCJcIiBhbmQgdHJ1ZSBiZWNhdXNlIHRoZSBmdW5jdGlvbiBkZWFscyB3aXRoIG9ubHkgdW5ib3VuZCBtZXNzYWdlcy5cblx0XHR9KTtcblx0fVxuXHRjb25zdCBvTWVzc2FnZURpYWxvZ01vZGVsID0gKG9NZXNzYWdlVmlldyAmJiAob01lc3NhZ2VWaWV3LmdldE1vZGVsKCkgYXMgSlNPTk1vZGVsKSkgfHwgbmV3IEpTT05Nb2RlbCgpO1xuXHRpZiAoYVVuYm91bmRNZXNzYWdlcy5sZW5ndGggPT09IDEgJiYgKGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0Q29kZSgpID09PSBcIjUwM1wiIHx8IGJTaG93TWVzc2FnZUJveCkpIHtcblx0XHRpZiAoYVVuYm91bmRNZXNzYWdlc1swXS5nZXRDb2RlKCkgIT09IFwiNTAzXCIpIHtcblx0XHRcdHNob3dNZXNzYWdlQm94ID0gIXNob3dFcnJvckluQVBEO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaG93TWVzc2FnZUJveCA9IHRydWU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IG9NZXNzYWdlTWFuYWdlci5nZXRNZXNzYWdlTW9kZWwoKS5iaW5kTGlzdChcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFGaWx0ZXJzKSxcblx0XHRcdGFDdXJyZW50Q29udGV4dHMgPSBvTGlzdEJpbmRpbmcuZ2V0Q3VycmVudENvbnRleHRzKCk7XG5cdFx0aWYgKGFDdXJyZW50Q29udGV4dHMgJiYgYUN1cnJlbnRDb250ZXh0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBzaG93IGRpYWxvZyBpbmNhc2UgdGhlcmUgYXJlIG5vIGVycm9ycyB0byBzaG93XG5cdFx0XHRpZiAob0NvbnRleHQgJiYgb0NvbnRleHQ/LmdldE9iamVjdCgpPy5Jc0FjdGl2ZUVudGl0eSAmJiAhc2hvd0Vycm9ySW5BUEQpIHtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2hvd01lc3NhZ2VEaWFsb2cgPSAhc2hvd0Vycm9ySW5BUEQ7XG5cdFx0XHR9IC8vIGlmIGZhbHNlLCBzaG93IG1lc3NhZ2VzIGluIGRpYWxvZ1xuXHRcdFx0Ly8gQXMgZml0ZXJpbmcgaGFzIGFscmVhZHkgaGFwcGVuZWQgaGVyZSBoZW5jZVxuXHRcdFx0Ly8gdXNpbmcgdGhlIG1lc3NhZ2UgbW9kZWwgYWdhaW4gZm9yIHRoZSBtZXNzYWdlIGRpYWxvZyB2aWV3IGFuZCB0aGVuIGZpbHRlcmluZyBvbiB0aGF0IGJpbmRpbmcgYWdhaW4gaXMgdW5uZWNlc3NhcnkuXG5cdFx0XHQvLyBTbyB3ZSBjcmVhdGUgbmV3IGpzb24gbW9kZWwgdG8gdXNlIGZvciB0aGUgbWVzc2FnZSBkaWFsb2cgdmlldy5cblx0XHRcdGNvbnN0IGFNZXNzYWdlczogYW55W10gPSBbXTtcblx0XHRcdGFDdXJyZW50Q29udGV4dHMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudENvbnRleHQ6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvTWVzc2FnZSA9IGN1cnJlbnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRhTWVzc2FnZXMucHVzaChvTWVzc2FnZSk7XG5cdFx0XHRcdGFNZXNzYWdlRGF0YUxpc3QgPSBhTWVzc2FnZXM7XG5cdFx0XHR9KTtcblx0XHRcdC8vIGlmKGFNZXNzYWdlcy5sZW5ndGggPT09IDAgJiYgYU1lc3NhZ2VMaXN0Lmxlbmd0aCkge1xuXHRcdFx0Ly8gXHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1lc3NhZ2VzKTtcblx0XHRcdC8vIH1cblx0XHRcdGxldCBleGlzdGluZ01lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob01lc3NhZ2VEaWFsb2dNb2RlbC5nZXREYXRhKCkpKSB7XG5cdFx0XHRcdGV4aXN0aW5nTWVzc2FnZXMgPSBvTWVzc2FnZURpYWxvZ01vZGVsLmdldERhdGEoKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IG9VbmlxdWVPYmo6IGFueSA9IHt9O1xuXHRcdFx0bGV0IGFNb2RlbERhdGFBcnJheTogYW55W10gPSBbXTtcblx0XHRcdGFNb2RlbERhdGFBcnJheSA9IGFNZXNzYWdlRGF0YUxpc3QuY29uY2F0KGV4aXN0aW5nTWVzc2FnZXMpLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBlbnRyaWVzIGhhdmluZyBkdXBsaWNhdGUgbWVzc2FnZSBpZHNcblx0XHRcdFx0cmV0dXJuICFvVW5pcXVlT2JqW29iai5pZF0gJiYgKG9VbmlxdWVPYmpbb2JqLmlkXSA9IHRydWUpO1xuXHRcdFx0fSk7XG5cdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoYU1vZGVsRGF0YUFycmF5KTtcblx0XHR9XG5cdH1cblx0aWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAwICYmICFhQ3VzdG9tTWVzc2FnZXMgJiYgIWJIYXNFdGFnTWVzc2FnZSkge1xuXHRcdC8vIERvbid0IHNob3cgdGhlIHBvcHVwIGlmIHRoZXJlIGFyZSBubyB0cmFuc2llbnQgbWVzc2FnZXNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHR9IGVsc2UgaWYgKGFVbmJvdW5kTWVzc2FnZXMubGVuZ3RoID09PSAxICYmIGFVbmJvdW5kTWVzc2FnZXNbMF0uZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5TdWNjZXNzICYmICFhQ3VzdG9tTWVzc2FnZXMpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KGFVbmJvdW5kTWVzc2FnZXNbMF0ubWVzc2FnZSk7XG5cdFx0XHRpZiAob01lc3NhZ2VEaWFsb2dNb2RlbCkge1xuXHRcdFx0XHRvTWVzc2FnZURpYWxvZ01vZGVsLnNldERhdGEoe30pO1xuXHRcdFx0fVxuXHRcdFx0b01lc3NhZ2VNYW5hZ2VyLnJlbW92ZU1lc3NhZ2VzKGFVbmJvdW5kTWVzc2FnZXMpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKHNob3dNZXNzYWdlRGlhbG9nKSB7XG5cdFx0YVJlc29sdmVGdW5jdGlvbnMgPSBhUmVzb2x2ZUZ1bmN0aW9ucyB8fCBbXTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zLnB1c2gocmVzb2x2ZSk7XG5cdFx0XHQoQ29yZSBhcyBDb3JlRXgpXG5cdFx0XHRcdC5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiLCB0cnVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBiU3RyaWN0SGFuZGxpbmdGbG93ID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZUhhc0VUYWcgPSBmbk1vZGlmeUVUYWdNZXNzYWdlc09ubHkob01lc3NhZ2VNYW5hZ2VyLCBvUmVzb3VyY2VCdW5kbGUsIGNvbmN1cnJlbnRFZGl0RmxhZyk7XG5cdFx0XHRcdFx0Y29uc3Qgb01lc3NhZ2VPYmplY3QgPSBwcmVwYXJlTWVzc2FnZVZpZXdGb3JEaWFsb2cob01lc3NhZ2VEaWFsb2dNb2RlbCwgYlN0cmljdEhhbmRsaW5nRmxvdyk7XG5cdFx0XHRcdFx0b0RpYWxvZyA9XG5cdFx0XHRcdFx0XHRvRGlhbG9nIHx8XG5cdFx0XHRcdFx0XHRuZXcgRGlhbG9nKHtcblx0XHRcdFx0XHRcdFx0cmVzaXphYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRlbmRCdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGFsc28gcmVtb3ZlIGJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgaWYgd2Ugd2VyZSBzaG93aW5nIHRoZW1cblx0XHRcdFx0XHRcdFx0XHRcdGlmIChiU2hvd0JvdW5kVHJhbnNpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0dGV4dDogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9DTE9TRVwiKVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y3VzdG9tSGVhZGVyOiBuZXcgQmFyKHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TWlkZGxlOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHRuZXcgVGV4dCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVcIilcblx0XHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50TGVmdDogW29CYWNrQnV0dG9uXVxuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdFx0Y29udGVudFdpZHRoOiBcIjM3LjVlbVwiLFxuXHRcdFx0XHRcdFx0XHRjb250ZW50SGVpZ2h0OiBcIjIxLjVlbVwiLFxuXHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFNjcm9sbGluZzogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFSZXNvbHZlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhUmVzb2x2ZUZ1bmN0aW9uc1tpXS5jYWxsKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGFSZXNvbHZlRnVuY3Rpb25zID0gW107XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9EaWFsb2cuYWRkQ29udGVudChvTWVzc2FnZU9iamVjdC5vTWVzc2FnZVZpZXcpO1xuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VIYXNFVGFnKSB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvbS9CdXR0b25UeXBlXCJdLCBmdW5jdGlvbiAoQnV0dG9uVHlwZTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdG9EaWFsb2cuc2V0QmVnaW5CdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaWFsb2dDbG9zZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b0NvbnRleHQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19DT01NT05fU0FQRkVfUkVGUkVTSFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IEJ1dHRvblR5cGUuRW1waGFzaXplZFxuXHRcdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0RpYWxvZy5kZXN0cm95QmVnaW5CdXR0b24oKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eSA9IGZuR2V0SGlnaGVzdE1lc3NhZ2VQcmlvcml0eShvTWVzc2FnZVZpZXcuZ2V0SXRlbXMoKSk7XG5cdFx0XHRcdFx0c0hpZ2hlc3RQcmlvcml0eVRleHQgPSBnZXRUcmFuc2xhdGVkVGV4dEZvck1lc3NhZ2VEaWFsb2coc0hpZ2hlc3RQcmlvcml0eSk7XG5cdFx0XHRcdFx0b0RpYWxvZy5zZXRTdGF0ZShzSGlnaGVzdFByaW9yaXR5KTtcblx0XHRcdFx0XHQob0RpYWxvZy5nZXRDdXN0b21IZWFkZXIoKSBhcyBhbnkpLmdldENvbnRlbnRNaWRkbGUoKVswXS5zZXRUZXh0KHNIaWdoZXN0UHJpb3JpdHlUZXh0KTtcblx0XHRcdFx0XHRvTWVzc2FnZVZpZXcubmF2aWdhdGVCYWNrKCk7XG5cdFx0XHRcdFx0b0RpYWxvZy5vcGVuKCk7XG5cdFx0XHRcdFx0cmVzb2x2ZShvRGlhbG9nKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKHJlamVjdCk7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoc2hvd01lc3NhZ2VCb3gpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlID0gYVVuYm91bmRNZXNzYWdlc1swXTtcblx0XHRcdGlmIChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzICYmIGFNZXNzYWdlTGlzdC5pbmRleE9mKG9NZXNzYWdlLnRlY2huaWNhbERldGFpbHMub3JpZ2luYWxNZXNzYWdlLm1lc3NhZ2UpID09PSAtMSkge1xuXHRcdFx0XHRhTWVzc2FnZUxpc3QucHVzaChvTWVzc2FnZS50ZWNobmljYWxEZXRhaWxzLm9yaWdpbmFsTWVzc2FnZS5tZXNzYWdlKTtcblx0XHRcdFx0bGV0IGZvcm1hdHRlZFRleHRTdHJpbmcgPSBcIjxodG1sPjxib2R5PlwiO1xuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyTWVzc2FnZSA9IGdldFJldHJ5QWZ0ZXJNZXNzYWdlKG9NZXNzYWdlLCB0cnVlKTtcblx0XHRcdFx0aWYgKHJldHJ5QWZ0ZXJNZXNzYWdlKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGA8aDY+JHtyZXRyeUFmdGVyTWVzc2FnZX08L2g2Pjxicj5gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvTWVzc2FnZS5nZXRDb2RlKCkgIT09IFwiNTAzXCIgJiYgb01lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQoKSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Zm9ybWF0dGVkVGV4dFN0cmluZyA9IGAke2Zvcm1hdHRlZFRleHRTdHJpbmcgKyBvTWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dCgpfTogJHtvTWVzc2FnZS5nZXRNZXNzYWdlKCl9PC9odG1sPjwvYm9keT5gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZvcm1hdHRlZFRleHRTdHJpbmcgPSBgJHtmb3JtYXR0ZWRUZXh0U3RyaW5nICsgb01lc3NhZ2UuZ2V0TWVzc2FnZSgpfTwvaHRtbD48L2JvZHk+YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBmb3JtYXR0ZWRUZXh0OiBhbnkgPSBuZXcgRm9ybWF0dGVkVGV4dCh7XG5cdFx0XHRcdFx0aHRtbFRleHQ6IGZvcm1hdHRlZFRleHRTdHJpbmdcblx0XHRcdFx0fSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3IoZm9ybWF0dGVkVGV4dCwge1xuXHRcdFx0XHRcdG9uQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGFNZXNzYWdlTGlzdCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJTaG93Qm91bmRUcmFuc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0fVxufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFRleHRGb3JNZXNzYWdlRGlhbG9nKHNIaWdoZXN0UHJpb3JpdHk6IGFueSkge1xuXHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSAoQ29yZSBhcyBDb3JlRXgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRzd2l0Y2ggKHNIaWdoZXN0UHJpb3JpdHkpIHtcblx0XHRjYXNlIFwiRXJyb3JcIjpcblx0XHRcdHJldHVybiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SX01FU1NBR0VTX1BBR0VfVElUTEVfRVJST1JcIik7XG5cdFx0Y2FzZSBcIkluZm9ybWF0aW9uXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9JTkZPXCIpO1xuXHRcdGNhc2UgXCJTdWNjZXNzXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9TVUNDRVNTXCIpO1xuXHRcdGNhc2UgXCJXYXJuaW5nXCI6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRVwiKTtcblx0fVxufVxuZnVuY3Rpb24gcmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKGZhbHNlKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKHNQYXRoVG9CZVJlbW92ZWQ/OiBzdHJpbmcpIHtcblx0cmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKHRydWUsIHNQYXRoVG9CZVJlbW92ZWQpO1xufVxuXG5mdW5jdGlvbiBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbDogYW55LCBzUGF0aFRvQmVSZW1vdmVkPzogc3RyaW5nKSB7XG5cdGlmIChzUGF0aFRvQmVSZW1vdmVkID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGNvbnN0IGxpc3RCaW5kaW5nID0gb01lc3NhZ2VNb2RlbC5iaW5kTGlzdChcIi9cIik7XG5cdGxpc3RCaW5kaW5nLmZpbHRlcihcblx0XHRuZXcgRmlsdGVyKHtcblx0XHRcdHBhdGg6IFwidGFyZ2V0XCIsXG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuU3RhcnRzV2l0aCxcblx0XHRcdHZhbHVlMTogc1BhdGhUb0JlUmVtb3ZlZFxuXHRcdH0pXG5cdCk7XG5cblx0cmV0dXJuIGxpc3RCaW5kaW5nLmdldEN1cnJlbnRDb250ZXh0cygpLm1hcChmdW5jdGlvbiAob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiBvQ29udGV4dC5nZXRPYmplY3QoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBnZXRNZXNzYWdlcyhiQm91bmRNZXNzYWdlczogYm9vbGVhbiA9IGZhbHNlLCBiVHJhbnNpdGlvbk9ubHk6IGJvb2xlYW4gPSBmYWxzZSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRsZXQgaTtcblx0Y29uc3Qgb01lc3NhZ2VNYW5hZ2VyID0gKENvcmUgYXMgQ29yZUV4IGFzIGFueSkuZ2V0TWVzc2FnZU1hbmFnZXIoKSxcblx0XHRvTWVzc2FnZU1vZGVsID0gb01lc3NhZ2VNYW5hZ2VyLmdldE1lc3NhZ2VNb2RlbCgpLFxuXHRcdG9SZXNvdXJjZUJ1bmRsZSA9IChDb3JlIGFzIENvcmVFeCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIiksXG5cdFx0YVRyYW5zaXRpb25NZXNzYWdlcyA9IFtdO1xuXHRsZXQgYU1lc3NhZ2VzOiBhbnlbXSA9IFtdO1xuXHRpZiAoYkJvdW5kTWVzc2FnZXMgJiYgYlRyYW5zaXRpb25Pbmx5ICYmIHNQYXRoVG9CZVJlbW92ZWQpIHtcblx0XHRhTWVzc2FnZXMgPSBnZXRNZXNzYWdlc0Zyb21NZXNzYWdlTW9kZWwob01lc3NhZ2VNb2RlbCwgc1BhdGhUb0JlUmVtb3ZlZCk7XG5cdH0gZWxzZSB7XG5cdFx0YU1lc3NhZ2VzID0gb01lc3NhZ2VNb2RlbC5nZXRPYmplY3QoXCIvXCIpO1xuXHR9XG5cdGZvciAoaSA9IDA7IGkgPCBhTWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoXG5cdFx0XHQoIWJUcmFuc2l0aW9uT25seSB8fCBhTWVzc2FnZXNbaV0ucGVyc2lzdGVudCkgJiZcblx0XHRcdCgoYkJvdW5kTWVzc2FnZXMgJiYgYU1lc3NhZ2VzW2ldLnRhcmdldCAhPT0gXCJcIikgfHwgKCFiQm91bmRNZXNzYWdlcyAmJiAoIWFNZXNzYWdlc1tpXS50YXJnZXQgfHwgYU1lc3NhZ2VzW2ldLnRhcmdldCA9PT0gXCJcIikpKSAmJlxuXHRcdFx0YU1lc3NhZ2VzW2ldLmNvZGVcblx0XHQpIHtcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXMucHVzaChhTWVzc2FnZXNbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZvciAoaSA9IDA7IGkgPCBhVHJhbnNpdGlvbk1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKFxuXHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5jb2RlID09PSBcIjUwM1wiICYmXG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgIT09IFwiXCIgJiZcblx0XHRcdGFUcmFuc2l0aW9uTWVzc2FnZXNbaV0ubWVzc2FnZS5pbmRleE9mKG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFXzUwM19CQUNLRU5EX1BSRUZJWFwiKSkgPT09IC0xXG5cdFx0KSB7XG5cdFx0XHRhVHJhbnNpdGlvbk1lc3NhZ2VzW2ldLm1lc3NhZ2UgPSBgXFxuJHtvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV81MDNfQkFDS0VORF9QUkVGSVhcIil9JHtcblx0XHRcdFx0YVRyYW5zaXRpb25NZXNzYWdlc1tpXS5tZXNzYWdlXG5cdFx0XHR9YDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFUcmFuc2l0aW9uTWVzc2FnZXM7XG59XG5mdW5jdGlvbiByZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoYkJvdW5kTWVzc2FnZXM6IGFueSwgc1BhdGhUb0JlUmVtb3ZlZD86IHN0cmluZykge1xuXHRjb25zdCBhTWVzc2FnZXNUb0JlRGVsZXRlZCA9IGdldE1lc3NhZ2VzKGJCb3VuZE1lc3NhZ2VzLCB0cnVlLCBzUGF0aFRvQmVSZW1vdmVkKTtcblxuXHRpZiAoYU1lc3NhZ2VzVG9CZURlbGV0ZWQubGVuZ3RoID4gMCkge1xuXHRcdENvcmUuZ2V0TWVzc2FnZU1hbmFnZXIoKS5yZW1vdmVNZXNzYWdlcyhhTWVzc2FnZXNUb0JlRGVsZXRlZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTdGF0aWMgZnVuY3Rpb25zIGZvciBGaW9yaSBNZXNzYWdlIEhhbmRsaW5nXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMubWVzc2FnZUhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU2LjBcbiAqL1xuY29uc3QgbWVzc2FnZUhhbmRsaW5nOiBtZXNzYWdlSGFuZGxpbmdUeXBlID0ge1xuXHRnZXRNZXNzYWdlczogZ2V0TWVzc2FnZXMsXG5cdHNob3dVbmJvdW5kTWVzc2FnZXM6IHNob3dVbmJvdW5kTWVzc2FnZXMsXG5cdHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXM6IHJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMsXG5cdHJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzOiByZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcyxcblx0bW9kaWZ5RVRhZ01lc3NhZ2VzT25seTogZm5Nb2RpZnlFVGFnTWVzc2FnZXNPbmx5LFxuXHRnZXRSZXRyeUFmdGVyTWVzc2FnZTogZ2V0UmV0cnlBZnRlck1lc3NhZ2UsXG5cdHByZXBhcmVNZXNzYWdlVmlld0ZvckRpYWxvZzogcHJlcGFyZU1lc3NhZ2VWaWV3Rm9yRGlhbG9nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtZXNzYWdlSGFuZGxpbmc7XG4iXX0=
|