@sapui5/sap.fe.core 1.101.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +66 -30
- package/src/sap/fe/core/AppComponent.ts +68 -51
- package/src/sap/fe/core/AppStateHandler.js +13 -13
- package/src/sap/fe/core/AppStateHandler.ts +18 -18
- 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 +279 -188
- package/src/sap/fe/core/CommonUtils.ts +306 -215
- package/src/sap/fe/core/ExtensionAPI.js +25 -30
- package/src/sap/fe/core/ExtensionAPI.ts +37 -41
- package/src/sap/fe/core/PageController.js +12 -7
- package/src/sap/fe/core/PageController.ts +10 -5
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +11 -11
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
- 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 +59 -34
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
- 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 +11 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
- package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
- 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 +39 -21
- package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
- package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- 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 +21 -24
- package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
- 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 +48 -43
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
- 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 +50 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
- 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 +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
- 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 +48 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
- package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
- 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 +73 -37
- package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
- package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
- package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
- package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
- 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 +92 -89
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
- package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
- package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
- 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/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +15 -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 +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
- 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 +532 -264
- package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
- 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 +16 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +51 -3
- package/src/sap/fe/core/library.ts +47 -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 +151 -197
- package/src/sap/fe/core/messagebundle_ar.properties +36 -63
- package/src/sap/fe/core/messagebundle_bg.properties +36 -63
- package/src/sap/fe/core/messagebundle_ca.properties +36 -63
- package/src/sap/fe/core/messagebundle_cs.properties +36 -63
- package/src/sap/fe/core/messagebundle_cy.properties +36 -63
- package/src/sap/fe/core/messagebundle_da.properties +37 -64
- package/src/sap/fe/core/messagebundle_de.properties +36 -63
- package/src/sap/fe/core/messagebundle_el.properties +38 -65
- package/src/sap/fe/core/messagebundle_en.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
- package/src/sap/fe/core/messagebundle_es.properties +36 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
- package/src/sap/fe/core/messagebundle_et.properties +36 -63
- package/src/sap/fe/core/messagebundle_fi.properties +36 -63
- package/src/sap/fe/core/messagebundle_fr.properties +39 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
- package/src/sap/fe/core/messagebundle_hi.properties +36 -63
- package/src/sap/fe/core/messagebundle_hr.properties +36 -63
- package/src/sap/fe/core/messagebundle_hu.properties +35 -62
- package/src/sap/fe/core/messagebundle_id.properties +37 -64
- package/src/sap/fe/core/messagebundle_it.properties +54 -81
- package/src/sap/fe/core/messagebundle_iw.properties +36 -63
- package/src/sap/fe/core/messagebundle_ja.properties +36 -63
- package/src/sap/fe/core/messagebundle_kk.properties +36 -63
- package/src/sap/fe/core/messagebundle_ko.properties +36 -63
- package/src/sap/fe/core/messagebundle_lt.properties +36 -63
- package/src/sap/fe/core/messagebundle_lv.properties +36 -63
- package/src/sap/fe/core/messagebundle_ms.properties +37 -64
- package/src/sap/fe/core/messagebundle_nl.properties +37 -64
- package/src/sap/fe/core/messagebundle_no.properties +36 -63
- package/src/sap/fe/core/messagebundle_pl.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
- package/src/sap/fe/core/messagebundle_ro.properties +36 -63
- package/src/sap/fe/core/messagebundle_ru.properties +36 -63
- package/src/sap/fe/core/messagebundle_sh.properties +36 -63
- package/src/sap/fe/core/messagebundle_sk.properties +36 -63
- package/src/sap/fe/core/messagebundle_sl.properties +38 -65
- package/src/sap/fe/core/messagebundle_sv.properties +36 -63
- package/src/sap/fe/core/messagebundle_th.properties +36 -63
- package/src/sap/fe/core/messagebundle_tr.properties +36 -63
- package/src/sap/fe/core/messagebundle_uk.properties +37 -64
- package/src/sap/fe/core/messagebundle_vi.properties +37 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
- package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
- 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 +63 -60
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
- package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
- package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
- 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 +24 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
- 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 +3 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
- 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 +12 -11
- package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
- 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 +79 -56
- package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
- package/src/sap/fe/core/templating/UIFormatters.js +163 -97
- package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- 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/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/actions/sticky.ts +0 -119
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
|
@@ -2,19 +2,19 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/helpers/
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/converters/controls/ListReport/FilterBar", "sap/fe/core/converters/helpers/ConfigurableObject", "sap/fe/core/helpers/BindingToolkit", "../controls/Common/DataVisualization", "../controls/Common/KPI", "../helpers/ID", "../ManifestSettings"], function (Action, FilterBar, ConfigurableObject, BindingToolkit, DataVisualization, KPI, ID, ManifestSettings) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
9
|
var VisualizationType = ManifestSettings.VisualizationType;
|
|
10
10
|
var VariantManagementType = ManifestSettings.VariantManagementType;
|
|
11
11
|
var TemplateType = ManifestSettings.TemplateType;
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
12
|
+
var getTableID = ID.getTableID;
|
|
13
|
+
var getIconTabBarID = ID.getIconTabBarID;
|
|
14
|
+
var getFilterVariantManagementID = ID.getFilterVariantManagementID;
|
|
15
|
+
var getFilterBarID = ID.getFilterBarID;
|
|
16
|
+
var getCustomTabID = ID.getCustomTabID;
|
|
17
|
+
var getChartID = ID.getChartID;
|
|
18
18
|
var getKPIDefinitions = KPI.getKPIDefinitions;
|
|
19
19
|
var isSelectionPresentationCompliant = DataVisualization.isSelectionPresentationCompliant;
|
|
20
20
|
var isPresentationCompliant = DataVisualization.isPresentationCompliant;
|
|
@@ -24,8 +24,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
24
24
|
var getDefaultLineItem = DataVisualization.getDefaultLineItem;
|
|
25
25
|
var getDefaultChart = DataVisualization.getDefaultChart;
|
|
26
26
|
var getDataVisualizationConfiguration = DataVisualization.getDataVisualizationConfiguration;
|
|
27
|
-
var
|
|
28
|
-
var
|
|
27
|
+
var getExpressionFromAnnotation = BindingToolkit.getExpressionFromAnnotation;
|
|
28
|
+
var compileExpression = BindingToolkit.compileExpression;
|
|
29
29
|
var insertCustomElements = ConfigurableObject.insertCustomElements;
|
|
30
30
|
var getSelectionFields = FilterBar.getSelectionFields;
|
|
31
31
|
var getManifestFilterFields = FilterBar.getManifestFilterFields;
|
|
@@ -48,8 +48,9 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* Retrieves all list report tables.
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
51
|
+
*
|
|
52
|
+
* @param views The list report views configured in the manifest
|
|
53
|
+
* @returns The list report table
|
|
53
54
|
*/
|
|
54
55
|
function getTableVisualizations(views) {
|
|
55
56
|
var tables = [];
|
|
@@ -99,10 +100,10 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
99
100
|
/**
|
|
100
101
|
* Find a visualization annotation that can be used for rendering the list report.
|
|
101
102
|
*
|
|
102
|
-
* @param
|
|
103
|
+
* @param entityType The current EntityType
|
|
103
104
|
* @param converterContext
|
|
104
105
|
* @param bIsALP
|
|
105
|
-
* @returns
|
|
106
|
+
* @returns A compliant annotation for rendering the list report
|
|
106
107
|
*/
|
|
107
108
|
|
|
108
109
|
|
|
@@ -167,14 +168,14 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
167
168
|
var title = "";
|
|
168
169
|
var selectionVariantPath = "";
|
|
169
170
|
|
|
170
|
-
var isMultipleViewConfiguration = function (
|
|
171
|
-
return
|
|
171
|
+
var isMultipleViewConfiguration = function (currentConfig) {
|
|
172
|
+
return currentConfig.key !== undefined;
|
|
172
173
|
};
|
|
173
174
|
|
|
174
|
-
var createVisualization = function (
|
|
175
|
+
var createVisualization = function (currentPresentation, isPrimary) {
|
|
175
176
|
var defaultVisualization;
|
|
176
177
|
|
|
177
|
-
var _iterator = _createForOfIteratorHelper(
|
|
178
|
+
var _iterator = _createForOfIteratorHelper(currentPresentation.visualizations),
|
|
178
179
|
_step;
|
|
179
180
|
|
|
180
181
|
try {
|
|
@@ -197,7 +198,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
197
198
|
_iterator.f();
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
var presentationCreated = Object.assign({},
|
|
201
|
+
var presentationCreated = Object.assign({}, currentPresentation);
|
|
201
202
|
|
|
202
203
|
if (defaultVisualization) {
|
|
203
204
|
presentationCreated.visualizations = [defaultVisualization];
|
|
@@ -261,7 +262,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
261
262
|
var resolvedTarget = converterContext.getEntityTypeAnnotation(config.annotationPath);
|
|
262
263
|
var viewAnnotation = resolvedTarget.annotation;
|
|
263
264
|
converterContext = resolvedTarget.converterContext;
|
|
264
|
-
title =
|
|
265
|
+
title = compileExpression(getExpressionFromAnnotation(viewAnnotation.Text)); // Need to loop on table into views since multi table mode get specific configuration (hidden filters or Table Id)
|
|
265
266
|
|
|
266
267
|
presentation.visualizations.forEach(function (visualizationDefinition, index) {
|
|
267
268
|
switch (visualizationDefinition.type) {
|
|
@@ -274,7 +275,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
274
275
|
|
|
275
276
|
if (!config.keepPreviousPresonalization) {
|
|
276
277
|
// Need to override Table Id to match with Tab Key (currently only table is managed in multiple view mode)
|
|
277
|
-
tableVisualization.annotation.id =
|
|
278
|
+
tableVisualization.annotation.id = getTableID(config.key || "", "LineItem");
|
|
278
279
|
}
|
|
279
280
|
|
|
280
281
|
config = config;
|
|
@@ -298,7 +299,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
298
299
|
|
|
299
300
|
case VisualizationType.Chart:
|
|
300
301
|
var chartVisualization = presentation.visualizations[index];
|
|
301
|
-
chartVisualization.id =
|
|
302
|
+
chartVisualization.id = getChartID(config.key || "", "Chart");
|
|
302
303
|
chartVisualization.multiViews = true;
|
|
303
304
|
break;
|
|
304
305
|
|
|
@@ -330,7 +331,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
330
331
|
var _title = config.label,
|
|
331
332
|
fragment = config.template,
|
|
332
333
|
type = config.type,
|
|
333
|
-
customTabId =
|
|
334
|
+
customTabId = getCustomTabID(config.key || ""),
|
|
334
335
|
_visible2 = config.visible;
|
|
335
336
|
return {
|
|
336
337
|
title: _title,
|
|
@@ -371,7 +372,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
371
372
|
} else {
|
|
372
373
|
path = path;
|
|
373
374
|
var manifestWrapper = converterContext.getManifestWrapper(),
|
|
374
|
-
viewConverterContext = converterContext.getConverterContextFor(path.contextPath || path.entitySet && "/"
|
|
375
|
+
viewConverterContext = converterContext.getConverterContextFor(path.contextPath || path.entitySet && "/".concat(path.entitySet) || converterContext.getContextPath()),
|
|
375
376
|
entityType = viewConverterContext.getEntityType();
|
|
376
377
|
|
|
377
378
|
if (entityType && viewConverterContext) {
|
|
@@ -479,7 +480,7 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
479
480
|
* Creates the ListReportDefinition for multiple entity sets (multiple table mode).
|
|
480
481
|
*
|
|
481
482
|
* @param converterContext The converter context
|
|
482
|
-
* @returns
|
|
483
|
+
* @returns The list report definition based on annotation + manifest
|
|
483
484
|
*/
|
|
484
485
|
|
|
485
486
|
|
|
@@ -507,8 +508,8 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
507
508
|
});
|
|
508
509
|
var singleTableId = "";
|
|
509
510
|
var singleChartId = "";
|
|
510
|
-
var filterBarId =
|
|
511
|
-
var filterVariantManagementID =
|
|
511
|
+
var filterBarId = getFilterBarID(sContextPath);
|
|
512
|
+
var filterVariantManagementID = getFilterVariantManagementID(filterBarId);
|
|
512
513
|
var fbConfig = manifestWrapper.getFilterConfiguration();
|
|
513
514
|
var filterInitialLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.initialLayout.toLowerCase() : "compact";
|
|
514
515
|
var filterLayout = (fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout) !== undefined ? fbConfig === null || fbConfig === void 0 ? void 0 : fbConfig.layout.toLowerCase() : "compact";
|
|
@@ -542,13 +543,13 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
542
543
|
}).concat(lrChartVisualizations.map(function (visualization) {
|
|
543
544
|
return visualization.id;
|
|
544
545
|
}));
|
|
545
|
-
var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(!hasMultiVisualizations && views.length > 1 ? [
|
|
546
|
+
var targetControlIds = [].concat(_toConsumableArray(hideFilterBar ? [] : [filterBarId]), _toConsumableArray(manifestWrapper.getVariantManagement() !== VariantManagementType.Control ? visualizationIds : []), _toConsumableArray(!hasMultiVisualizations && views.length > 1 ? [getIconTabBarID()] : []));
|
|
546
547
|
var iconTabBarId = "fe::TabMultipleMode";
|
|
547
548
|
var displayMultiVisualizations = views.length > 1 && !hasMultiVisualizations;
|
|
548
549
|
var stickySubheaderProvider = displayMultiVisualizations && manifestWrapper.getStickyMultiTabHeaderConfiguration() ? iconTabBarId : undefined;
|
|
549
550
|
return {
|
|
550
551
|
mainEntitySet: sContextPath,
|
|
551
|
-
mainEntityType: sContextPath
|
|
552
|
+
mainEntityType: "".concat(sContextPath, "/"),
|
|
552
553
|
displayMultiVisualizations: displayMultiVisualizations,
|
|
553
554
|
iconTabBarId: iconTabBarId,
|
|
554
555
|
stickySubheaderProvider: stickySubheaderProvider,
|
|
@@ -649,4 +650,4 @@ sap.ui.define(["sap/fe/core/converters/controls/Common/Action", "sap/fe/core/con
|
|
|
649
650
|
|
|
650
651
|
return _exports;
|
|
651
652
|
}, false);
|
|
652
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwia2V5IiwiY3JlYXRlVmlzdWFsaXphdGlvbiIsImlzUHJpbWFyeSIsImRlZmF1bHRWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uQ3JlYXRlZCIsIk9iamVjdCIsImFzc2lnbiIsImdldFByZXNlbnRhdGlvbiIsIml0ZW0iLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwidGFyZ2V0QW5ub3RhdGlvbiIsImNyZWF0ZUFscFZpZXciLCJwcmVzZW50YXRpb25zIiwiZGVmYXVsdFBhdGgiLCJpZCIsInZpc2libGUiLCJnZXRUZW1wbGF0ZVR5cGUiLCJUZW1wbGF0ZVR5cGUiLCJBbmFseXRpY2FsTGlzdFBhZ2UiLCJoYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zIiwicHJpbWFyeSIsInNlY29uZGFyeSIsInZpZXdBbm5vdGF0aW9uIiwiY29tcGlsZUJpbmRpbmciLCJhbm5vdGF0aW9uRXhwcmVzc2lvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24iLCJUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsIkNoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiRmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJJY29uVGFiQmFySUQiLCJpY29uVGFiQmFySWQiLCJkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyIsInN0aWNreVN1YmhlYWRlclByb3ZpZGVyIiwiZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsImlzTXVsdGlFbnRpdHlTZXRzIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFTQSxzQkFBVCxDQUFnQ0MsS0FBaEMsRUFBeUY7QUFDeEYsUUFBTUMsTUFBNEIsR0FBRyxFQUFyQztBQUNBRCxJQUFBQSxLQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFVQyxJQUFWLEVBQWdCO0FBQzdC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QUEwRTtBQUN6RXVGLFlBQUFBLGFBQWEsR0FBSXRJLE1BQUQsQ0FBb0MrQyxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUksQ0FBQ3dGLGFBQUQsSUFBbUJ2SSxNQUFELENBQW9DZ0QsY0FBMUQsRUFBMEU7QUFDekV1RixZQUFBQSxhQUFhLEdBQUl2SSxNQUFELENBQW9DZ0QsY0FBcEMsSUFBc0QsRUFBdEU7QUFDQTs7QUFDRCxjQUFJdUYsYUFBYSxJQUFJRCxhQUFyQixFQUFvQztBQUNuQztBQUNBO0FBQ0Q7QUFaSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYU47O0FBQ0QsUUFBSUEsYUFBYSxJQUFJQyxhQUFyQixFQUFvQztBQUNuQyxhQUFPO0FBQ05jLFFBQUFBLE9BQU8sRUFBRWQsYUFESDtBQUVOZSxRQUFBQSxPQUFPLEVBQUVoQjtBQUZILE9BQVA7QUFJQTs7QUFDRCxXQUFPcEcsU0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQge1xuXHRMaW5lSXRlbSxcblx0UHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0U2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IEJhc2VBY3Rpb24sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB7IFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHtcblx0Q3VzdG9tRWxlbWVudEZpbHRlckZpZWxkLFxuXHRGaWx0ZXJGaWVsZCxcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBDb25maWd1cmFibGVPYmplY3QsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGFubm90YXRpb25FeHByZXNzaW9uLCBjb21waWxlQmluZGluZyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5pbXBvcnQge1xuXHREYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLFxuXHREYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sXG5cdGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbixcblx0Z2V0RGVmYXVsdENoYXJ0LFxuXHRnZXREZWZhdWx0TGluZUl0ZW0sXG5cdGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LFxuXHRnZXRTZWxlY3Rpb25WYXJpYW50LFxuXHRpc1ByZXNlbnRhdGlvbkNvbXBsaWFudCxcblx0aXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnRcbn0gZnJvbSBcIi4uL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHsgZ2V0S1BJRGVmaW5pdGlvbnMsIEtQSURlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHsgQ2hhcnRJRCwgQ3VzdG9tVGFiSUQsIEZpbHRlckJhcklELCBGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElELCBJY29uVGFiQmFySUQsIFRhYmxlSUQgfSBmcm9tIFwiLi4vaGVscGVycy9JRFwiO1xuaW1wb3J0IHtcblx0Q29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24sXG5cdE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uLFxuXHRTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFRlbXBsYXRlVHlwZSxcblx0VmFyaWFudE1hbmFnZW1lbnRUeXBlLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb24sXG5cdFZpc3VhbGl6YXRpb25UeXBlXG59IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0ZGlzcGxheU11bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdGljb25UYWJCYXJJZDogc3RyaW5nO1xuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZTtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG5cdGhpZGVGaWx0ZXJCYXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVmlld0RlZmluaXRpb24gPSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHRjaGFydENvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICogQHBhcmFtIHtMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXX0gdmlld3MgVGhlIGxpc3QgcmVwb3J0IHZpZXdzIGNvbmZpZ3VyZWQgaW4gdGhlIG1hbmlmZXN0XG4gKiBAcmV0dXJucyB7VGFibGVWaXN1YWxpemF0aW9uW119IFRoZSBsaXN0IHJlcG9ydCB0YWJsZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0ge0VudGl0eVR5cGV9IGVudGl0eVR5cGUgVGhlIGN1cnJlbnQgRW50aXR5VHlwZVxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHRcbiAqIEBwYXJhbSBiSXNBTFBcbiAqIEByZXR1cm5zIHtMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCB1bmRlZmluZWR9IEEgY29tcGxpYW50IGFubm90YXRpb24gZm9yIHJlbmRlcmluZyB0aGUgbGlzdCByZXBvcnRcbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oXG5cdGVudGl0eVR5cGU6IEVudGl0eVR5cGUsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdGJJc0FMUDogQm9vbGVhblxuKTogTGluZUl0ZW0gfCBQcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFubm90YXRpb25QYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRjb25zdCBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBhbm5vdGF0aW9uUGF0aCwgY29udmVydGVyQ29udGV4dCk7XG5cdGlmIChhbm5vdGF0aW9uUGF0aCAmJiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQuUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHRpZiAoIXByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlByZXNlbnRhdGlvbiBWYXJpYW50IGlzIG5vdCBjb25maWd1cmVkIGluIHRoZSBTUFYgbWVudGlvbmVkIGluIHRoZSBtYW5pZmVzdFwiKTtcblx0XHR9XG5cdFx0Y29uc3QgYlBWQ29tcGxhaW50ID0gaXNQcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50KTtcblx0XHRpZiAoIWJQVkNvbXBsYWludCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1NlbGVjdGlvblByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IGdldERlZmF1bHRQcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUpO1xuXHRpZiAocHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdGlmIChpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChwcmVzZW50YXRpb25WYXJpYW50LCBiSXNBTFApKSB7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uVmFyaWFudDtcblx0XHR9XG5cdH1cblx0aWYgKCFiSXNBTFApIHtcblx0XHRjb25zdCBkZWZhdWx0TGluZUl0ZW0gPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGRlZmF1bHRMaW5lSXRlbSkge1xuXHRcdFx0cmV0dXJuIGRlZmF1bHRMaW5lSXRlbTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0VmlldyA9IGZ1bmN0aW9uICh2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbjogVmlld0NvbnZlcnRlclNldHRpbmdzKTogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uIHtcblx0bGV0IGNvbmZpZyA9IHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uO1xuXHRpZiAoY29uZmlnLmNvbnZlcnRlckNvbnRleHQpIHtcblx0XHRsZXQgY29udmVydGVyQ29udGV4dCA9IGNvbmZpZy5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdGNvbmZpZyA9IGNvbmZpZyBhcyBWaWV3QW5ub3RhdGlvbkNvbmZpZ3VyYXRpb247XG5cdFx0bGV0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0Y29uZmlnLmFubm90YXRpb25cblx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoY29uZmlnLmFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0OiBcIlwiLFxuXHRcdFx0dHJ1ZSxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uXG5cdFx0KTtcblx0XHRsZXQgdGFibGVDb250cm9sSWQgPSBcIlwiO1xuXHRcdGxldCBjaGFydENvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBcIlwiO1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gZnVuY3Rpb24gKGNvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjb25maWcgaXMgTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB7XG5cdFx0XHRyZXR1cm4gKGNvbmZpZyBhcyBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKS5rZXkgIT09IHVuZGVmaW5lZDtcblx0XHR9O1xuXHRcdGNvbnN0IGNyZWF0ZVZpc3VhbGl6YXRpb24gPSBmdW5jdGlvbiAocHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0aWYgKGlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNQcmltYXJ5ICYmIHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmlzdWFsaXphdGlvbiA9IHZpc3VhbGl6YXRpb247XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbkNyZWF0ZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmVzZW50YXRpb24pO1xuXHRcdFx0aWYgKGRlZmF1bHRWaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdHByZXNlbnRhdGlvbkNyZWF0ZWQudmlzdWFsaXphdGlvbnMgPSBbZGVmYXVsdFZpc3VhbGl6YXRpb25dO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHByZXNlbnRhdGlvbkNyZWF0ZWQ7XG5cdFx0fTtcblx0XHRjb25zdCBnZXRQcmVzZW50YXRpb24gPSBmdW5jdGlvbiAoaXRlbTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKSB7XG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oaXRlbS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbiA9IGdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbihcblx0XHRcdFx0YW5ub3RhdGlvblxuXHRcdFx0XHRcdD8gY29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lLCBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSlcblx0XHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHRcdHRydWUsXG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlQWxwVmlldyA9IGZ1bmN0aW9uIChcblx0XHRcdHByZXNlbnRhdGlvbnM6IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbltdLFxuXHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiIHwgXCJwcmltYXJ5XCIgfCBcInNlY29uZGFyeVwiIHwgdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihwcmVzZW50YXRpb25zWzBdLCB0cnVlKTtcblx0XHRcdGNoYXJ0Q29udHJvbElkID0gKHByaW1hcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBDaGFydFZpc3VhbGl6YXRpb24pLmlkO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlVmlzdWFsaXphdGlvbihcblx0XHRcdFx0cHJlc2VudGF0aW9uc1sxXSA/IHByZXNlbnRhdGlvbnNbMV0gOiBwcmVzZW50YXRpb25zWzBdXG5cdFx0XHQpO1xuXHRcdFx0dGFibGVDb250cm9sSWQgPSAoc2Vjb25kYXJ5VmlzdWFsaXphdGlvbj8udmlzdWFsaXphdGlvbnNbMF0gYXMgVGFibGVWaXN1YWxpemF0aW9uKS5hbm5vdGF0aW9uLmlkO1xuXHRcdFx0aWYgKHByaW1hcnlWaXN1YWxpemF0aW9uICYmIHNlY29uZGFyeVZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgdmlzaWJsZSA9IGNvbmZpZy52aXNpYmxlO1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uID0ge1xuXHRcdFx0XHRcdHByaW1hcnlWaXN1YWxpemF0aW9uLFxuXHRcdFx0XHRcdHNlY29uZGFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0dGFibGVDb250cm9sSWQsXG5cdFx0XHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHRcdFx0ZGVmYXVsdFBhdGgsXG5cdFx0XHRcdFx0dmlzaWJsZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdH1cblx0XHR9O1xuXHRcdGlmIChwcmVzZW50YXRpb24/LnZpc3VhbGl6YXRpb25zPy5sZW5ndGggPT09IDIgJiYgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0Y29uc3QgdmlldzogQ29tYmluZWRWaWV3RGVmaW5pdGlvbiB8IHVuZGVmaW5lZCA9IGNyZWF0ZUFscFZpZXcoW3ByZXNlbnRhdGlvbl0sIFwiYm90aFwiKTtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMoY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbikgfHxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2Vcblx0XHQpIHtcblx0XHRcdGNvbnN0IHsgcHJpbWFyeSwgc2Vjb25kYXJ5IH0gPSBjb25maWcgYXMgQ29tYmluZWRWaWV3UGF0aENvbmZpZ3VyYXRpb247XG5cdFx0XHRpZiAocHJpbWFyeSAmJiBwcmltYXJ5Lmxlbmd0aCAmJiBzZWNvbmRhcnkgJiYgc2Vjb25kYXJ5Lmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhcblx0XHRcdFx0XHRbZ2V0UHJlc2VudGF0aW9uKHByaW1hcnlbMF0pLCBnZXRQcmVzZW50YXRpb24oc2Vjb25kYXJ5WzBdKV0sXG5cdFx0XHRcdFx0KGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbikuZGVmYXVsdFBhdGhcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmlldztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kYXJ5SXRlbXMgaW4gdGhlIFZpZXdzIGlzIG5vdCBwcmVzZW50XCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uKGNvbmZpZykpIHtcblx0XHRcdC8vIGtleSBleGlzdHMgb25seSBvbiBtdWx0aSB0YWJsZXMgbW9kZVxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uKChjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRjb25zdCB2aWV3QW5ub3RhdGlvbjogVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdHRpdGxlID0gY29tcGlsZUJpbmRpbmcoYW5ub3RhdGlvbkV4cHJlc3Npb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChcblx0XHRcdFx0XHRcdFx0XHRjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG5cdFx0XHRcdFx0XHRcdCkuU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gQ2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoLFxuXHRcdFx0dmlzaWJsZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIiksXG5cdFx0XHR2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIFwiL1wiICsgcGF0aC5lbnRpdHlTZXQpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW50aXR5VHlwZSA9IHZpZXdDb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblxuXHRcdFx0XHRpZiAoZW50aXR5VHlwZSAmJiB2aWV3Q29udmVydGVyQ29udGV4dCkge1xuXHRcdFx0XHRcdGNvbnN0IGFubm90YXRpb25QYXRoID0gbWFuaWZlc3RXcmFwcGVyLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdFx0XHRcdFx0bGV0IGFubm90YXRpb247XG5cdFx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUYXJnZXQgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihwYXRoLmFubm90YXRpb25QYXRoKTtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRBbm5vdGF0aW9uID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dCA9IHJlc29sdmVkVGFyZ2V0LmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uLnRlcm0gPT09IFVJQW5ub3RhdGlvblRlcm1zLlNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFubm90YXRpb25QYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aCxcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmVkVGFyZ2V0Y29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IGdldERlZmF1bHRMaW5lSXRlbSh2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkpIGFzIExpbmVJdGVtO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhbm5vdGF0aW9uID0gdGFyZ2V0QW5ub3RhdGlvbjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiB2aWV3Q29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbixcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IHBhdGguYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdGtlZXBQcmV2aW91c1ByZXNvbmFsaXphdGlvbjogcGF0aC5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24sXG5cdFx0XHRcdFx0XHRcdGtleTogcGF0aC5rZXksXG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFRPRE8gRGlhZ25vc3RpY3MgbWVzc2FnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncyA9IGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dCwgdmlld0NvbnZlcnRlckNvbmZpZ3MpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0YW5ub3RhdGlvbjogZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgZmFsc2UpLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb252ZXJ0ZXJDb25maWdzLm1hcCgodmlld0NvbnZlcnRlckNvbmZpZykgPT4ge1xuXHRcdHJldHVybiBnZXRWaWV3KHZpZXdDb252ZXJ0ZXJDb25maWcpO1xuXHR9KTtcbn07XG5cbmZ1bmN0aW9uIGdldEFscFZpZXdDb25maWcoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld0NvbmZpZ3M6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdKTogVmlld0NvbnZlcnRlclNldHRpbmdzW10ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IGFubm90YXRpb24gPSBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0LCB0cnVlKTtcblx0bGV0IGNoYXJ0LCB0YWJsZTtcblx0aWYgKGFubm90YXRpb24pIHtcblx0XHR2aWV3Q29uZmlncy5wdXNoKHtcblx0XHRcdGFubm90YXRpb246IGFubm90YXRpb24sXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2hhcnQgPSBnZXREZWZhdWx0Q2hhcnQoZW50aXR5VHlwZSk7XG5cdFx0dGFibGUgPSBnZXREZWZhdWx0TGluZUl0ZW0oZW50aXR5VHlwZSk7XG5cdFx0aWYgKGNoYXJ0ICYmIHRhYmxlKSB7XG5cdFx0XHRjb25zdCBwcmltYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiBjaGFydC50ZXJtIH1dO1xuXHRcdFx0Y29uc3Qgc2Vjb25kYXJ5OiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb25bXSA9IFt7IGFubm90YXRpb25QYXRoOiB0YWJsZS50ZXJtIH1dO1xuXHRcdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdHByaW1hcnk6IHByaW1hcnksXG5cdFx0XHRcdHNlY29uZGFyeTogc2Vjb25kYXJ5LFxuXHRcdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmlld0NvbmZpZ3M7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRIZWFkZXJBY3Rpb25zID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBCYXNlQWN0aW9uW10ge1xuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRyZXR1cm4gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoW10sIGdldEFjdGlvbnNGcm9tTWFuaWZlc3QobWFuaWZlc3RXcmFwcGVyLmdldEhlYWRlckFjdGlvbnMoKSwgY29udmVydGVyQ29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCA9IGZ1bmN0aW9uICh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10sIGZpbHRlckJhcklkOiBzdHJpbmcpIHtcblx0dmlld3MuZm9yRWFjaCgodmlldykgPT4ge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uID0gKHZpZXcgYXMgU2luZ2xlVmlld0RlZmluaXRpb24pLnByZXNlbnRhdGlvbjtcblx0XHRcdHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9ucy5mb3JFYWNoKCh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRpZiAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQgJiYgdmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgIT09IGZpbHRlckJhcklkKSB7XG5cdFx0XHRcdFx0dmlzdWFsaXphdGlvbkRlZmluaXRpb24uZmlsdGVySWQgPSBmaWx0ZXJCYXJJZDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgTGlzdFJlcG9ydERlZmluaXRpb24gZm9yIG11bHRpcGxlIGVudGl0eSBzZXRzIChtdWx0aXBsZSB0YWJsZSBtb2RlKS5cbiAqXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIHtMaXN0UmVwb3J0RGVmaW5pdGlvbn0gVGhlIGxpc3QgcmVwb3J0IGRlZmluaXRpb24gYmFzZWQgb24gYW5ub3RhdGlvbiArIG1hbmlmZXN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0UGFnZSA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogTGlzdFJlcG9ydERlZmluaXRpb24ge1xuXHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udGV4dFBhdGgoKTtcblxuXHRpZiAoIXNDb250ZXh0UGF0aCkge1xuXHRcdC8vIElmIHdlIGRvbid0IGhhdmUgYW4gZW50aXR5U2V0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhbiBpc3N1ZSBJJ2Qgc2F5XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJBbiBFbnRpdHlTZXQgaXMgcmVxdWlyZWQgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGEgTGlzdFJlcG9ydCwgcGxlYXNlIGFkanVzdCB5b3VyIGBlbnRpdHlTZXRgIHByb3BlcnR5IHRvIHBvaW50IHRvIG9uZS5cIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0Y29uc3Qgdmlld3NEZWZpbml0aW9uOiBNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCA9IG1hbmlmZXN0V3JhcHBlci5nZXRWaWV3Q29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBoYXNNdWx0aXBsZUVudGl0eVNldHMgPSBtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVFbnRpdHlTZXRzKCk7XG5cdGNvbnN0IHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSA9IGdldFZpZXdzKGNvbnZlcnRlckNvbnRleHQsIHZpZXdzRGVmaW5pdGlvbik7XG5cdGNvbnN0IHNob3dUYWJDb3VudHMgPSB2aWV3c0RlZmluaXRpb24gPyB2aWV3c0RlZmluaXRpb24/LnNob3dDb3VudHMgfHwgaGFzTXVsdGlwbGVFbnRpdHlTZXRzIDogdW5kZWZpbmVkOyAvLyB3aXRoIG11bHRpIEVudGl0eVNldHMsIHRhYiBjb3VudHMgYXJlIGRpc3BsYXllZCBieSBkZWZhdWx0XG5cdGNvbnN0IGxyVGFibGVWaXN1YWxpemF0aW9ucyA9IGdldFRhYmxlVmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBsckNoYXJ0VmlzdWFsaXphdGlvbnMgPSBnZXRDaGFydFZpc3VhbGl6YXRpb25zKHZpZXdzKTtcblx0Y29uc3Qgc2hvd1Bpbm5hYmxlVG9nZ2xlID0gbHJUYWJsZVZpc3VhbGl6YXRpb25zLnNvbWUoKHRhYmxlKSA9PiB0YWJsZS5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIpO1xuXHRsZXQgc2luZ2xlVGFibGVJZCA9IFwiXCI7XG5cdGxldCBzaW5nbGVDaGFydElkID0gXCJcIjtcblx0Y29uc3QgZmlsdGVyQmFySWQgPSBGaWx0ZXJCYXJJRChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEID0gRmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRChmaWx0ZXJCYXJJZCk7XG5cdGNvbnN0IGZiQ29uZmlnID0gbWFuaWZlc3RXcmFwcGVyLmdldEZpbHRlckNvbmZpZ3VyYXRpb24oKTtcblx0Y29uc3QgZmlsdGVySW5pdGlhbExheW91dCA9IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0ICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZz8uaW5pdGlhbExheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IGZpbHRlckxheW91dCA9IGZiQ29uZmlnPy5sYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5sYXlvdXQudG9Mb3dlckNhc2UoKSA6IFwiY29tcGFjdFwiO1xuXHRjb25zdCB1c2VTZW1hbnRpY0RhdGVSYW5nZSA9IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlICE9PSB1bmRlZmluZWQgPyBmYkNvbmZpZy51c2VTZW1hbnRpY0RhdGVSYW5nZSA6IHRydWU7XG5cblx0Y29uc3Qgb0NvbmZpZyA9IGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dCwgdmlld3MpO1xuXHRpZiAob0NvbmZpZykge1xuXHRcdHNpbmdsZUNoYXJ0SWQgPSBvQ29uZmlnLmNoYXJ0SWQ7XG5cdFx0c2luZ2xlVGFibGVJZCA9IG9Db25maWcudGFibGVJZDtcblx0fVxuXG5cdC8vIENoYXJ0IGhhcyBhIGRlcGVuZGVuY3kgdG8gZmlsdGVyIGJhciAoaXNzdWUgd2l0aCBsb2FkaW5nIGRhdGEpLiBPbmNlIHJlc29sdmVkLCB0aGUgY2hlY2sgZm9yIGNoYXJ0IHNob3VsZCBiZSByZW1vdmVkIGhlcmUuXG5cdC8vIFVudGlsIHRoZW4sIGhpZGluZyBmaWx0ZXIgYmFyIGlzIG5vdyBhbGxvd2VkIGlmIGEgY2hhcnQgaXMgYmVpbmcgdXNlZCBvbiBMUi5cblx0Y29uc3QgaGlkZUZpbHRlckJhciA9IG1hbmlmZXN0V3JhcHBlci5pc0ZpbHRlckJhckhpZGRlbigpICYmIHNpbmdsZUNoYXJ0SWQgPT09IFwiXCI7XG5cdGNvbnN0IGxyRmlsdGVyUHJvcGVydGllcyA9IGdldFNlbGVjdGlvbkZpZWxkcyhjb252ZXJ0ZXJDb250ZXh0LCBsclRhYmxlVmlzdWFsaXphdGlvbnMpO1xuXHRjb25zdCBzZWxlY3Rpb25GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc2VsZWN0aW9uRmllbGRzO1xuXHRjb25zdCBwcm9wZXJ0eUluZm9GaWVsZHMgPSBsckZpbHRlclByb3BlcnRpZXMuc1Byb3BlcnR5SW5mbztcblx0Y29uc3QgaGlkZUJhc2ljU2VhcmNoID0gZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoKGxyVGFibGVWaXN1YWxpemF0aW9ucywgbHJDaGFydFZpc3VhbGl6YXRpb25zLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGdldFNlbGVjdGlvblZhcmlhbnQoZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzID0gdXNlU2VtYW50aWNEYXRlUmFuZ2UgPyBnZXREZWZhdWx0U2VtYW50aWNEYXRlcyhnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyhlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KSkgOiB7fTtcblxuXHQvLyBTb3J0IGhlYWRlciBhY3Rpb25zIGFjY29yZGluZyB0byBwb3NpdGlvbiBhdHRyaWJ1dGVzIGluIG1hbmlmZXN0XG5cdGNvbnN0IGhlYWRlckFjdGlvbnMgPSBnZXRIZWFkZXJBY3Rpb25zKGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuID1cblx0XHRtYW5pZmVzdFdyYXBwZXIuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8IGNvbnZlcnRlckNvbnRleHQuZ2V0VGVtcGxhdGVUeXBlKCkgPT09IFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U7XG5cdGlmIChoYXNNdWx0aXBsZUVudGl0eVNldHMpIHtcblx0XHRjaGVja0NoYXJ0RmlsdGVyQmFySWQodmlld3MsIGZpbHRlckJhcklkKTtcblx0fVxuXG5cdGNvbnN0IHZpc3VhbGl6YXRpb25JZHMgPSBsclRhYmxlVmlzdWFsaXphdGlvbnNcblx0XHQubWFwKCh2aXN1YWxpemF0aW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmlkO1xuXHRcdH0pXG5cdFx0LmNvbmNhdChcblx0XHRcdGxyQ2hhcnRWaXN1YWxpemF0aW9ucy5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIHZpc3VhbGl6YXRpb24uaWQ7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdGNvbnN0IHRhcmdldENvbnRyb2xJZHMgPSBbXG5cdFx0Li4uKGhpZGVGaWx0ZXJCYXIgPyBbXSA6IFtmaWx0ZXJCYXJJZF0pLFxuXHRcdC4uLihtYW5pZmVzdFdyYXBwZXIuZ2V0VmFyaWFudE1hbmFnZW1lbnQoKSAhPT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2wgPyB2aXN1YWxpemF0aW9uSWRzIDogW10pLFxuXHRcdC4uLighaGFzTXVsdGlWaXN1YWxpemF0aW9ucyAmJiB2aWV3cy5sZW5ndGggPiAxID8gW0ljb25UYWJCYXJJRCgpXSA6IFtdKVxuXHRdO1xuXG5cdGNvbnN0IGljb25UYWJCYXJJZCA9IFwiZmU6OlRhYk11bHRpcGxlTW9kZVwiO1xuXHRjb25zdCBkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyA9IHZpZXdzLmxlbmd0aCA+IDEgJiYgIWhhc011bHRpVmlzdWFsaXphdGlvbnM7XG5cdGNvbnN0IHN0aWNreVN1YmhlYWRlclByb3ZpZGVyID1cblx0XHRkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyAmJiBtYW5pZmVzdFdyYXBwZXIuZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uKCkgPyBpY29uVGFiQmFySWQgOiB1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHtcblx0XHRtYWluRW50aXR5U2V0OiBzQ29udGV4dFBhdGgsXG5cdFx0bWFpbkVudGl0eVR5cGU6IHNDb250ZXh0UGF0aCArIFwiL1wiLFxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdGljb25UYWJCYXJJZCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb252ZXJ0ZXIudHMiXSwibmFtZXMiOlsiZ2V0VGFibGVWaXN1YWxpemF0aW9ucyIsInZpZXdzIiwidGFibGVzIiwiZm9yRWFjaCIsInZpZXciLCJ0eXBlIiwidmlzdWFsaXphdGlvbnMiLCJzZWNvbmRhcnlWaXN1YWxpemF0aW9uIiwicHJlc2VudGF0aW9uIiwidmlzdWFsaXphdGlvbiIsIlZpc3VhbGl6YXRpb25UeXBlIiwiVGFibGUiLCJwdXNoIiwiZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyIsImNoYXJ0cyIsInByaW1hcnlWaXN1YWxpemF0aW9uIiwiQ2hhcnQiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlcyIsImZpbHRlckZpZWxkcyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZmlsdGVyRmllbGQiLCJzZXR0aW5ncyIsImRlZmF1bHRWYWx1ZXMiLCJsZW5ndGgiLCJnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbiIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYklzQUxQIiwiYW5ub3RhdGlvblBhdGgiLCJnZXRNYW5pZmVzdFdyYXBwZXIiLCJnZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCIsInNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQiLCJnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IiwicHJlc2VudGF0aW9uVmFyaWFudCIsIlByZXNlbnRhdGlvblZhcmlhbnQiLCJFcnJvciIsImJQVkNvbXBsYWludCIsImlzUHJlc2VudGF0aW9uQ29tcGxpYW50IiwidW5kZWZpbmVkIiwiaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQiLCJnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCIsImRlZmF1bHRMaW5lSXRlbSIsImdldERlZmF1bHRMaW5lSXRlbSIsImdldFZpZXciLCJ2aWV3Q29udmVydGVyQ29uZmlndXJhdGlvbiIsImNvbmZpZyIsImdldERhdGFWaXN1YWxpemF0aW9uQ29uZmlndXJhdGlvbiIsImFubm90YXRpb24iLCJnZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0RW50aXR5VHlwZSIsInRhYmxlQ29udHJvbElkIiwiY2hhcnRDb250cm9sSWQiLCJ0aXRsZSIsInNlbGVjdGlvblZhcmlhbnRQYXRoIiwiaXNNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIiwiY3VycmVudENvbmZpZyIsImtleSIsImNyZWF0ZVZpc3VhbGl6YXRpb24iLCJjdXJyZW50UHJlc2VudGF0aW9uIiwiaXNQcmltYXJ5IiwiZGVmYXVsdFZpc3VhbGl6YXRpb24iLCJwcmVzZW50YXRpb25DcmVhdGVkIiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0UHJlc2VudGF0aW9uIiwiaXRlbSIsInJlc29sdmVkVGFyZ2V0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJ0YXJnZXRBbm5vdGF0aW9uIiwiY3JlYXRlQWxwVmlldyIsInByZXNlbnRhdGlvbnMiLCJkZWZhdWx0UGF0aCIsImlkIiwidmlzaWJsZSIsImdldFRlbXBsYXRlVHlwZSIsIlRlbXBsYXRlVHlwZSIsIkFuYWx5dGljYWxMaXN0UGFnZSIsImhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5Iiwidmlld0Fubm90YXRpb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIlRleHQiLCJ2aXN1YWxpemF0aW9uRGVmaW5pdGlvbiIsImluZGV4IiwidGFibGVWaXN1YWxpemF0aW9uIiwiZmlsdGVycyIsImNvbnRyb2wiLCJoaWRkZW5GaWx0ZXJzIiwicGF0aHMiLCJrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24iLCJnZXRUYWJsZUlEIiwidGVybSIsIlNlbGVjdGlvblZhcmlhbnQiLCJzcGxpdCIsImNoYXJ0VmlzdWFsaXphdGlvbiIsImdldENoYXJ0SUQiLCJtdWx0aVZpZXdzIiwibGFiZWwiLCJmcmFnbWVudCIsInRlbXBsYXRlIiwiY3VzdG9tVGFiSWQiLCJnZXRDdXN0b21UYWJJRCIsImdldFZpZXdzIiwic2V0dGluZ3NWaWV3cyIsInZpZXdDb252ZXJ0ZXJDb25maWdzIiwicGF0aCIsIm1hbmlmZXN0V3JhcHBlciIsInZpZXdDb252ZXJ0ZXJDb250ZXh0IiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQiLCJnZXRBbHBWaWV3Q29uZmlnIiwibWFwIiwidmlld0NvbnZlcnRlckNvbmZpZyIsInZpZXdDb25maWdzIiwiY2hhcnQiLCJ0YWJsZSIsImdldERlZmF1bHRDaGFydCIsImdldEhlYWRlckFjdGlvbnMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEFjdGlvbnNGcm9tTWFuaWZlc3QiLCJjaGVja0NoYXJ0RmlsdGVyQmFySWQiLCJmaWx0ZXJCYXJJZCIsImZpbHRlcklkIiwiY29udmVydFBhZ2UiLCJzQ29udGV4dFBhdGgiLCJ2aWV3c0RlZmluaXRpb24iLCJnZXRWaWV3Q29uZmlndXJhdGlvbiIsImhhc011bHRpcGxlRW50aXR5U2V0cyIsInNob3dUYWJDb3VudHMiLCJzaG93Q291bnRzIiwibHJUYWJsZVZpc3VhbGl6YXRpb25zIiwibHJDaGFydFZpc3VhbGl6YXRpb25zIiwic2hvd1Bpbm5hYmxlVG9nZ2xlIiwic29tZSIsInNpbmdsZVRhYmxlSWQiLCJzaW5nbGVDaGFydElkIiwiZ2V0RmlsdGVyQmFySUQiLCJmaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEIiwiZ2V0RmlsdGVyVmFyaWFudE1hbmFnZW1lbnRJRCIsImZiQ29uZmlnIiwiZ2V0RmlsdGVyQ29uZmlndXJhdGlvbiIsImZpbHRlckluaXRpYWxMYXlvdXQiLCJpbml0aWFsTGF5b3V0IiwidG9Mb3dlckNhc2UiLCJmaWx0ZXJMYXlvdXQiLCJsYXlvdXQiLCJ1c2VTZW1hbnRpY0RhdGVSYW5nZSIsIm9Db25maWciLCJnZXRDb250ZW50QXJlYUlkIiwiY2hhcnRJZCIsInRhYmxlSWQiLCJoaWRlRmlsdGVyQmFyIiwiaXNGaWx0ZXJCYXJIaWRkZW4iLCJsckZpbHRlclByb3BlcnRpZXMiLCJnZXRTZWxlY3Rpb25GaWVsZHMiLCJzZWxlY3Rpb25GaWVsZHMiLCJwcm9wZXJ0eUluZm9GaWVsZHMiLCJzUHJvcGVydHlJbmZvIiwiaGlkZUJhc2ljU2VhcmNoIiwiZ2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoIiwic2VsZWN0aW9uVmFyaWFudCIsImdldFNlbGVjdGlvblZhcmlhbnQiLCJnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyIsImhlYWRlckFjdGlvbnMiLCJoYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwidmlzdWFsaXphdGlvbklkcyIsImNvbmNhdCIsInRhcmdldENvbnRyb2xJZHMiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvbnRyb2wiLCJnZXRJY29uVGFiQmFySUQiLCJpY29uVGFiQmFySWQiLCJkaXNwbGF5TXVsdGlWaXN1YWxpemF0aW9ucyIsInN0aWNreVN1YmhlYWRlclByb3ZpZGVyIiwiZ2V0U3RpY2t5TXVsdGlUYWJIZWFkZXJDb25maWd1cmF0aW9uIiwibWFpbkVudGl0eVNldCIsIm1haW5FbnRpdHlUeXBlIiwiZmlsdGVyQmFyIiwicHJvcGVydHlJbmZvIiwiZmlsdGVyQ29uZGl0aW9ucyIsInZhcmlhbnRNYW5hZ2VtZW50Iiwiam9pbiIsImlzTXVsdGlFbnRpdHlTZXRzIiwidGVtcGxhdGVUeXBlIiwia3BpRGVmaW5pdGlvbnMiLCJnZXRLUElEZWZpbml0aW9ucyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVNBLHNCQUFULENBQWdDQyxLQUFoQyxFQUF5RjtBQUN4RixRQUFNQyxNQUE0QixHQUFHLEVBQXJDO0FBQ0FELElBQUFBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLFVBQVVDLElBQVYsRUFBZ0I7QUFDN0IsVUFBSSxDQUFFQSxJQUFELENBQStCQyxJQUFwQyxFQUEwQztBQUN6QyxZQUFNQyxjQUFjLEdBQUlGLElBQUQsQ0FBaUNHLHNCQUFqQyxHQUNuQkgsSUFBRCxDQUFpQ0csc0JBQWpDLENBQXdERCxjQURwQyxHQUVuQkYsSUFBRCxDQUErQkksWUFBL0IsQ0FBNENGLGNBRi9DO0FBSUFBLFFBQUFBLGNBQWMsQ0FBQ0gsT0FBZixDQUF1QixVQUFVTSxhQUFWLEVBQXlCO0FBQy9DLGNBQUlBLGFBQWEsQ0FBQ0osSUFBZCxLQUF1QkssaUJBQWlCLENBQUNDLEtBQTdDLEVBQW9EO0FBQ25EVCxZQUFBQSxNQUFNLENBQUNVLElBQVAsQ0FBWUgsYUFBWjtBQUNBO0FBQ0QsU0FKRDtBQUtBO0FBQ0QsS0FaRDtBQWFBLFdBQU9QLE1BQVA7QUFDQTs7QUFFRCxXQUFTVyxzQkFBVCxDQUFnQ1osS0FBaEMsRUFBeUY7QUFDeEYsUUFBTWEsTUFBNEIsR0FBRyxFQUFyQztBQUNBYixJQUFBQSxLQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFVQyxJQUFWLEVBQWdCO0FBQzdCLFVBQUksQ0FBRUEsSUFBRCxDQUErQkMsSUFBcEMsRUFBMEM7QUFDekMsWUFBTUMsY0FBYyxHQUFJRixJQUFELENBQWlDVyxvQkFBakMsR0FDbkJYLElBQUQsQ0FBaUNXLG9CQUFqQyxDQUFzRFQsY0FEbEMsR0FFbkJGLElBQUQsQ0FBK0JJLFlBQS9CLENBQTRDRixjQUYvQztBQUlBQSxRQUFBQSxjQUFjLENBQUNILE9BQWYsQ0FBdUIsVUFBVU0sYUFBVixFQUF5QjtBQUMvQyxjQUFJQSxhQUFhLENBQUNKLElBQWQsS0FBdUJLLGlCQUFpQixDQUFDTSxLQUE3QyxFQUFvRDtBQUNuREYsWUFBQUEsTUFBTSxDQUFDRixJQUFQLENBQVlILGFBQVo7QUFDQTtBQUNELFNBSkQ7QUFLQTtBQUNELEtBWkQ7QUFhQSxXQUFPSyxNQUFQO0FBQ0E7O0FBRUQsTUFBTUcsdUJBQXVCLEdBQUcsVUFBVUMsWUFBVixFQUF1RztBQUN0SSxRQUFNQyxvQkFBeUIsR0FBRyxFQUFsQzs7QUFDQSxTQUFLLElBQU1DLFdBQVgsSUFBMEJGLFlBQTFCLEVBQXdDO0FBQUE7O0FBQ3ZDLG1DQUFJQSxZQUFZLENBQUNFLFdBQUQsQ0FBaEIsNEVBQUksc0JBQTJCQyxRQUEvQiw2RUFBSSx1QkFBcUNDLGFBQXpDLG1EQUFJLHVCQUFvREMsTUFBeEQsRUFBZ0U7QUFBQTs7QUFDL0RKLFFBQUFBLG9CQUFvQixDQUFDQyxXQUFELENBQXBCLDZCQUFvQ0YsWUFBWSxDQUFDRSxXQUFELENBQWhELHFGQUFvQyx1QkFBMkJDLFFBQS9ELDJEQUFvQyx1QkFBcUNDLGFBQXpFO0FBQ0E7QUFDRDs7QUFDRCxXQUFPSCxvQkFBUDtBQUNBLEdBUkQ7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTSyxtQ0FBVCxDQUNDQyxVQURELEVBRUNDLGdCQUZELEVBR0NDLE1BSEQsRUFJK0Y7QUFDOUYsUUFBTUMsY0FBYyxHQUFHRixnQkFBZ0IsQ0FBQ0csa0JBQWpCLEdBQXNDQyxnQ0FBdEMsRUFBdkI7QUFDQSxRQUFNQyw0QkFBNEIsR0FBR0MsK0JBQStCLENBQUNQLFVBQUQsRUFBYUcsY0FBYixFQUE2QkYsZ0JBQTdCLENBQXBFOztBQUNBLFFBQUlFLGNBQWMsSUFBSUcsNEJBQXRCLEVBQW9EO0FBQ25ELFVBQU1FLG9CQUFtQixHQUFHRiw0QkFBNEIsQ0FBQ0csbUJBQXpEOztBQUNBLFVBQUksQ0FBQ0Qsb0JBQUwsRUFBMEI7QUFDekIsY0FBTSxJQUFJRSxLQUFKLENBQVUsNkVBQVYsQ0FBTjtBQUNBOztBQUNELFVBQU1DLFlBQVksR0FBR0MsdUJBQXVCLENBQUNOLDRCQUE0QixDQUFDRyxtQkFBOUIsQ0FBNUM7O0FBQ0EsVUFBSSxDQUFDRSxZQUFMLEVBQW1CO0FBQ2xCLGVBQU9FLFNBQVA7QUFDQTs7QUFDRCxVQUFJQyxnQ0FBZ0MsQ0FBQ1IsNEJBQUQsRUFBK0JKLE1BQS9CLENBQXBDLEVBQTRFO0FBQzNFLGVBQU9JLDRCQUFQO0FBQ0E7QUFDRDs7QUFDRCxRQUFJQSw0QkFBSixFQUFrQztBQUNqQyxVQUFJUSxnQ0FBZ0MsQ0FBQ1IsNEJBQUQsRUFBK0JKLE1BQS9CLENBQXBDLEVBQTRFO0FBQzNFLGVBQU9JLDRCQUFQO0FBQ0E7QUFDRDs7QUFDRCxRQUFNRSxtQkFBbUIsR0FBR08sNkJBQTZCLENBQUNmLFVBQUQsQ0FBekQ7O0FBQ0EsUUFBSVEsbUJBQUosRUFBeUI7QUFDeEIsVUFBSUksdUJBQXVCLENBQUNKLG1CQUFELEVBQXNCTixNQUF0QixDQUEzQixFQUEwRDtBQUN6RCxlQUFPTSxtQkFBUDtBQUNBO0FBQ0Q7O0FBQ0QsUUFBSSxDQUFDTixNQUFMLEVBQWE7QUFDWixVQUFNYyxlQUFlLEdBQUdDLGtCQUFrQixDQUFDakIsVUFBRCxDQUExQzs7QUFDQSxVQUFJZ0IsZUFBSixFQUFxQjtBQUNwQixlQUFPQSxlQUFQO0FBQ0E7QUFDRDs7QUFDRCxXQUFPSCxTQUFQO0FBQ0E7O0FBRUQsTUFBTUssT0FBTyxHQUFHLFVBQVVDLDBCQUFWLEVBQXVGO0FBQ3RHLFFBQUlDLE1BQU0sR0FBR0QsMEJBQWI7O0FBQ0EsUUFBSUMsTUFBTSxDQUFDbkIsZ0JBQVgsRUFBNkI7QUFBQTs7QUFDNUIsVUFBSUEsZ0JBQWdCLEdBQUdtQixNQUFNLENBQUNuQixnQkFBOUI7QUFDQW1CLE1BQUFBLE1BQU0sR0FBR0EsTUFBVDtBQUNBLFVBQUlyQyxZQUF5QyxHQUFHc0MsaUNBQWlDLENBQ2hGRCxNQUFNLENBQUNFLFVBQVAsR0FDR3JCLGdCQUFnQixDQUFDc0IseUJBQWpCLENBQTJDSCxNQUFNLENBQUNFLFVBQVAsQ0FBa0JFLGtCQUE3RCxFQUFpRnZCLGdCQUFnQixDQUFDd0IsYUFBakIsRUFBakYsQ0FESCxHQUVHLEVBSDZFLEVBSWhGLElBSmdGLEVBS2hGeEIsZ0JBTGdGLEVBTWhGbUIsTUFOZ0YsQ0FBakY7QUFRQSxVQUFJTSxjQUFjLEdBQUcsRUFBckI7QUFDQSxVQUFJQyxjQUFjLEdBQUcsRUFBckI7QUFDQSxVQUFJQyxLQUF5QixHQUFHLEVBQWhDO0FBQ0EsVUFBSUMsb0JBQW9CLEdBQUcsRUFBM0I7O0FBQ0EsVUFBTUMsMkJBQTJCLEdBQUcsVUFBVUMsYUFBVixFQUF3RjtBQUMzSCxlQUFRQSxhQUFELENBQTZDQyxHQUE3QyxLQUFxRG5CLFNBQTVEO0FBQ0EsT0FGRDs7QUFHQSxVQUFNb0IsbUJBQW1CLEdBQUcsVUFBVUMsbUJBQVYsRUFBNERDLFNBQTVELEVBQWlGO0FBQzVHLFlBQUlDLG9CQUFKOztBQUQ0RyxtREFFaEZGLG1CQUFtQixDQUFDckQsY0FGNEQ7QUFBQTs7QUFBQTtBQUU1Ryw4REFBZ0U7QUFBQSxnQkFBckRHLGFBQXFEOztBQUMvRCxnQkFBSW1ELFNBQVMsSUFBSW5ELGFBQWEsQ0FBQ0osSUFBZCxLQUF1QkssaUJBQWlCLENBQUNNLEtBQTFELEVBQWlFO0FBQ2hFNkMsY0FBQUEsb0JBQW9CLEdBQUdwRCxhQUF2QjtBQUNBO0FBQ0E7O0FBQ0QsZ0JBQUksQ0FBQ21ELFNBQUQsSUFBY25ELGFBQWEsQ0FBQ0osSUFBZCxLQUF1QkssaUJBQWlCLENBQUNDLEtBQTNELEVBQWtFO0FBQ2pFa0QsY0FBQUEsb0JBQW9CLEdBQUdwRCxhQUF2QjtBQUNBO0FBQ0E7QUFDRDtBQVgyRztBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVk1RyxZQUFNcUQsbUJBQW1CLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JMLG1CQUFsQixDQUE1Qjs7QUFDQSxZQUFJRSxvQkFBSixFQUEwQjtBQUN6QkMsVUFBQUEsbUJBQW1CLENBQUN4RCxjQUFwQixHQUFxQyxDQUFDdUQsb0JBQUQsQ0FBckM7QUFDQTs7QUFDRCxlQUFPQyxtQkFBUDtBQUNBLE9BakJEOztBQWtCQSxVQUFNRyxlQUFlLEdBQUcsVUFBVUMsSUFBVixFQUE2QztBQUNwRSxZQUFNQyxjQUFjLEdBQUd6QyxnQkFBZ0IsQ0FBQzBDLHVCQUFqQixDQUF5Q0YsSUFBSSxDQUFDdEMsY0FBOUMsQ0FBdkI7QUFDQSxZQUFNeUMsZ0JBQWdCLEdBQUdGLGNBQWMsQ0FBQ3BCLFVBQXhDO0FBQ0FyQixRQUFBQSxnQkFBZ0IsR0FBR3lDLGNBQWMsQ0FBQ3pDLGdCQUFsQztBQUNBLFlBQU1xQixVQUFVLEdBQUdzQixnQkFBbkI7QUFDQTdELFFBQUFBLFlBQVksR0FBR3NDLGlDQUFpQyxDQUMvQ0MsVUFBVSxHQUNQckIsZ0JBQWdCLENBQUNzQix5QkFBakIsQ0FBMkNELFVBQVUsQ0FBQ0Usa0JBQXRELEVBQTBFdkIsZ0JBQWdCLENBQUN3QixhQUFqQixFQUExRSxDQURPLEdBRVAsRUFINEMsRUFJL0MsSUFKK0MsRUFLL0N4QixnQkFMK0MsRUFNL0NtQixNQU4rQyxDQUFoRDtBQVFBLGVBQU9yQyxZQUFQO0FBQ0EsT0FkRDs7QUFlQSxVQUFNOEQsYUFBYSxHQUFHLFVBQ3JCQyxhQURxQixFQUVyQkMsV0FGcUIsRUFHcEI7QUFDRCxZQUFNekQsb0JBQTZELEdBQUcyQyxtQkFBbUIsQ0FBQ2EsYUFBYSxDQUFDLENBQUQsQ0FBZCxFQUFtQixJQUFuQixDQUF6RjtBQUNBbkIsUUFBQUEsY0FBYyxHQUFHLENBQUNyQyxvQkFBRCxhQUFDQSxvQkFBRCx1QkFBQ0Esb0JBQW9CLENBQUVULGNBQXRCLENBQXFDLENBQXJDLENBQUQsRUFBZ0VtRSxFQUFqRjtBQUNBLFlBQU1sRSxzQkFBK0QsR0FBR21ELG1CQUFtQixDQUMxRmEsYUFBYSxDQUFDLENBQUQsQ0FBYixHQUFtQkEsYUFBYSxDQUFDLENBQUQsQ0FBaEMsR0FBc0NBLGFBQWEsQ0FBQyxDQUFELENBRHVDLENBQTNGO0FBR0FwQixRQUFBQSxjQUFjLEdBQUcsQ0FBQzVDLHNCQUFELGFBQUNBLHNCQUFELHVCQUFDQSxzQkFBc0IsQ0FBRUQsY0FBeEIsQ0FBdUMsQ0FBdkMsQ0FBRCxFQUFrRXlDLFVBQWxFLENBQTZFMEIsRUFBOUY7O0FBQ0EsWUFBSTFELG9CQUFvQixJQUFJUixzQkFBNUIsRUFBb0Q7QUFDbkRzQyxVQUFBQSxNQUFNLEdBQUdBLE1BQVQ7QUFDQSxjQUFNNkIsUUFBTyxHQUFHN0IsTUFBTSxDQUFDNkIsT0FBdkI7QUFDQSxjQUFNdEUsSUFBNEIsR0FBRztBQUNwQ1csWUFBQUEsb0JBQW9CLEVBQXBCQSxvQkFEb0M7QUFFcENSLFlBQUFBLHNCQUFzQixFQUF0QkEsc0JBRm9DO0FBR3BDNEMsWUFBQUEsY0FBYyxFQUFkQSxjQUhvQztBQUlwQ0MsWUFBQUEsY0FBYyxFQUFkQSxjQUpvQztBQUtwQ29CLFlBQUFBLFdBQVcsRUFBWEEsV0FMb0M7QUFNcENFLFlBQUFBLE9BQU8sRUFBUEE7QUFOb0MsV0FBckM7QUFRQSxpQkFBT3RFLElBQVA7QUFDQTtBQUNELE9BdkJEOztBQXdCQSxVQUFJLGtCQUFBSSxZQUFZLFVBQVosK0VBQWNGLGNBQWQsZ0ZBQThCaUIsTUFBOUIsTUFBeUMsQ0FBekMsSUFBOENHLGdCQUFnQixDQUFDaUQsZUFBakIsT0FBdUNDLFlBQVksQ0FBQ0Msa0JBQXRHLEVBQTBIO0FBQ3pILFlBQU16RSxJQUF3QyxHQUFHa0UsYUFBYSxDQUFDLENBQUM5RCxZQUFELENBQUQsRUFBaUIsTUFBakIsQ0FBOUQ7O0FBQ0EsWUFBSUosSUFBSixFQUFVO0FBQ1QsaUJBQU9BLElBQVA7QUFDQTtBQUNELE9BTEQsTUFLTyxJQUNOc0IsZ0JBQWdCLENBQUNHLGtCQUFqQixHQUFzQ2lELHlCQUF0QyxDQUFnRWpDLE1BQWhFLEtBQ0FuQixnQkFBZ0IsQ0FBQ2lELGVBQWpCLE9BQXVDQyxZQUFZLENBQUNDLGtCQUY5QyxFQUdMO0FBQ0QsbUJBQStCaEMsTUFBL0I7QUFBQSxZQUFRa0MsT0FBUixRQUFRQSxPQUFSO0FBQUEsWUFBaUJDLFNBQWpCLFFBQWlCQSxTQUFqQjs7QUFDQSxZQUFJRCxPQUFPLElBQUlBLE9BQU8sQ0FBQ3hELE1BQW5CLElBQTZCeUQsU0FBN0IsSUFBMENBLFNBQVMsQ0FBQ3pELE1BQXhELEVBQWdFO0FBQy9ELGNBQU1uQixLQUF3QyxHQUFHa0UsYUFBYSxDQUM3RCxDQUFDTCxlQUFlLENBQUNjLE9BQU8sQ0FBQyxDQUFELENBQVIsQ0FBaEIsRUFBOEJkLGVBQWUsQ0FBQ2UsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUE3QyxDQUQ2RCxFQUU1RG5DLE1BQUQsQ0FBMEMyQixXQUZtQixDQUE5RDs7QUFJQSxjQUFJcEUsS0FBSixFQUFVO0FBQ1QsbUJBQU9BLEtBQVA7QUFDQTtBQUNELFNBUkQsTUFRTztBQUNOLGdCQUFNLElBQUkrQixLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNBO0FBQ0QsT0FoQk0sTUFnQkEsSUFBSW9CLDJCQUEyQixDQUFDVixNQUFELENBQS9CLEVBQXlDO0FBQy9DO0FBQ0EsWUFBTXNCLGNBQWMsR0FBR3pDLGdCQUFnQixDQUFDMEMsdUJBQWpCLENBQTBDdkIsTUFBRCxDQUF3Q2pCLGNBQWpGLENBQXZCO0FBQ0EsWUFBTXFELGNBQXdDLEdBQUdkLGNBQWMsQ0FBQ3BCLFVBQWhFO0FBQ0FyQixRQUFBQSxnQkFBZ0IsR0FBR3lDLGNBQWMsQ0FBQ3pDLGdCQUFsQztBQUNBMkIsUUFBQUEsS0FBSyxHQUFHNkIsaUJBQWlCLENBQUNDLDJCQUEyQixDQUFDRixjQUFjLENBQUNHLElBQWhCLENBQTVCLENBQXpCLENBTCtDLENBTS9DOztBQUNBNUUsUUFBQUEsWUFBWSxDQUFDRixjQUFiLENBQTRCSCxPQUE1QixDQUFvQyxVQUFDa0YsdUJBQUQsRUFBMEJDLEtBQTFCLEVBQW9DO0FBQ3ZFLGtCQUFRRCx1QkFBdUIsQ0FBQ2hGLElBQWhDO0FBQ0MsaUJBQUtLLGlCQUFpQixDQUFDQyxLQUF2QjtBQUNDLGtCQUFNNEUsa0JBQWtCLEdBQUcvRSxZQUFZLENBQUNGLGNBQWIsQ0FBNEJnRixLQUE1QixDQUEzQjtBQUNBLGtCQUFNRSxPQUFPLEdBQUdELGtCQUFrQixDQUFDRSxPQUFuQixDQUEyQkQsT0FBM0IsSUFBc0MsRUFBdEQ7QUFDQUEsY0FBQUEsT0FBTyxDQUFDRSxhQUFSLEdBQXdCRixPQUFPLENBQUNFLGFBQVIsSUFBeUI7QUFBRUMsZ0JBQUFBLEtBQUssRUFBRTtBQUFULGVBQWpEOztBQUNBLGtCQUFJLENBQUU5QyxNQUFELENBQXdDK0MsMkJBQTdDLEVBQTBFO0FBQ3pFO0FBQ0FMLGdCQUFBQSxrQkFBa0IsQ0FBQ3hDLFVBQW5CLENBQThCMEIsRUFBOUIsR0FBbUNvQixVQUFVLENBQUVoRCxNQUFELENBQXdDWSxHQUF4QyxJQUErQyxFQUFoRCxFQUFvRCxVQUFwRCxDQUE3QztBQUNBOztBQUNEWixjQUFBQSxNQUFNLEdBQUdBLE1BQVQ7O0FBQ0Esa0JBQUlBLE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxVQUFqQixJQUErQkYsTUFBTSxDQUFDRSxVQUFQLENBQWtCK0MsSUFBbEIsOERBQW5DLEVBQThHO0FBQzdHeEMsZ0JBQUFBLG9CQUFvQixHQUNuQlQsTUFBTSxDQUFDRSxVQURlLENBRXJCZ0QsZ0JBRnFCLENBRUo5QyxrQkFGSSxDQUVlK0MsS0FGZixDQUVxQixHQUZyQixFQUUwQixDQUYxQixDQUF2QjtBQUdBLGVBSkQsTUFJTztBQUNOMUMsZ0JBQUFBLG9CQUFvQixHQUFJVCxNQUFELENBQXdDakIsY0FBL0Q7QUFDQSxlQWZGLENBZ0JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBNEQsY0FBQUEsT0FBTyxDQUFDRSxhQUFSLENBQXNCQyxLQUF0QixDQUE0Qi9FLElBQTVCLENBQWlDO0FBQUVnQixnQkFBQUEsY0FBYyxFQUFFMEI7QUFBbEIsZUFBakM7QUFDQWlDLGNBQUFBLGtCQUFrQixDQUFDRSxPQUFuQixDQUEyQkQsT0FBM0IsR0FBcUNBLE9BQXJDO0FBQ0E7O0FBQ0QsaUJBQUs5RSxpQkFBaUIsQ0FBQ00sS0FBdkI7QUFDQyxrQkFBTWlGLGtCQUFrQixHQUFHekYsWUFBWSxDQUFDRixjQUFiLENBQTRCZ0YsS0FBNUIsQ0FBM0I7QUFDQVcsY0FBQUEsa0JBQWtCLENBQUN4QixFQUFuQixHQUF3QnlCLFVBQVUsQ0FBRXJELE1BQUQsQ0FBd0NZLEdBQXhDLElBQStDLEVBQWhELEVBQW9ELE9BQXBELENBQWxDO0FBQ0F3QyxjQUFBQSxrQkFBa0IsQ0FBQ0UsVUFBbkIsR0FBZ0MsSUFBaEM7QUFDQTs7QUFDRDtBQUNDO0FBL0JGO0FBaUNBLFNBbENEO0FBbUNBOztBQUNEM0YsTUFBQUEsWUFBWSxDQUFDRixjQUFiLENBQTRCSCxPQUE1QixDQUFvQyxVQUFDa0YsdUJBQUQsRUFBNkI7QUFDaEUsWUFBSUEsdUJBQXVCLENBQUNoRixJQUF4QixLQUFpQ0ssaUJBQWlCLENBQUNDLEtBQXZELEVBQThEO0FBQzdEd0MsVUFBQUEsY0FBYyxHQUFHa0MsdUJBQXVCLENBQUN0QyxVQUF4QixDQUFtQzBCLEVBQXBEO0FBQ0EsU0FGRCxNQUVPLElBQUlZLHVCQUF1QixDQUFDaEYsSUFBeEIsS0FBaUNLLGlCQUFpQixDQUFDTSxLQUF2RCxFQUE4RDtBQUNwRW9DLFVBQUFBLGNBQWMsR0FBR2lDLHVCQUF1QixDQUFDWixFQUF6QztBQUNBO0FBQ0QsT0FORDtBQU9BNUIsTUFBQUEsTUFBTSxHQUFHQSxNQUFUO0FBQ0EsVUFBTTZCLE9BQU8sR0FBRzdCLE1BQU0sQ0FBQzZCLE9BQXZCO0FBQ0EsYUFBTztBQUNObEUsUUFBQUEsWUFBWSxFQUFaQSxZQURNO0FBRU4yQyxRQUFBQSxjQUFjLEVBQWRBLGNBRk07QUFHTkMsUUFBQUEsY0FBYyxFQUFkQSxjQUhNO0FBSU5DLFFBQUFBLEtBQUssRUFBTEEsS0FKTTtBQUtOQyxRQUFBQSxvQkFBb0IsRUFBcEJBLG9CQUxNO0FBTU5vQixRQUFBQSxPQUFPLEVBQVBBO0FBTk0sT0FBUDtBQVFBLEtBNUpELE1BNEpPO0FBQ043QixNQUFBQSxNQUFNLEdBQUdBLE1BQVQ7QUFDQSxVQUFNUSxNQUFLLEdBQUdSLE1BQU0sQ0FBQ3VELEtBQXJCO0FBQUEsVUFDQ0MsUUFBUSxHQUFHeEQsTUFBTSxDQUFDeUQsUUFEbkI7QUFBQSxVQUVDakcsSUFBSSxHQUFHd0MsTUFBTSxDQUFDeEMsSUFGZjtBQUFBLFVBR0NrRyxXQUFXLEdBQUdDLGNBQWMsQ0FBQzNELE1BQU0sQ0FBQ1ksR0FBUCxJQUFjLEVBQWYsQ0FIN0I7QUFBQSxVQUlDaUIsU0FBTyxHQUFHN0IsTUFBTSxDQUFDNkIsT0FKbEI7QUFLQSxhQUFPO0FBQ05yQixRQUFBQSxLQUFLLEVBQUxBLE1BRE07QUFFTmdELFFBQUFBLFFBQVEsRUFBUkEsUUFGTTtBQUdOaEcsUUFBQUEsSUFBSSxFQUFKQSxJQUhNO0FBSU5rRyxRQUFBQSxXQUFXLEVBQVhBLFdBSk07QUFLTjdCLFFBQUFBLE9BQU8sRUFBUEE7QUFMTSxPQUFQO0FBT0E7QUFDRCxHQTdLRDs7QUErS0EsTUFBTStCLFFBQVEsR0FBRyxVQUNoQi9FLGdCQURnQixFQUVoQmdGLGFBRmdCLEVBR2E7QUFDN0IsUUFBSUMsb0JBQTZDLEdBQUcsRUFBcEQ7O0FBQ0EsUUFBSUQsYUFBSixFQUFtQjtBQUNsQkEsTUFBQUEsYUFBYSxDQUFDZixLQUFkLENBQW9CeEYsT0FBcEIsQ0FBNEIsVUFBQ3lHLElBQUQsRUFBbUU7QUFDOUYsWUFBSWxGLGdCQUFnQixDQUFDRyxrQkFBakIsR0FBc0NpRCx5QkFBdEMsQ0FBZ0U4QixJQUFoRSxDQUFKLEVBQW9HO0FBQ25HLGNBQUlGLGFBQWEsQ0FBQ2YsS0FBZCxDQUFvQnBFLE1BQXBCLEdBQTZCLENBQWpDLEVBQW9DO0FBQ25DLGtCQUFNLElBQUlZLEtBQUosQ0FBVSx1Q0FBVixDQUFOO0FBQ0EsV0FGRCxNQUVPO0FBQ055RSxZQUFBQSxJQUFJLEdBQUdBLElBQVA7QUFDQUQsWUFBQUEsb0JBQW9CLENBQUMvRixJQUFyQixDQUEwQjtBQUN6QmMsY0FBQUEsZ0JBQWdCLEVBQUVBLGdCQURPO0FBRXpCcUQsY0FBQUEsT0FBTyxFQUFFNkIsSUFBSSxDQUFDN0IsT0FGVztBQUd6QkMsY0FBQUEsU0FBUyxFQUFFNEIsSUFBSSxDQUFDNUIsU0FIUztBQUl6QlIsY0FBQUEsV0FBVyxFQUFFb0MsSUFBSSxDQUFDcEM7QUFKTyxhQUExQjtBQU1BO0FBQ0QsU0FaRCxNQVlPLElBQUtvQyxJQUFELENBQWtDTixRQUF0QyxFQUFnRDtBQUN0RE0sVUFBQUEsSUFBSSxHQUFHQSxJQUFQO0FBQ0FELFVBQUFBLG9CQUFvQixDQUFDL0YsSUFBckIsQ0FBMEI7QUFDekI2QyxZQUFBQSxHQUFHLEVBQUVtRCxJQUFJLENBQUNuRCxHQURlO0FBRXpCMkMsWUFBQUEsS0FBSyxFQUFFUSxJQUFJLENBQUNSLEtBRmE7QUFHekJFLFlBQUFBLFFBQVEsRUFBRU0sSUFBSSxDQUFDTixRQUhVO0FBSXpCakcsWUFBQUEsSUFBSSxFQUFFLFFBSm1CO0FBS3pCcUUsWUFBQUEsT0FBTyxFQUFFa0MsSUFBSSxDQUFDbEM7QUFMVyxXQUExQjtBQU9BLFNBVE0sTUFTQTtBQUNOa0MsVUFBQUEsSUFBSSxHQUFHQSxJQUFQO0FBQ0EsY0FBTUMsZUFBZSxHQUFHbkYsZ0JBQWdCLENBQUNHLGtCQUFqQixFQUF4QjtBQUFBLGNBQ0NpRixvQkFBb0IsR0FBR3BGLGdCQUFnQixDQUFDcUYsc0JBQWpCLENBQ3RCSCxJQUFJLENBQUNJLFdBQUwsSUFBcUJKLElBQUksQ0FBQ0ssU0FBTCxlQUFzQkwsSUFBSSxDQUFDSyxTQUEzQixDQUFyQixJQUFnRXZGLGdCQUFnQixDQUFDd0YsY0FBakIsRUFEMUMsQ0FEeEI7QUFBQSxjQUlDekYsVUFBVSxHQUFHcUYsb0JBQW9CLENBQUM1RCxhQUFyQixFQUpkOztBQU1BLGNBQUl6QixVQUFVLElBQUlxRixvQkFBbEIsRUFBd0M7QUFDdkMsZ0JBQU1sRixjQUFjLEdBQUdpRixlQUFlLENBQUMvRSxnQ0FBaEIsRUFBdkI7QUFDQSxnQkFBSWlCLFVBQUo7QUFDQSxnQkFBTW9CLGNBQWMsR0FBRzJDLG9CQUFvQixDQUFDMUMsdUJBQXJCLENBQTZDd0MsSUFBSSxDQUFDaEYsY0FBbEQsQ0FBdkI7QUFDQSxnQkFBTXlDLGdCQUFnQixHQUFHRixjQUFjLENBQUNwQixVQUF4QztBQUNBLGdCQUFNb0UsOEJBQThCLEdBQUdoRCxjQUFjLENBQUN6QyxnQkFBdEQ7O0FBQ0EsZ0JBQUkyQyxnQkFBSixFQUFzQjtBQUNyQixrQkFBSUEsZ0JBQWdCLENBQUN5QixJQUFqQixrREFBSixFQUFrRTtBQUNqRSxvQkFBSWxFLGNBQUosRUFBb0I7QUFDbkJtQixrQkFBQUEsVUFBVSxHQUFHZiwrQkFBK0IsQ0FDM0M4RSxvQkFBb0IsQ0FBQzVELGFBQXJCLEVBRDJDLEVBRTNDdEIsY0FGMkMsRUFHM0N1Riw4QkFIMkMsQ0FBNUM7QUFLQSxpQkFORCxNQU1PO0FBQ05wRSxrQkFBQUEsVUFBVSxHQUFHTCxrQkFBa0IsQ0FBQ29FLG9CQUFvQixDQUFDNUQsYUFBckIsRUFBRCxDQUEvQjtBQUNBO0FBQ0QsZUFWRCxNQVVPO0FBQ05ILGdCQUFBQSxVQUFVLEdBQUdzQixnQkFBYjtBQUNBOztBQUNEc0MsY0FBQUEsb0JBQW9CLENBQUMvRixJQUFyQixDQUEwQjtBQUN6QmMsZ0JBQUFBLGdCQUFnQixFQUFFb0Ysb0JBRE87QUFFekIvRCxnQkFBQUEsVUFBVSxFQUFWQSxVQUZ5QjtBQUd6Qm5CLGdCQUFBQSxjQUFjLEVBQUVnRixJQUFJLENBQUNoRixjQUhJO0FBSXpCZ0UsZ0JBQUFBLDJCQUEyQixFQUFFZ0IsSUFBSSxDQUFDaEIsMkJBSlQ7QUFLekJuQyxnQkFBQUEsR0FBRyxFQUFFbUQsSUFBSSxDQUFDbkQsR0FMZTtBQU16QmlCLGdCQUFBQSxPQUFPLEVBQUVrQyxJQUFJLENBQUNsQztBQU5XLGVBQTFCO0FBUUE7QUFDRCxXQTdCRCxNQTZCTyxDQUNOO0FBQ0E7QUFDRDtBQUNELE9BL0REO0FBZ0VBLEtBakVELE1BaUVPO0FBQ04sVUFBTWpELFVBQVUsR0FBR0MsZ0JBQWdCLENBQUN3QixhQUFqQixFQUFuQjs7QUFDQSxVQUFJeEIsZ0JBQWdCLENBQUNpRCxlQUFqQixPQUF1Q0MsWUFBWSxDQUFDQyxrQkFBeEQsRUFBNEU7QUFDM0U4QixRQUFBQSxvQkFBb0IsR0FBR1MsZ0JBQWdCLENBQUMxRixnQkFBRCxFQUFtQmlGLG9CQUFuQixDQUF2QztBQUNBLE9BRkQsTUFFTztBQUNOQSxRQUFBQSxvQkFBb0IsQ0FBQy9GLElBQXJCLENBQTBCO0FBQ3pCbUMsVUFBQUEsVUFBVSxFQUFFdkIsbUNBQW1DLENBQUNDLFVBQUQsRUFBYUMsZ0JBQWIsRUFBK0IsS0FBL0IsQ0FEdEI7QUFFekJBLFVBQUFBLGdCQUFnQixFQUFFQTtBQUZPLFNBQTFCO0FBSUE7QUFDRDs7QUFDRCxXQUFPaUYsb0JBQW9CLENBQUNVLEdBQXJCLENBQXlCLFVBQUNDLG1CQUFELEVBQXlCO0FBQ3hELGFBQU8zRSxPQUFPLENBQUMyRSxtQkFBRCxDQUFkO0FBQ0EsS0FGTSxDQUFQO0FBR0EsR0FwRkQ7O0FBc0ZBLFdBQVNGLGdCQUFULENBQTBCMUYsZ0JBQTFCLEVBQThENkYsV0FBOUQsRUFBNkg7QUFDNUgsUUFBTTlGLFVBQVUsR0FBR0MsZ0JBQWdCLENBQUN3QixhQUFqQixFQUFuQjtBQUNBLFFBQU1ILFVBQVUsR0FBR3ZCLG1DQUFtQyxDQUFDQyxVQUFELEVBQWFDLGdCQUFiLEVBQStCLElBQS9CLENBQXREO0FBQ0EsUUFBSThGLEtBQUosRUFBV0MsS0FBWDs7QUFDQSxRQUFJMUUsVUFBSixFQUFnQjtBQUNmd0UsTUFBQUEsV0FBVyxDQUFDM0csSUFBWixDQUFpQjtBQUNoQm1DLFFBQUFBLFVBQVUsRUFBRUEsVUFESTtBQUVoQnJCLFFBQUFBLGdCQUFnQixFQUFoQkE7QUFGZ0IsT0FBakI7QUFJQSxLQUxELE1BS087QUFDTjhGLE1BQUFBLEtBQUssR0FBR0UsZUFBZSxDQUFDakcsVUFBRCxDQUF2QjtBQUNBZ0csTUFBQUEsS0FBSyxHQUFHL0Usa0JBQWtCLENBQUNqQixVQUFELENBQTFCOztBQUNBLFVBQUkrRixLQUFLLElBQUlDLEtBQWIsRUFBb0I7QUFDbkIsWUFBTTFDLE9BQXNDLEdBQUcsQ0FBQztBQUFFbkQsVUFBQUEsY0FBYyxFQUFFNEYsS0FBSyxDQUFDMUI7QUFBeEIsU0FBRCxDQUEvQztBQUNBLFlBQU1kLFNBQXdDLEdBQUcsQ0FBQztBQUFFcEQsVUFBQUEsY0FBYyxFQUFFNkYsS0FBSyxDQUFDM0I7QUFBeEIsU0FBRCxDQUFqRDtBQUNBeUIsUUFBQUEsV0FBVyxDQUFDM0csSUFBWixDQUFpQjtBQUNoQmMsVUFBQUEsZ0JBQWdCLEVBQUVBLGdCQURGO0FBRWhCcUQsVUFBQUEsT0FBTyxFQUFFQSxPQUZPO0FBR2hCQyxVQUFBQSxTQUFTLEVBQUVBLFNBSEs7QUFJaEJSLFVBQUFBLFdBQVcsRUFBRTtBQUpHLFNBQWpCO0FBTUE7QUFDRDs7QUFDRCxXQUFPK0MsV0FBUDtBQUNBOztBQUVNLE1BQU1JLGdCQUFnQixHQUFHLFVBQVVqRyxnQkFBVixFQUE0RDtBQUMzRixRQUFNbUYsZUFBZSxHQUFHbkYsZ0JBQWdCLENBQUNHLGtCQUFqQixFQUF4QjtBQUNBLFdBQU8rRixvQkFBb0IsQ0FBQyxFQUFELEVBQUtDLHNCQUFzQixDQUFDaEIsZUFBZSxDQUFDYyxnQkFBaEIsRUFBRCxFQUFxQ2pHLGdCQUFyQyxDQUEzQixDQUEzQjtBQUNBLEdBSE07Ozs7QUFLQSxNQUFNb0cscUJBQXFCLEdBQUcsVUFBVTdILEtBQVYsRUFBNkM4SCxXQUE3QyxFQUFrRTtBQUN0RzlILElBQUFBLEtBQUssQ0FBQ0UsT0FBTixDQUFjLFVBQUNDLElBQUQsRUFBVTtBQUN2QixVQUFJLENBQUVBLElBQUQsQ0FBK0JDLElBQXBDLEVBQTBDO0FBQ3pDLFlBQU1HLFlBQXlDLEdBQUlKLElBQUQsQ0FBK0JJLFlBQWpGO0FBQ0FBLFFBQUFBLFlBQVksQ0FBQ0YsY0FBYixDQUE0QkgsT0FBNUIsQ0FBb0MsVUFBQ2tGLHVCQUFELEVBQTZCO0FBQ2hFLGNBQUlBLHVCQUF1QixDQUFDaEYsSUFBeEIsS0FBaUNLLGlCQUFpQixDQUFDTSxLQUFuRCxJQUE0RHFFLHVCQUF1QixDQUFDMkMsUUFBeEIsS0FBcUNELFdBQXJHLEVBQWtIO0FBQ2pIMUMsWUFBQUEsdUJBQXVCLENBQUMyQyxRQUF4QixHQUFtQ0QsV0FBbkM7QUFDQTtBQUNELFNBSkQ7QUFLQTtBQUNELEtBVEQ7QUFVQSxHQVhNO0FBYVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUNPLE1BQU1FLFdBQVcsR0FBRyxVQUFVdkcsZ0JBQVYsRUFBb0U7QUFDOUYsUUFBTUQsVUFBVSxHQUFHQyxnQkFBZ0IsQ0FBQ3dCLGFBQWpCLEVBQW5CO0FBQ0EsUUFBTWdGLFlBQVksR0FBR3hHLGdCQUFnQixDQUFDd0YsY0FBakIsRUFBckI7O0FBRUEsUUFBSSxDQUFDZ0IsWUFBTCxFQUFtQjtBQUNsQjtBQUNBLFlBQU0sSUFBSS9GLEtBQUosQ0FDTCx1SEFESyxDQUFOO0FBR0E7O0FBQ0QsUUFBTTBFLGVBQWUsR0FBR25GLGdCQUFnQixDQUFDRyxrQkFBakIsRUFBeEI7QUFDQSxRQUFNc0csZUFBdUQsR0FBR3RCLGVBQWUsQ0FBQ3VCLG9CQUFoQixFQUFoRTtBQUNBLFFBQU1DLHFCQUFxQixHQUFHeEIsZUFBZSxDQUFDd0IscUJBQWhCLEVBQTlCO0FBQ0EsUUFBTXBJLEtBQWlDLEdBQUd3RyxRQUFRLENBQUMvRSxnQkFBRCxFQUFtQnlHLGVBQW5CLENBQWxEO0FBQ0EsUUFBTUcsYUFBYSxHQUFHSCxlQUFlLEdBQUcsQ0FBQUEsZUFBZSxTQUFmLElBQUFBLGVBQWUsV0FBZixZQUFBQSxlQUFlLENBQUVJLFVBQWpCLEtBQStCRixxQkFBbEMsR0FBMEQvRixTQUEvRixDQWQ4RixDQWNZOztBQUMxRyxRQUFNa0cscUJBQXFCLEdBQUd4SSxzQkFBc0IsQ0FBQ0MsS0FBRCxDQUFwRDtBQUNBLFFBQU13SSxxQkFBcUIsR0FBRzVILHNCQUFzQixDQUFDWixLQUFELENBQXBEO0FBQ0EsUUFBTXlJLGtCQUFrQixHQUFHRixxQkFBcUIsQ0FBQ0csSUFBdEIsQ0FBMkIsVUFBQ2xCLEtBQUQ7QUFBQSxhQUFXQSxLQUFLLENBQUNoQyxPQUFOLENBQWNwRixJQUFkLEtBQXVCLGlCQUFsQztBQUFBLEtBQTNCLENBQTNCO0FBQ0EsUUFBSXVJLGFBQWEsR0FBRyxFQUFwQjtBQUNBLFFBQUlDLGFBQWEsR0FBRyxFQUFwQjtBQUNBLFFBQU1kLFdBQVcsR0FBR2UsY0FBYyxDQUFDWixZQUFELENBQWxDO0FBQ0EsUUFBTWEseUJBQXlCLEdBQUdDLDRCQUE0QixDQUFDakIsV0FBRCxDQUE5RDtBQUNBLFFBQU1rQixRQUFRLEdBQUdwQyxlQUFlLENBQUNxQyxzQkFBaEIsRUFBakI7QUFDQSxRQUFNQyxtQkFBbUIsR0FBRyxDQUFBRixRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUcsYUFBVixNQUE0QjlHLFNBQTVCLEdBQXdDMkcsUUFBeEMsYUFBd0NBLFFBQXhDLHVCQUF3Q0EsUUFBUSxDQUFFRyxhQUFWLENBQXdCQyxXQUF4QixFQUF4QyxHQUFnRixTQUE1RztBQUNBLFFBQU1DLFlBQVksR0FBRyxDQUFBTCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRU0sTUFBVixNQUFxQmpILFNBQXJCLEdBQWlDMkcsUUFBakMsYUFBaUNBLFFBQWpDLHVCQUFpQ0EsUUFBUSxDQUFFTSxNQUFWLENBQWlCRixXQUFqQixFQUFqQyxHQUFrRSxTQUF2RjtBQUNBLFFBQU1HLG9CQUFvQixHQUFHUCxRQUFRLENBQUNPLG9CQUFULEtBQWtDbEgsU0FBbEMsR0FBOEMyRyxRQUFRLENBQUNPLG9CQUF2RCxHQUE4RSxJQUEzRztBQUVBLFFBQU1DLE9BQU8sR0FBR0MsZ0JBQWdCLENBQUNoSSxnQkFBRCxFQUFtQnpCLEtBQW5CLENBQWhDOztBQUNBLFFBQUl3SixPQUFKLEVBQWE7QUFDWlosTUFBQUEsYUFBYSxHQUFHWSxPQUFPLENBQUNFLE9BQXhCO0FBQ0FmLE1BQUFBLGFBQWEsR0FBR2EsT0FBTyxDQUFDRyxPQUF4QjtBQUNBLEtBL0I2RixDQWlDOUY7QUFDQTs7O0FBQ0EsUUFBTUMsYUFBYSxHQUFHaEQsZUFBZSxDQUFDaUQsaUJBQWhCLE1BQXVDakIsYUFBYSxLQUFLLEVBQS9FO0FBQ0EsUUFBTWtCLGtCQUFrQixHQUFHQyxrQkFBa0IsQ0FBQ3RJLGdCQUFELEVBQW1COEcscUJBQW5CLENBQTdDO0FBQ0EsUUFBTXlCLGVBQWUsR0FBR0Ysa0JBQWtCLENBQUNFLGVBQTNDO0FBQ0EsUUFBTUMsa0JBQWtCLEdBQUdILGtCQUFrQixDQUFDSSxhQUE5QztBQUNBLFFBQU1DLGVBQWUsR0FBR0MsMkJBQTJCLENBQUM3QixxQkFBRCxFQUF3QkMscUJBQXhCLEVBQStDL0csZ0JBQS9DLENBQW5EO0FBQ0EsUUFBTTRJLGdCQUFnQixHQUFHQyxtQkFBbUIsQ0FBQzlJLFVBQUQsRUFBYUMsZ0JBQWIsQ0FBNUM7QUFDQSxRQUFNUCxvQkFBb0IsR0FBR3FJLG9CQUFvQixHQUFHdkksdUJBQXVCLENBQUN1Six1QkFBdUIsQ0FBQy9JLFVBQUQsRUFBYUMsZ0JBQWIsQ0FBeEIsQ0FBMUIsR0FBb0YsRUFBckksQ0F6QzhGLENBMkM5Rjs7QUFDQSxRQUFNK0ksYUFBYSxHQUFHOUMsZ0JBQWdCLENBQUNqRyxnQkFBRCxDQUF0QztBQUNBLFFBQU1nSixzQkFBK0IsR0FDcEM3RCxlQUFlLENBQUMvQix5QkFBaEIsTUFBK0NwRCxnQkFBZ0IsQ0FBQ2lELGVBQWpCLE9BQXVDQyxZQUFZLENBQUNDLGtCQURwRzs7QUFFQSxRQUFJd0QscUJBQUosRUFBMkI7QUFDMUJQLE1BQUFBLHFCQUFxQixDQUFDN0gsS0FBRCxFQUFROEgsV0FBUixDQUFyQjtBQUNBOztBQUVELFFBQU00QyxnQkFBZ0IsR0FBR25DLHFCQUFxQixDQUM1Q25CLEdBRHVCLENBQ25CLFVBQUM1RyxhQUFELEVBQW1CO0FBQ3ZCLGFBQU9BLGFBQWEsQ0FBQ3NDLFVBQWQsQ0FBeUIwQixFQUFoQztBQUNBLEtBSHVCLEVBSXZCbUcsTUFKdUIsQ0FLdkJuQyxxQkFBcUIsQ0FBQ3BCLEdBQXRCLENBQTBCLFVBQUM1RyxhQUFELEVBQW1CO0FBQzVDLGFBQU9BLGFBQWEsQ0FBQ2dFLEVBQXJCO0FBQ0EsS0FGRCxDQUx1QixDQUF6QjtBQVNBLFFBQU1vRyxnQkFBZ0IsZ0NBQ2pCaEIsYUFBYSxHQUFHLEVBQUgsR0FBUSxDQUFDOUIsV0FBRCxDQURKLHNCQUVqQmxCLGVBQWUsQ0FBQ2lFLG9CQUFoQixPQUEyQ0MscUJBQXFCLENBQUNDLE9BQWpFLEdBQTJFTCxnQkFBM0UsR0FBOEYsRUFGN0Usc0JBR2pCLENBQUNELHNCQUFELElBQTJCekssS0FBSyxDQUFDc0IsTUFBTixHQUFlLENBQTFDLEdBQThDLENBQUMwSixlQUFlLEVBQWhCLENBQTlDLEdBQW9FLEVBSG5ELEVBQXRCO0FBTUEsUUFBTUMsWUFBWSxHQUFHLHFCQUFyQjtBQUNBLFFBQU1DLDBCQUEwQixHQUFHbEwsS0FBSyxDQUFDc0IsTUFBTixHQUFlLENBQWYsSUFBb0IsQ0FBQ21KLHNCQUF4RDtBQUNBLFFBQU1VLHVCQUF1QixHQUM1QkQsMEJBQTBCLElBQUl0RSxlQUFlLENBQUN3RSxvQ0FBaEIsRUFBOUIsR0FBdUZILFlBQXZGLEdBQXNHNUksU0FEdkc7QUFHQSxXQUFPO0FBQ05nSixNQUFBQSxhQUFhLEVBQUVwRCxZQURUO0FBRU5xRCxNQUFBQSxjQUFjLFlBQUtyRCxZQUFMLE1BRlI7QUFHTmlELE1BQUFBLDBCQUEwQixFQUExQkEsMEJBSE07QUFJTkQsTUFBQUEsWUFBWSxFQUFaQSxZQUpNO0FBS05FLE1BQUFBLHVCQUF1QixFQUF2QkEsdUJBTE07QUFNTnhDLE1BQUFBLGFBQWEsRUFBYkEsYUFOTTtBQU9OQyxNQUFBQSxhQUFhLEVBQWJBLGFBUE07QUFRTlAsTUFBQUEsYUFBYSxFQUFiQSxhQVJNO0FBU05tQyxNQUFBQSxhQUFhLEVBQWJBLGFBVE07QUFVTi9CLE1BQUFBLGtCQUFrQixFQUFFQSxrQkFWZDtBQVdOOEMsTUFBQUEsU0FBUyxFQUFFO0FBQ1ZDLFFBQUFBLFlBQVksRUFBRXZCLGtCQURKO0FBRVZELFFBQUFBLGVBQWUsRUFBZkEsZUFGVTtBQUdWRyxRQUFBQSxlQUFlLEVBQWZBO0FBSFUsT0FYTDtBQWdCTm5LLE1BQUFBLEtBQUssRUFBRUEsS0FoQkQ7QUFpQk44SCxNQUFBQSxXQUFXLEVBQUU4QixhQUFhLEdBQUcsRUFBSCxHQUFROUIsV0FqQjVCO0FBa0JOMkQsTUFBQUEsZ0JBQWdCLEVBQUU7QUFDakJwQixRQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBREQ7QUFFakJuSixRQUFBQSxvQkFBb0IsRUFBRUE7QUFGTCxPQWxCWjtBQXNCTndLLE1BQUFBLGlCQUFpQixFQUFFO0FBQ2xCbEgsUUFBQUEsRUFBRSxFQUFFc0UseUJBRGM7QUFFbEI4QixRQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNlLElBQWpCLENBQXNCLEdBQXRCO0FBRkEsT0F0QmI7QUEwQk5DLE1BQUFBLGlCQUFpQixFQUFFeEQscUJBMUJiO0FBMkJOcUMsTUFBQUEsc0JBQXNCLEVBQUVBLHNCQTNCbEI7QUE0Qk5vQixNQUFBQSxZQUFZLEVBQUVqRixlQUFlLENBQUNsQyxlQUFoQixFQTVCUjtBQTZCTjZFLE1BQUFBLG9CQUFvQixFQUFwQkEsb0JBN0JNO0FBOEJOTCxNQUFBQSxtQkFBbUIsRUFBbkJBLG1CQTlCTTtBQStCTkcsTUFBQUEsWUFBWSxFQUFaQSxZQS9CTTtBQWdDTnlDLE1BQUFBLGNBQWMsRUFBRUMsaUJBQWlCLENBQUN0SyxnQkFBRCxDQWhDM0I7QUFpQ05tSSxNQUFBQSxhQUFhLEVBQWJBO0FBakNNLEtBQVA7QUFtQ0EsR0ExR007Ozs7QUE0R1AsV0FBU0gsZ0JBQVQsQ0FBMEJoSSxnQkFBMUIsRUFBOER6QixLQUE5RCxFQUE0SDtBQUMzSCxRQUFJMkksYUFBYSxHQUFHLEVBQXBCO0FBQUEsUUFDQ0MsYUFBYSxHQUFHLEVBRGpCOztBQUVBLFFBQ0NuSCxnQkFBZ0IsQ0FBQ0csa0JBQWpCLEdBQXNDaUQseUJBQXRDLE1BQ0FwRCxnQkFBZ0IsQ0FBQ2lELGVBQWpCLE9BQXVDQyxZQUFZLENBQUNDLGtCQUZyRCxFQUdFO0FBQUEsa0RBQ2dCNUUsS0FEaEI7QUFBQTs7QUFBQTtBQUNELCtEQUF3QjtBQUFBLGNBQWZHLElBQWU7QUFDdkJBLFVBQUFBLElBQUksR0FBR0EsSUFBUDs7QUFDQSxjQUFJQSxJQUFJLENBQUNnRCxjQUFMLElBQXVCaEQsSUFBSSxDQUFDK0MsY0FBaEMsRUFBZ0Q7QUFDL0MwRixZQUFBQSxhQUFhLEdBQUd6SSxJQUFJLENBQUNnRCxjQUFyQjtBQUNBd0YsWUFBQUEsYUFBYSxHQUFHeEksSUFBSSxDQUFDK0MsY0FBckI7QUFDQTtBQUNBO0FBQ0Q7QUFSQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBU0QsS0FaRCxNQVlPO0FBQUEsa0RBQ1dsRCxLQURYO0FBQUE7O0FBQUE7QUFDTiwrREFBd0I7QUFBQSxjQUFmRyxNQUFlO0FBQ3ZCQSxVQUFBQSxNQUFJLEdBQUdBLE1BQVA7O0FBQ0EsY0FBSSxDQUFDd0ksYUFBRCxJQUFtQnhJLE1BQUQsQ0FBb0MrQyxjQUExRCxFQUEwRTtBQUN6RXlGLFlBQUFBLGFBQWEsR0FBSXhJLE1BQUQsQ0FBb0MrQyxjQUFwQyxJQUFzRCxFQUF0RTtBQUNBOztBQUNELGNBQUksQ0FBQzBGLGFBQUQsSUFBbUJ6SSxNQUFELENBQW9DZ0QsY0FBMUQsRUFBMEU7QUFDekV5RixZQUFBQSxhQUFhLEdBQUl6SSxNQUFELENBQW9DZ0QsY0FBcEMsSUFBc0QsRUFBdEU7QUFDQTs7QUFDRCxjQUFJeUYsYUFBYSxJQUFJRCxhQUFyQixFQUFvQztBQUNuQztBQUNBO0FBQ0Q7QUFaSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBYU47O0FBQ0QsUUFBSUEsYUFBYSxJQUFJQyxhQUFyQixFQUFvQztBQUNuQyxhQUFPO0FBQ05jLFFBQUFBLE9BQU8sRUFBRWQsYUFESDtBQUVOZSxRQUFBQSxPQUFPLEVBQUVoQjtBQUZILE9BQVA7QUFJQTs7QUFDRCxXQUFPdEcsU0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMsXG5cdFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXNcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVGVybXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydFZpc3VhbGl6YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQ2hhcnRcIjtcbmltcG9ydCB0eXBlIHsgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUVsZW1lbnRGaWx0ZXJGaWVsZCwgRmlsdGVyRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9MaXN0UmVwb3J0L0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0Z2V0RmlsdGVyQmFyaGlkZUJhc2ljU2VhcmNoLFxuXHRnZXRNYW5pZmVzdEZpbHRlckZpZWxkcyxcblx0Z2V0U2VsZWN0aW9uRmllbGRzXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhYmxlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zLCBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfSBmcm9tIFwiLi4vY29udHJvbHMvQ29tbW9uL0RhdGFWaXN1YWxpemF0aW9uXCI7XG5pbXBvcnQge1xuXHRnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24sXG5cdGdldERlZmF1bHRDaGFydCxcblx0Z2V0RGVmYXVsdExpbmVJdGVtLFxuXHRnZXREZWZhdWx0UHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCxcblx0Z2V0U2VsZWN0aW9uVmFyaWFudCxcblx0aXNQcmVzZW50YXRpb25Db21wbGlhbnQsXG5cdGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50XG59IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgS1BJRGVmaW5pdGlvbiB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRLUElEZWZpbml0aW9ucyB9IGZyb20gXCIuLi9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBnZXRDaGFydElELCBnZXRDdXN0b21UYWJJRCwgZ2V0RmlsdGVyQmFySUQsIGdldEZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsIGdldEljb25UYWJCYXJJRCwgZ2V0VGFibGVJRCB9IGZyb20gXCIuLi9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRDdXN0b21WaWV3VGVtcGxhdGVDb25maWd1cmF0aW9uLFxuXHRNdWx0aXBsZVZpZXdzQ29uZmlndXJhdGlvbixcblx0U2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uLFxuXHRWaWV3UGF0aENvbmZpZ3VyYXRpb25cbn0gZnJvbSBcIi4uL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IFRlbXBsYXRlVHlwZSwgVmFyaWFudE1hbmFnZW1lbnRUeXBlLCBWaXN1YWxpemF0aW9uVHlwZSB9IGZyb20gXCIuLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5cbnR5cGUgVmlld0Fubm90YXRpb25zVHlwZVR5cGVzID0gU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcyB8IFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXM7XG50eXBlIFZhcmlhbnRNYW5hZ2VtZW50RGVmaW5pdGlvbiA9IHtcblx0aWQ6IHN0cmluZztcblx0dGFyZ2V0Q29udHJvbElkczogc3RyaW5nO1xufTtcblxudHlwZSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uID0gVmlld1BhdGhDb25maWd1cmF0aW9uICYge1xuXHRhbm5vdGF0aW9uPzogRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcbn07XG5cbnR5cGUgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gPSB7XG5cdGFubm90YXRpb24/OiBEYXRhVmlzdWFsaXphdGlvbkFubm90YXRpb25zO1xufTtcblxudHlwZSBDdXN0b21WaWV3Q29uZmlndXJhdGlvbiA9IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24gJiB7XG5cdHR5cGU6IHN0cmluZztcbn07XG5cbnR5cGUgVmlld0NvbmZpZ3VyYXRpb24gPSBNdWx0aXBsZVZpZXdDb25maWd1cmF0aW9uIHwgU2luZ2xlVmlld0NvbmZpZ3VyYXRpb24gfCBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcbnR5cGUgVmlld0Fubm90YXRpb25Db25maWd1cmF0aW9uID0gTXVsdGlwbGVWaWV3Q29uZmlndXJhdGlvbiB8IFNpbmdsZVZpZXdDb25maWd1cmF0aW9uO1xuXG50eXBlIFZpZXdDb252ZXJ0ZXJTZXR0aW5ncyA9IFZpZXdDb25maWd1cmF0aW9uICYge1xuXHRjb252ZXJ0ZXJDb250ZXh0PzogQ29udmVydGVyQ29udGV4dDtcbn07XG5cbnR5cGUgRGVmYXVsdFNlbWFudGljRGF0ZSA9IENvbmZpZ3VyYWJsZU9iamVjdCAmIHtcblx0b3BlcmF0b3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIExpc3RSZXBvcnREZWZpbml0aW9uID0ge1xuXHRtYWluRW50aXR5U2V0OiBzdHJpbmc7XG5cdG1haW5FbnRpdHlUeXBlOiBzdHJpbmc7IC8vIGVudGl0eVR5cGU+IGF0IHRoZSBzdGFydCBvZiBMUiB0ZW1wbGF0aW5nXG5cdHNpbmdsZVRhYmxlSWQ/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBzaW5nbGUgVGFibGUgbW9kZVxuXHRzaW5nbGVDaGFydElkPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggc2luZ2xlIFRhYmxlIG1vZGVcblx0ZGlzcGxheU11bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW47XG5cdGljb25UYWJCYXJJZDogc3RyaW5nO1xuXHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcj86IHN0cmluZztcblx0c2hvd1RhYkNvdW50cz86IGJvb2xlYW47IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdGhlYWRlckFjdGlvbnM6IEJhc2VBY3Rpb25bXTtcblx0c2hvd1Bpbm5hYmxlVG9nZ2xlPzogYm9vbGVhbjtcblx0ZmlsdGVyQmFyOiB7XG5cdFx0cHJvcGVydHlJbmZvOiBhbnk7XG5cdFx0c2VsZWN0aW9uRmllbGRzOiBGaWx0ZXJGaWVsZFtdO1xuXHRcdGhpZGVCYXNpY1NlYXJjaDogYm9vbGVhbjtcblx0fTtcblx0dmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdO1xuXHRmaWx0ZXJDb25kaXRpb25zOiBvYmplY3Q7XG5cdGlzTXVsdGlFbnRpdHlTZXRzOiBib29sZWFuO1xuXHRmaWx0ZXJCYXJJZDogc3RyaW5nO1xuXHR2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnREZWZpbml0aW9uO1xuXHRoYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBib29sZWFuO1xuXHR0ZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZTtcblx0dXNlU2VtYW50aWNEYXRlUmFuZ2U/OiBib29sZWFuO1xuXHRmaWx0ZXJJbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuXHRmaWx0ZXJMYXlvdXQ/OiBzdHJpbmc7XG5cdGtwaURlZmluaXRpb25zOiBLUElEZWZpbml0aW9uW107XG5cdGhpZGVGaWx0ZXJCYXI6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24gPSBTaW5nbGVWaWV3RGVmaW5pdGlvbiB8IEN1c3RvbVZpZXdEZWZpbml0aW9uIHwgQ29tYmluZWRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQ29tYmluZWRWaWV3RGVmaW5pdGlvbiA9IHtcblx0c2VsZWN0aW9uVmFyaWFudFBhdGg/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBvbiBtdWx0aSBUYWJsZSBtb2RlXG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRwcmltYXJ5VmlzdWFsaXphdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xuXHRzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb247XG5cdHRhYmxlQ29udHJvbElkOiBzdHJpbmc7XG5cdGNoYXJ0Q29udHJvbElkOiBzdHJpbmc7XG5cdGRlZmF1bHRQYXRoPzogc3RyaW5nO1xuXHR2aXNpYmxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tVmlld0RlZmluaXRpb24gPSB7XG5cdHRpdGxlPzogc3RyaW5nOyAvLyBvbmx5IHdpdGggbXVsdGkgVGFibGUgbW9kZVxuXHRmcmFnbWVudDogc3RyaW5nO1xuXHR0eXBlOiBzdHJpbmc7XG5cdGN1c3RvbVRhYklkOiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU2luZ2xlVmlld0RlZmluaXRpb24gPSBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uIHwgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uID0ge1xuXHRzZWxlY3Rpb25WYXJpYW50UGF0aD86IHN0cmluZzsgLy8gb25seSB3aXRoIG9uIG11bHRpIFRhYmxlIG1vZGVcblx0dGl0bGU/OiBzdHJpbmc7IC8vIG9ubHkgd2l0aCBtdWx0aSBUYWJsZSBtb2RlXG5cdHByZXNlbnRhdGlvbjogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbiA9IEJhc2VTaW5nbGVWaWV3RGVmaW5pdGlvbiAmIHtcblx0dGFibGVDb250cm9sSWQ/OiBzdHJpbmc7XG5cdHZpc2libGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uID0gQmFzZVNpbmdsZVZpZXdEZWZpbml0aW9uICYge1xuXHRjaGFydENvbnRyb2xJZD86IHN0cmluZztcblx0dmlzaWJsZT86IHN0cmluZztcbn07XG5cbnR5cGUgQ29udGVudEFyZWFJRCA9IHtcblx0Y2hhcnRJZDogc3RyaW5nO1xuXHR0YWJsZUlkOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyBhbGwgbGlzdCByZXBvcnQgdGFibGVzLlxuICpcbiAqIEBwYXJhbSB2aWV3cyBUaGUgbGlzdCByZXBvcnQgdmlld3MgY29uZmlndXJlZCBpbiB0aGUgbWFuaWZlc3RcbiAqIEByZXR1cm5zIFRoZSBsaXN0IHJlcG9ydCB0YWJsZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVZpc3VhbGl6YXRpb25zKHZpZXdzOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSk6IFRhYmxlVmlzdWFsaXphdGlvbltdIHtcblx0Y29uc3QgdGFibGVzOiBUYWJsZVZpc3VhbGl6YXRpb25bXSA9IFtdO1xuXHR2aWV3cy5mb3JFYWNoKGZ1bmN0aW9uICh2aWV3KSB7XG5cdFx0aWYgKCEodmlldyBhcyBDdXN0b21WaWV3RGVmaW5pdGlvbikudHlwZSkge1xuXHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbnMgPSAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5zZWNvbmRhcnlWaXN1YWxpemF0aW9uXG5cdFx0XHRcdD8gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikuc2Vjb25kYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuVGFibGUpIHtcblx0XHRcdFx0XHR0YWJsZXMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHRhYmxlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRWaXN1YWxpemF0aW9ucyh2aWV3czogTGlzdFJlcG9ydFZpZXdEZWZpbml0aW9uW10pOiBDaGFydFZpc3VhbGl6YXRpb25bXSB7XG5cdGNvbnN0IGNoYXJ0czogQ2hhcnRWaXN1YWxpemF0aW9uW10gPSBbXTtcblx0dmlld3MuZm9yRWFjaChmdW5jdGlvbiAodmlldykge1xuXHRcdGlmICghKHZpZXcgYXMgQ3VzdG9tVmlld0RlZmluaXRpb24pLnR5cGUpIHtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gKHZpZXcgYXMgQ29tYmluZWRWaWV3RGVmaW5pdGlvbikucHJpbWFyeVZpc3VhbGl6YXRpb25cblx0XHRcdFx0PyAodmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uKS5wcmltYXJ5VmlzdWFsaXphdGlvbi52aXN1YWxpemF0aW9uc1xuXHRcdFx0XHQ6ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnM7XG5cblx0XHRcdHZpc3VhbGl6YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb24udHlwZSA9PT0gVmlzdWFsaXphdGlvblR5cGUuQ2hhcnQpIHtcblx0XHRcdFx0XHRjaGFydHMucHVzaCh2aXN1YWxpemF0aW9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIGNoYXJ0cztcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZXMgPSBmdW5jdGlvbiAoZmlsdGVyRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50RmlsdGVyRmllbGQ+KTogUmVjb3JkPHN0cmluZywgRGVmYXVsdFNlbWFudGljRGF0ZT4ge1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlczogYW55ID0ge307XG5cdGZvciAoY29uc3QgZmlsdGVyRmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG5cdFx0aWYgKGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzPy5sZW5ndGgpIHtcblx0XHRcdGRlZmF1bHRTZW1hbnRpY0RhdGVzW2ZpbHRlckZpZWxkXSA9IGZpbHRlckZpZWxkc1tmaWx0ZXJGaWVsZF0/LnNldHRpbmdzPy5kZWZhdWx0VmFsdWVzO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGVmYXVsdFNlbWFudGljRGF0ZXM7XG59O1xuXG4vKipcbiAqIEZpbmQgYSB2aXN1YWxpemF0aW9uIGFubm90YXRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydC5cbiAqXG4gKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgY3VycmVudCBFbnRpdHlUeXBlXG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dFxuICogQHBhcmFtIGJJc0FMUFxuICogQHJldHVybnMgQSBjb21wbGlhbnQgYW5ub3RhdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBsaXN0IHJlcG9ydFxuICovXG5mdW5jdGlvbiBnZXRDb21wbGlhbnRWaXN1YWxpemF0aW9uQW5ub3RhdGlvbihcblx0ZW50aXR5VHlwZTogRW50aXR5VHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0YklzQUxQOiBCb29sZWFuXG4pOiBMaW5lSXRlbSB8IFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgYW5ub3RhdGlvblBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmdldERlZmF1bHRUZW1wbGF0ZUFubm90YXRpb25QYXRoKCk7XG5cdGNvbnN0IHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KGVudGl0eVR5cGUsIGFubm90YXRpb25QYXRoLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0aWYgKGFubm90YXRpb25QYXRoICYmIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudC5QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdGlmICghcHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiUHJlc2VudGF0aW9uIFZhcmlhbnQgaXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhlIFNQViBtZW50aW9uZWQgaW4gdGhlIG1hbmlmZXN0XCIpO1xuXHRcdH1cblx0XHRjb25zdCBiUFZDb21wbGFpbnQgPSBpc1ByZXNlbnRhdGlvbkNvbXBsaWFudChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50LlByZXNlbnRhdGlvblZhcmlhbnQpO1xuXHRcdGlmICghYlBWQ29tcGxhaW50KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoaXNTZWxlY3Rpb25QcmVzZW50YXRpb25Db21wbGlhbnQoc2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCwgYklzQUxQKSkge1xuXHRcdFx0cmV0dXJuIHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQ7XG5cdFx0fVxuXHR9XG5cdGlmIChzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzU2VsZWN0aW9uUHJlc2VudGF0aW9uQ29tcGxpYW50KHNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBzZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRjb25zdCBwcmVzZW50YXRpb25WYXJpYW50ID0gZ2V0RGVmYXVsdFByZXNlbnRhdGlvblZhcmlhbnQoZW50aXR5VHlwZSk7XG5cdGlmIChwcmVzZW50YXRpb25WYXJpYW50KSB7XG5cdFx0aWYgKGlzUHJlc2VudGF0aW9uQ29tcGxpYW50KHByZXNlbnRhdGlvblZhcmlhbnQsIGJJc0FMUCkpIHtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb25WYXJpYW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWJJc0FMUCkge1xuXHRcdGNvbnN0IGRlZmF1bHRMaW5lSXRlbSA9IGdldERlZmF1bHRMaW5lSXRlbShlbnRpdHlUeXBlKTtcblx0XHRpZiAoZGVmYXVsdExpbmVJdGVtKSB7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExpbmVJdGVtO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBnZXRWaWV3ID0gZnVuY3Rpb24gKHZpZXdDb252ZXJ0ZXJDb25maWd1cmF0aW9uOiBWaWV3Q29udmVydGVyU2V0dGluZ3MpOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb24ge1xuXHRsZXQgY29uZmlnID0gdmlld0NvbnZlcnRlckNvbmZpZ3VyYXRpb247XG5cdGlmIChjb25maWcuY29udmVydGVyQ29udGV4dCkge1xuXHRcdGxldCBjb252ZXJ0ZXJDb250ZXh0ID0gY29uZmlnLmNvbnZlcnRlckNvbnRleHQ7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRsZXQgcHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gPSBnZXREYXRhVmlzdWFsaXphdGlvbkNvbmZpZ3VyYXRpb24oXG5cdFx0XHRjb25maWcuYW5ub3RhdGlvblxuXHRcdFx0XHQ/IGNvbnZlcnRlckNvbnRleHQuZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aChjb25maWcuYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHQ6IFwiXCIsXG5cdFx0XHR0cnVlLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdGNvbmZpZyBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb25cblx0XHQpO1xuXHRcdGxldCB0YWJsZUNvbnRyb2xJZCA9IFwiXCI7XG5cdFx0bGV0IGNoYXJ0Q29udHJvbElkID0gXCJcIjtcblx0XHRsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IFwiXCI7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnRQYXRoID0gXCJcIjtcblx0XHRjb25zdCBpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24gPSBmdW5jdGlvbiAoY3VycmVudENvbmZpZzogVmlld0NvbmZpZ3VyYXRpb24pOiBjdXJyZW50Q29uZmlnIGlzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24ge1xuXHRcdFx0cmV0dXJuIChjdXJyZW50Q29uZmlnIGFzIE11bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24pLmtleSAhPT0gdW5kZWZpbmVkO1xuXHRcdH07XG5cdFx0Y29uc3QgY3JlYXRlVmlzdWFsaXphdGlvbiA9IGZ1bmN0aW9uIChjdXJyZW50UHJlc2VudGF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGlzUHJpbWFyeT86IGJvb2xlYW4pIHtcblx0XHRcdGxldCBkZWZhdWx0VmlzdWFsaXphdGlvbjtcblx0XHRcdGZvciAoY29uc3QgdmlzdWFsaXphdGlvbiBvZiBjdXJyZW50UHJlc2VudGF0aW9uLnZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGlmIChpc1ByaW1hcnkgJiYgdmlzdWFsaXphdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydCkge1xuXHRcdFx0XHRcdGRlZmF1bHRWaXN1YWxpemF0aW9uID0gdmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIWlzUHJpbWFyeSAmJiB2aXN1YWxpemF0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLlRhYmxlKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdFZpc3VhbGl6YXRpb24gPSB2aXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb25DcmVhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgY3VycmVudFByZXNlbnRhdGlvbik7XG5cdFx0XHRpZiAoZGVmYXVsdFZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0cHJlc2VudGF0aW9uQ3JlYXRlZC52aXN1YWxpemF0aW9ucyA9IFtkZWZhdWx0VmlzdWFsaXphdGlvbl07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcHJlc2VudGF0aW9uQ3JlYXRlZDtcblx0XHR9O1xuXHRcdGNvbnN0IGdldFByZXNlbnRhdGlvbiA9IGZ1bmN0aW9uIChpdGVtOiBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihpdGVtLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHRhcmdldEFubm90YXRpb24gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIERhdGFWaXN1YWxpemF0aW9uQW5ub3RhdGlvbnM7XG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRcdGNvbnN0IGFubm90YXRpb24gPSB0YXJnZXRBbm5vdGF0aW9uO1xuXHRcdFx0cHJlc2VudGF0aW9uID0gZ2V0RGF0YVZpc3VhbGl6YXRpb25Db25maWd1cmF0aW9uKFxuXHRcdFx0XHRhbm5vdGF0aW9uXG5cdFx0XHRcdFx0PyBjb252ZXJ0ZXJDb250ZXh0LmdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKVxuXHRcdFx0XHRcdDogXCJcIixcblx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0Y29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvblxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBwcmVzZW50YXRpb247XG5cdFx0fTtcblx0XHRjb25zdCBjcmVhdGVBbHBWaWV3ID0gZnVuY3Rpb24gKFxuXHRcdFx0cHJlc2VudGF0aW9uczogRGF0YVZpc3VhbGl6YXRpb25EZWZpbml0aW9uW10sXG5cdFx0XHRkZWZhdWx0UGF0aDogXCJib3RoXCIgfCBcInByaW1hcnlcIiB8IFwic2Vjb25kYXJ5XCIgfCB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHByaW1hcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKHByZXNlbnRhdGlvbnNbMF0sIHRydWUpO1xuXHRcdFx0Y2hhcnRDb250cm9sSWQgPSAocHJpbWFyeVZpc3VhbGl6YXRpb24/LnZpc3VhbGl6YXRpb25zWzBdIGFzIENoYXJ0VmlzdWFsaXphdGlvbikuaWQ7XG5cdFx0XHRjb25zdCBzZWNvbmRhcnlWaXN1YWxpemF0aW9uOiBEYXRhVmlzdWFsaXphdGlvbkRlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVWaXN1YWxpemF0aW9uKFxuXHRcdFx0XHRwcmVzZW50YXRpb25zWzFdID8gcHJlc2VudGF0aW9uc1sxXSA6IHByZXNlbnRhdGlvbnNbMF1cblx0XHRcdCk7XG5cdFx0XHR0YWJsZUNvbnRyb2xJZCA9IChzZWNvbmRhcnlWaXN1YWxpemF0aW9uPy52aXN1YWxpemF0aW9uc1swXSBhcyBUYWJsZVZpc3VhbGl6YXRpb24pLmFubm90YXRpb24uaWQ7XG5cdFx0XHRpZiAocHJpbWFyeVZpc3VhbGl6YXRpb24gJiYgc2Vjb25kYXJ5VmlzdWFsaXphdGlvbikge1xuXHRcdFx0XHRjb25maWcgPSBjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0cHJpbWFyeVZpc3VhbGl6YXRpb24sXG5cdFx0XHRcdFx0c2Vjb25kYXJ5VmlzdWFsaXphdGlvbixcblx0XHRcdFx0XHR0YWJsZUNvbnRyb2xJZCxcblx0XHRcdFx0XHRjaGFydENvbnRyb2xJZCxcblx0XHRcdFx0XHRkZWZhdWx0UGF0aCxcblx0XHRcdFx0XHR2aXNpYmxlXG5cdFx0XHRcdH07XG5cdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aWYgKHByZXNlbnRhdGlvbj8udmlzdWFsaXphdGlvbnM/Lmxlbmd0aCA9PT0gMiAmJiBjb252ZXJ0ZXJDb250ZXh0LmdldFRlbXBsYXRlVHlwZSgpID09PSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlKSB7XG5cdFx0XHRjb25zdCB2aWV3OiBDb21iaW5lZFZpZXdEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gY3JlYXRlQWxwVmlldyhbcHJlc2VudGF0aW9uXSwgXCJib3RoXCIpO1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0cmV0dXJuIHZpZXc7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucyhjb25maWcgYXMgVmlld1BhdGhDb25maWd1cmF0aW9uKSB8fFxuXHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgeyBwcmltYXJ5LCBzZWNvbmRhcnkgfSA9IGNvbmZpZyBhcyBDb21iaW5lZFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdGlmIChwcmltYXJ5ICYmIHByaW1hcnkubGVuZ3RoICYmIHNlY29uZGFyeSAmJiBzZWNvbmRhcnkubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXc6IENvbWJpbmVkVmlld0RlZmluaXRpb24gfCB1bmRlZmluZWQgPSBjcmVhdGVBbHBWaWV3KFxuXHRcdFx0XHRcdFtnZXRQcmVzZW50YXRpb24ocHJpbWFyeVswXSksIGdldFByZXNlbnRhdGlvbihzZWNvbmRhcnlbMF0pXSxcblx0XHRcdFx0XHQoY29uZmlnIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uKS5kZWZhdWx0UGF0aFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHJldHVybiB2aWV3O1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJTZWNvbmRhcnlJdGVtcyBpbiB0aGUgVmlld3MgaXMgbm90IHByZXNlbnRcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChpc011bHRpcGxlVmlld0NvbmZpZ3VyYXRpb24oY29uZmlnKSkge1xuXHRcdFx0Ly8ga2V5IGV4aXN0cyBvbmx5IG9uIG11bHRpIHRhYmxlcyBtb2RlXG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmFubm90YXRpb25QYXRoKTtcblx0XHRcdGNvbnN0IHZpZXdBbm5vdGF0aW9uOiBWaWV3QW5ub3RhdGlvbnNUeXBlVHlwZXMgPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIFZpZXdBbm5vdGF0aW9uc1R5cGVUeXBlcztcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0dGl0bGUgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odmlld0Fubm90YXRpb24uVGV4dCkpO1xuXHRcdFx0Ly8gTmVlZCB0byBsb29wIG9uIHRhYmxlIGludG8gdmlld3Mgc2luY2UgbXVsdGkgdGFibGUgbW9kZSBnZXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAoaGlkZGVuIGZpbHRlcnMgb3IgVGFibGUgSWQpXG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24sIGluZGV4KSA9PiB7XG5cdFx0XHRcdHN3aXRjaCAodmlzdWFsaXphdGlvbkRlZmluaXRpb24udHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgVmlzdWFsaXphdGlvblR5cGUuVGFibGU6XG5cdFx0XHRcdFx0XHRjb25zdCB0YWJsZVZpc3VhbGl6YXRpb24gPSBwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnNbaW5kZXhdIGFzIFRhYmxlVmlzdWFsaXphdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IGZpbHRlcnMgPSB0YWJsZVZpc3VhbGl6YXRpb24uY29udHJvbC5maWx0ZXJzIHx8IHt9O1xuXHRcdFx0XHRcdFx0ZmlsdGVycy5oaWRkZW5GaWx0ZXJzID0gZmlsdGVycy5oaWRkZW5GaWx0ZXJzIHx8IHsgcGF0aHM6IFtdIH07XG5cdFx0XHRcdFx0XHRpZiAoIShjb25maWcgYXMgU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uKS5rZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBvdmVycmlkZSBUYWJsZSBJZCB0byBtYXRjaCB3aXRoIFRhYiBLZXkgKGN1cnJlbnRseSBvbmx5IHRhYmxlIGlzIG1hbmFnZWQgaW4gbXVsdGlwbGUgdmlldyBtb2RlKVxuXHRcdFx0XHRcdFx0XHR0YWJsZVZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5pZCA9IGdldFRhYmxlSUQoKGNvbmZpZyBhcyBTaW5nbGVWaWV3UGF0aENvbmZpZ3VyYXRpb24pLmtleSB8fCBcIlwiLCBcIkxpbmVJdGVtXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdBbm5vdGF0aW9uQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0XHRcdGlmIChjb25maWcgJiYgY29uZmlnLmFubm90YXRpb24gJiYgY29uZmlnLmFubm90YXRpb24udGVybSA9PT0gVUlBbm5vdGF0aW9uVGVybXMuU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCkge1xuXHRcdFx0XHRcdFx0XHRzZWxlY3Rpb25WYXJpYW50UGF0aCA9IChcblx0XHRcdFx0XHRcdFx0XHRjb25maWcuYW5ub3RhdGlvbiBhcyBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50VHlwZVR5cGVzXG5cdFx0XHRcdFx0XHRcdCkuU2VsZWN0aW9uVmFyaWFudC5mdWxseVF1YWxpZmllZE5hbWUuc3BsaXQoXCJAXCIpWzFdO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2VsZWN0aW9uVmFyaWFudFBhdGggPSAoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikuYW5ub3RhdGlvblBhdGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvL1Byb3ZpZGUgU2VsZWN0aW9uIFZhcmlhbnQgdG8gaGlkZGVuRmlsdGVycyBpbiBvcmRlciB0byBzZXQgdGhlIFNWIGZpbHRlcnMgdG8gdGhlIHRhYmxlLlxuXHRcdFx0XHRcdFx0Ly9NREMgVGFibGUgb3ZlcnJpZGVzIGJpbmRpbmcgRmlsdGVyIGFuZCBmcm9tIFNBUCBGRSB0aGUgb25seSBtZXRob2Qgd2hlcmUgd2UgYXJlIGFibGUgdG8gYWRkXG5cdFx0XHRcdFx0XHQvL2FkZGl0aW9uYWwgZmlsdGVyIGlzICdyZWJpbmRUYWJsZScgaW50byBUYWJsZSBkZWxlZ2F0ZS5cblx0XHRcdFx0XHRcdC8vVG8gYXZvaWQgaW1wbGVtZW50aW5nIHNwZWNpZmljIExSIGZlYXR1cmUgdG8gU0FQIEZFIE1hY3JvIFRhYmxlLCB0aGUgZmlsdGVyKHMpIHJlbGF0ZWQgdG8gdGhlIFRhYiAobXVsdGkgdGFibGUgbW9kZSlcblx0XHRcdFx0XHRcdC8vY2FuIGJlIHBhc3NlZCB0byBtYWNybyB0YWJsZSB2aWEgcGFyYW1ldGVyL2NvbnRleHQgbmFtZWQgZmlsdGVycyBhbmQga2V5IGhpZGRlbkZpbHRlcnMuXG5cdFx0XHRcdFx0XHRmaWx0ZXJzLmhpZGRlbkZpbHRlcnMucGF0aHMucHVzaCh7IGFubm90YXRpb25QYXRoOiBzZWxlY3Rpb25WYXJpYW50UGF0aCB9KTtcblx0XHRcdFx0XHRcdHRhYmxlVmlzdWFsaXphdGlvbi5jb250cm9sLmZpbHRlcnMgPSBmaWx0ZXJzO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBWaXN1YWxpemF0aW9uVHlwZS5DaGFydDpcblx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0VmlzdWFsaXphdGlvbiA9IHByZXNlbnRhdGlvbi52aXN1YWxpemF0aW9uc1tpbmRleF0gYXMgQ2hhcnRWaXN1YWxpemF0aW9uO1xuXHRcdFx0XHRcdFx0Y2hhcnRWaXN1YWxpemF0aW9uLmlkID0gZ2V0Q2hhcnRJRCgoY29uZmlnIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbikua2V5IHx8IFwiXCIsIFwiQ2hhcnRcIik7XG5cdFx0XHRcdFx0XHRjaGFydFZpc3VhbGl6YXRpb24ubXVsdGlWaWV3cyA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdGlmICh2aXN1YWxpemF0aW9uRGVmaW5pdGlvbi50eXBlID09PSBWaXN1YWxpemF0aW9uVHlwZS5UYWJsZSkge1xuXHRcdFx0XHR0YWJsZUNvbnRyb2xJZCA9IHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0XHR9IGVsc2UgaWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0KSB7XG5cdFx0XHRcdGNoYXJ0Q29udHJvbElkID0gdmlzdWFsaXphdGlvbkRlZmluaXRpb24uaWQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIFZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRjb25zdCB2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHByZXNlbnRhdGlvbixcblx0XHRcdHRhYmxlQ29udHJvbElkLFxuXHRcdFx0Y2hhcnRDb250cm9sSWQsXG5cdFx0XHR0aXRsZSxcblx0XHRcdHNlbGVjdGlvblZhcmlhbnRQYXRoLFxuXHRcdFx0dmlzaWJsZVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uZmlnID0gY29uZmlnIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uO1xuXHRcdGNvbnN0IHRpdGxlID0gY29uZmlnLmxhYmVsLFxuXHRcdFx0ZnJhZ21lbnQgPSBjb25maWcudGVtcGxhdGUsXG5cdFx0XHR0eXBlID0gY29uZmlnLnR5cGUsXG5cdFx0XHRjdXN0b21UYWJJZCA9IGdldEN1c3RvbVRhYklEKGNvbmZpZy5rZXkgfHwgXCJcIiksXG5cdFx0XHR2aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRpdGxlLFxuXHRcdFx0ZnJhZ21lbnQsXG5cdFx0XHR0eXBlLFxuXHRcdFx0Y3VzdG9tVGFiSWQsXG5cdFx0XHR2aXNpYmxlXG5cdFx0fTtcblx0fVxufTtcblxuY29uc3QgZ2V0Vmlld3MgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHNldHRpbmdzVmlld3M6IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkXG4pOiBMaXN0UmVwb3J0Vmlld0RlZmluaXRpb25bXSB7XG5cdGxldCB2aWV3Q29udmVydGVyQ29uZmlnczogVmlld0NvbnZlcnRlclNldHRpbmdzW10gPSBbXTtcblx0aWYgKHNldHRpbmdzVmlld3MpIHtcblx0XHRzZXR0aW5nc1ZpZXdzLnBhdGhzLmZvckVhY2goKHBhdGg6IFZpZXdQYXRoQ29uZmlndXJhdGlvbiB8IEN1c3RvbVZpZXdUZW1wbGF0ZUNvbmZpZ3VyYXRpb24pID0+IHtcblx0XHRcdGlmIChjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpLmhhc011bHRpcGxlVmlzdWFsaXphdGlvbnMocGF0aCBhcyBWaWV3UGF0aENvbmZpZ3VyYXRpb24pKSB7XG5cdFx0XHRcdGlmIChzZXR0aW5nc1ZpZXdzLnBhdGhzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBTFAgZmxhdm9yIGNhbm5vdCBoYXZlIG11bHRpcGxlIHZpZXdzXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhdGggPSBwYXRoIGFzIENvbWJpbmVkVmlld1BhdGhDb25maWd1cmF0aW9uO1xuXHRcdFx0XHRcdHZpZXdDb252ZXJ0ZXJDb25maWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dCxcblx0XHRcdFx0XHRcdHByaW1hcnk6IHBhdGgucHJpbWFyeSxcblx0XHRcdFx0XHRcdHNlY29uZGFyeTogcGF0aC5zZWNvbmRhcnksXG5cdFx0XHRcdFx0XHRkZWZhdWx0UGF0aDogcGF0aC5kZWZhdWx0UGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKChwYXRoIGFzIEN1c3RvbVZpZXdDb25maWd1cmF0aW9uKS50ZW1wbGF0ZSkge1xuXHRcdFx0XHRwYXRoID0gcGF0aCBhcyBDdXN0b21WaWV3Q29uZmlndXJhdGlvbjtcblx0XHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdFx0a2V5OiBwYXRoLmtleSxcblx0XHRcdFx0XHRsYWJlbDogcGF0aC5sYWJlbCxcblx0XHRcdFx0XHR0ZW1wbGF0ZTogcGF0aC50ZW1wbGF0ZSxcblx0XHRcdFx0XHR0eXBlOiBcIkN1c3RvbVwiLFxuXHRcdFx0XHRcdHZpc2libGU6IHBhdGgudmlzaWJsZVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhdGggPSBwYXRoIGFzIFNpbmdsZVZpZXdQYXRoQ29uZmlndXJhdGlvbjtcblx0XHRcdFx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKSxcblx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcihcblx0XHRcdFx0XHRcdHBhdGguY29udGV4dFBhdGggfHwgKHBhdGguZW50aXR5U2V0ICYmIGAvJHtwYXRoLmVudGl0eVNldH1gKSB8fCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnRleHRQYXRoKClcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGVudGl0eVR5cGUgPSB2aWV3Q29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cblx0XHRcdFx0aWYgKGVudGl0eVR5cGUgJiYgdmlld0NvbnZlcnRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IG1hbmlmZXN0V3JhcHBlci5nZXREZWZhdWx0VGVtcGxhdGVBbm5vdGF0aW9uUGF0aCgpO1xuXHRcdFx0XHRcdGxldCBhbm5vdGF0aW9uO1xuXHRcdFx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gdmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24ocGF0aC5hbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0QW5ub3RhdGlvbiA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgRGF0YVZpc3VhbGl6YXRpb25Bbm5vdGF0aW9ucztcblx0XHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHQgPSByZXNvbHZlZFRhcmdldC5jb252ZXJ0ZXJDb250ZXh0O1xuXHRcdFx0XHRcdGlmICh0YXJnZXRBbm5vdGF0aW9uKSB7XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0QW5ub3RhdGlvbi50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5TZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSBnZXRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50KFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpLFxuXHRcdFx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlZFRhcmdldGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFubm90YXRpb24gPSBnZXREZWZhdWx0TGluZUl0ZW0odmlld0NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKSBhcyBMaW5lSXRlbTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YW5ub3RhdGlvbiA9IHRhcmdldEFubm90YXRpb247XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2aWV3Q29udmVydGVyQ29uZmlncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogdmlld0NvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBwYXRoLmFubm90YXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0XHRrZWVwUHJldmlvdXNQcmVzb25hbGl6YXRpb246IHBhdGgua2VlcFByZXZpb3VzUHJlc29uYWxpemF0aW9uLFxuXHRcdFx0XHRcdFx0XHRrZXk6IHBhdGgua2V5LFxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiBwYXRoLnZpc2libGVcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUT0RPIERpYWdub3N0aWNzIG1lc3NhZ2Vcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRpZiAoY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZSkge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MgPSBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQsIHZpZXdDb252ZXJ0ZXJDb25maWdzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbnZlcnRlckNvbmZpZ3MucHVzaCh7XG5cdFx0XHRcdGFubm90YXRpb246IGdldENvbXBsaWFudFZpc3VhbGl6YXRpb25Bbm5vdGF0aW9uKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQsIGZhbHNlKSxcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogY29udmVydGVyQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2aWV3Q29udmVydGVyQ29uZmlncy5tYXAoKHZpZXdDb252ZXJ0ZXJDb25maWcpID0+IHtcblx0XHRyZXR1cm4gZ2V0Vmlldyh2aWV3Q29udmVydGVyQ29uZmlnKTtcblx0fSk7XG59O1xuXG5mdW5jdGlvbiBnZXRBbHBWaWV3Q29uZmlnKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIHZpZXdDb25maWdzOiBWaWV3Q29udmVydGVyU2V0dGluZ3NbXSk6IFZpZXdDb252ZXJ0ZXJTZXR0aW5nc1tdIHtcblx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRjb25zdCBhbm5vdGF0aW9uID0gZ2V0Q29tcGxpYW50VmlzdWFsaXphdGlvbkFubm90YXRpb24oZW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dCwgdHJ1ZSk7XG5cdGxldCBjaGFydCwgdGFibGU7XG5cdGlmIChhbm5vdGF0aW9uKSB7XG5cdFx0dmlld0NvbmZpZ3MucHVzaCh7XG5cdFx0XHRhbm5vdGF0aW9uOiBhbm5vdGF0aW9uLFxuXHRcdFx0Y29udmVydGVyQ29udGV4dFxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNoYXJ0ID0gZ2V0RGVmYXVsdENoYXJ0KGVudGl0eVR5cGUpO1xuXHRcdHRhYmxlID0gZ2V0RGVmYXVsdExpbmVJdGVtKGVudGl0eVR5cGUpO1xuXHRcdGlmIChjaGFydCAmJiB0YWJsZSkge1xuXHRcdFx0Y29uc3QgcHJpbWFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogY2hhcnQudGVybSB9XTtcblx0XHRcdGNvbnN0IHNlY29uZGFyeTogU2luZ2xlVmlld1BhdGhDb25maWd1cmF0aW9uW10gPSBbeyBhbm5vdGF0aW9uUGF0aDogdGFibGUudGVybSB9XTtcblx0XHRcdHZpZXdDb25maWdzLnB1c2goe1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRwcmltYXJ5OiBwcmltYXJ5LFxuXHRcdFx0XHRzZWNvbmRhcnk6IHNlY29uZGFyeSxcblx0XHRcdFx0ZGVmYXVsdFBhdGg6IFwiYm90aFwiXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZpZXdDb25maWdzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SGVhZGVyQWN0aW9ucyA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KTogQmFzZUFjdGlvbltdIHtcblx0Y29uc3QgbWFuaWZlc3RXcmFwcGVyID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKTtcblx0cmV0dXJuIGluc2VydEN1c3RvbUVsZW1lbnRzKFtdLCBnZXRBY3Rpb25zRnJvbU1hbmlmZXN0KG1hbmlmZXN0V3JhcHBlci5nZXRIZWFkZXJBY3Rpb25zKCksIGNvbnZlcnRlckNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0NoYXJ0RmlsdGVyQmFySWQgPSBmdW5jdGlvbiAodmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdLCBmaWx0ZXJCYXJJZDogc3RyaW5nKSB7XG5cdHZpZXdzLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRpZiAoISh2aWV3IGFzIEN1c3RvbVZpZXdEZWZpbml0aW9uKS50eXBlKSB7XG5cdFx0XHRjb25zdCBwcmVzZW50YXRpb246IERhdGFWaXN1YWxpemF0aW9uRGVmaW5pdGlvbiA9ICh2aWV3IGFzIFNpbmdsZVZpZXdEZWZpbml0aW9uKS5wcmVzZW50YXRpb247XG5cdFx0XHRwcmVzZW50YXRpb24udmlzdWFsaXphdGlvbnMuZm9yRWFjaCgodmlzdWFsaXphdGlvbkRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0aWYgKHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLnR5cGUgPT09IFZpc3VhbGl6YXRpb25UeXBlLkNoYXJ0ICYmIHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkICE9PSBmaWx0ZXJCYXJJZCkge1xuXHRcdFx0XHRcdHZpc3VhbGl6YXRpb25EZWZpbml0aW9uLmZpbHRlcklkID0gZmlsdGVyQmFySWQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIExpc3RSZXBvcnREZWZpbml0aW9uIGZvciBtdWx0aXBsZSBlbnRpdHkgc2V0cyAobXVsdGlwbGUgdGFibGUgbW9kZSkuXG4gKlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgbGlzdCByZXBvcnQgZGVmaW5pdGlvbiBiYXNlZCBvbiBhbm5vdGF0aW9uICsgbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRQYWdlID0gZnVuY3Rpb24gKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpOiBMaXN0UmVwb3J0RGVmaW5pdGlvbiB7XG5cdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRDb250ZXh0UGF0aCgpO1xuXG5cdGlmICghc0NvbnRleHRQYXRoKSB7XG5cdFx0Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbnRpdHlTZXQgYXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIGlzc3VlIEknZCBzYXlcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIkFuIEVudGl0eVNldCBpcyByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgYSBMaXN0UmVwb3J0LCBwbGVhc2UgYWRqdXN0IHlvdXIgYGVudGl0eVNldGAgcHJvcGVydHkgdG8gcG9pbnQgdG8gb25lLlwiXG5cdFx0KTtcblx0fVxuXHRjb25zdCBtYW5pZmVzdFdyYXBwZXIgPSBjb252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHRjb25zdCB2aWV3c0RlZmluaXRpb246IE11bHRpcGxlVmlld3NDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkID0gbWFuaWZlc3RXcmFwcGVyLmdldFZpZXdDb25maWd1cmF0aW9uKCk7XG5cdGNvbnN0IGhhc011bHRpcGxlRW50aXR5U2V0cyA9IG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKTtcblx0Y29uc3Qgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdID0gZ2V0Vmlld3MoY29udmVydGVyQ29udGV4dCwgdmlld3NEZWZpbml0aW9uKTtcblx0Y29uc3Qgc2hvd1RhYkNvdW50cyA9IHZpZXdzRGVmaW5pdGlvbiA/IHZpZXdzRGVmaW5pdGlvbj8uc2hvd0NvdW50cyB8fCBoYXNNdWx0aXBsZUVudGl0eVNldHMgOiB1bmRlZmluZWQ7IC8vIHdpdGggbXVsdGkgRW50aXR5U2V0cywgdGFiIGNvdW50cyBhcmUgZGlzcGxheWVkIGJ5IGRlZmF1bHRcblx0Y29uc3QgbHJUYWJsZVZpc3VhbGl6YXRpb25zID0gZ2V0VGFibGVWaXN1YWxpemF0aW9ucyh2aWV3cyk7XG5cdGNvbnN0IGxyQ2hhcnRWaXN1YWxpemF0aW9ucyA9IGdldENoYXJ0VmlzdWFsaXphdGlvbnModmlld3MpO1xuXHRjb25zdCBzaG93UGlubmFibGVUb2dnbGUgPSBsclRhYmxlVmlzdWFsaXphdGlvbnMuc29tZSgodGFibGUpID0+IHRhYmxlLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIik7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIjtcblx0bGV0IHNpbmdsZUNoYXJ0SWQgPSBcIlwiO1xuXHRjb25zdCBmaWx0ZXJCYXJJZCA9IGdldEZpbHRlckJhcklEKHNDb250ZXh0UGF0aCk7XG5cdGNvbnN0IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQgPSBnZXRGaWx0ZXJWYXJpYW50TWFuYWdlbWVudElEKGZpbHRlckJhcklkKTtcblx0Y29uc3QgZmJDb25maWcgPSBtYW5pZmVzdFdyYXBwZXIuZ2V0RmlsdGVyQ29uZmlndXJhdGlvbigpO1xuXHRjb25zdCBmaWx0ZXJJbml0aWFsTGF5b3V0ID0gZmJDb25maWc/LmluaXRpYWxMYXlvdXQgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnPy5pbml0aWFsTGF5b3V0LnRvTG93ZXJDYXNlKCkgOiBcImNvbXBhY3RcIjtcblx0Y29uc3QgZmlsdGVyTGF5b3V0ID0gZmJDb25maWc/LmxheW91dCAhPT0gdW5kZWZpbmVkID8gZmJDb25maWc/LmxheW91dC50b0xvd2VyQ2FzZSgpIDogXCJjb21wYWN0XCI7XG5cdGNvbnN0IHVzZVNlbWFudGljRGF0ZVJhbmdlID0gZmJDb25maWcudXNlU2VtYW50aWNEYXRlUmFuZ2UgIT09IHVuZGVmaW5lZCA/IGZiQ29uZmlnLnVzZVNlbWFudGljRGF0ZVJhbmdlIDogdHJ1ZTtcblxuXHRjb25zdCBvQ29uZmlnID0gZ2V0Q29udGVudEFyZWFJZChjb252ZXJ0ZXJDb250ZXh0LCB2aWV3cyk7XG5cdGlmIChvQ29uZmlnKSB7XG5cdFx0c2luZ2xlQ2hhcnRJZCA9IG9Db25maWcuY2hhcnRJZDtcblx0XHRzaW5nbGVUYWJsZUlkID0gb0NvbmZpZy50YWJsZUlkO1xuXHR9XG5cblx0Ly8gQ2hhcnQgaGFzIGEgZGVwZW5kZW5jeSB0byBmaWx0ZXIgYmFyIChpc3N1ZSB3aXRoIGxvYWRpbmcgZGF0YSkuIE9uY2UgcmVzb2x2ZWQsIHRoZSBjaGVjayBmb3IgY2hhcnQgc2hvdWxkIGJlIHJlbW92ZWQgaGVyZS5cblx0Ly8gVW50aWwgdGhlbiwgaGlkaW5nIGZpbHRlciBiYXIgaXMgbm93IGFsbG93ZWQgaWYgYSBjaGFydCBpcyBiZWluZyB1c2VkIG9uIExSLlxuXHRjb25zdCBoaWRlRmlsdGVyQmFyID0gbWFuaWZlc3RXcmFwcGVyLmlzRmlsdGVyQmFySGlkZGVuKCkgJiYgc2luZ2xlQ2hhcnRJZCA9PT0gXCJcIjtcblx0Y29uc3QgbHJGaWx0ZXJQcm9wZXJ0aWVzID0gZ2V0U2VsZWN0aW9uRmllbGRzKGNvbnZlcnRlckNvbnRleHQsIGxyVGFibGVWaXN1YWxpemF0aW9ucyk7XG5cdGNvbnN0IHNlbGVjdGlvbkZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zZWxlY3Rpb25GaWVsZHM7XG5cdGNvbnN0IHByb3BlcnR5SW5mb0ZpZWxkcyA9IGxyRmlsdGVyUHJvcGVydGllcy5zUHJvcGVydHlJbmZvO1xuXHRjb25zdCBoaWRlQmFzaWNTZWFyY2ggPSBnZXRGaWx0ZXJCYXJoaWRlQmFzaWNTZWFyY2gobHJUYWJsZVZpc3VhbGl6YXRpb25zLCBsckNoYXJ0VmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRjb25zdCBzZWxlY3Rpb25WYXJpYW50ID0gZ2V0U2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZXMgPSB1c2VTZW1hbnRpY0RhdGVSYW5nZSA/IGdldERlZmF1bHRTZW1hbnRpY0RhdGVzKGdldE1hbmlmZXN0RmlsdGVyRmllbGRzKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpKSA6IHt9O1xuXG5cdC8vIFNvcnQgaGVhZGVyIGFjdGlvbnMgYWNjb3JkaW5nIHRvIHBvc2l0aW9uIGF0dHJpYnV0ZXMgaW4gbWFuaWZlc3Rcblx0Y29uc3QgaGVhZGVyQWN0aW9ucyA9IGdldEhlYWRlckFjdGlvbnMoY29udmVydGVyQ29udGV4dCk7XG5cdGNvbnN0IGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGJvb2xlYW4gPVxuXHRcdG1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZVZpc3VhbGl6YXRpb25zKCkgfHwgY29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZTtcblx0aWYgKGhhc011bHRpcGxlRW50aXR5U2V0cykge1xuXHRcdGNoZWNrQ2hhcnRGaWx0ZXJCYXJJZCh2aWV3cywgZmlsdGVyQmFySWQpO1xuXHR9XG5cblx0Y29uc3QgdmlzdWFsaXphdGlvbklkcyA9IGxyVGFibGVWaXN1YWxpemF0aW9uc1xuXHRcdC5tYXAoKHZpc3VhbGl6YXRpb24pID0+IHtcblx0XHRcdHJldHVybiB2aXN1YWxpemF0aW9uLmFubm90YXRpb24uaWQ7XG5cdFx0fSlcblx0XHQuY29uY2F0KFxuXHRcdFx0bHJDaGFydFZpc3VhbGl6YXRpb25zLm1hcCgodmlzdWFsaXphdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdmlzdWFsaXphdGlvbi5pZDtcblx0XHRcdH0pXG5cdFx0KTtcblx0Y29uc3QgdGFyZ2V0Q29udHJvbElkcyA9IFtcblx0XHQuLi4oaGlkZUZpbHRlckJhciA/IFtdIDogW2ZpbHRlckJhcklkXSksXG5cdFx0Li4uKG1hbmlmZXN0V3JhcHBlci5nZXRWYXJpYW50TWFuYWdlbWVudCgpICE9PSBWYXJpYW50TWFuYWdlbWVudFR5cGUuQ29udHJvbCA/IHZpc3VhbGl6YXRpb25JZHMgOiBbXSksXG5cdFx0Li4uKCFoYXNNdWx0aVZpc3VhbGl6YXRpb25zICYmIHZpZXdzLmxlbmd0aCA+IDEgPyBbZ2V0SWNvblRhYkJhcklEKCldIDogW10pXG5cdF07XG5cblx0Y29uc3QgaWNvblRhYkJhcklkID0gXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCI7XG5cdGNvbnN0IGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zID0gdmlld3MubGVuZ3RoID4gMSAmJiAhaGFzTXVsdGlWaXN1YWxpemF0aW9ucztcblx0Y29uc3Qgc3RpY2t5U3ViaGVhZGVyUHJvdmlkZXIgPVxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zICYmIG1hbmlmZXN0V3JhcHBlci5nZXRTdGlja3lNdWx0aVRhYkhlYWRlckNvbmZpZ3VyYXRpb24oKSA/IGljb25UYWJCYXJJZCA6IHVuZGVmaW5lZDtcblxuXHRyZXR1cm4ge1xuXHRcdG1haW5FbnRpdHlTZXQ6IHNDb250ZXh0UGF0aCxcblx0XHRtYWluRW50aXR5VHlwZTogYCR7c0NvbnRleHRQYXRofS9gLFxuXHRcdGRpc3BsYXlNdWx0aVZpc3VhbGl6YXRpb25zLFxuXHRcdGljb25UYWJCYXJJZCxcblx0XHRzdGlja3lTdWJoZWFkZXJQcm92aWRlcixcblx0XHRzaW5nbGVUYWJsZUlkLFxuXHRcdHNpbmdsZUNoYXJ0SWQsXG5cdFx0c2hvd1RhYkNvdW50cyxcblx0XHRoZWFkZXJBY3Rpb25zLFxuXHRcdHNob3dQaW5uYWJsZVRvZ2dsZTogc2hvd1Bpbm5hYmxlVG9nZ2xlLFxuXHRcdGZpbHRlckJhcjoge1xuXHRcdFx0cHJvcGVydHlJbmZvOiBwcm9wZXJ0eUluZm9GaWVsZHMsXG5cdFx0XHRzZWxlY3Rpb25GaWVsZHMsXG5cdFx0XHRoaWRlQmFzaWNTZWFyY2hcblx0XHR9LFxuXHRcdHZpZXdzOiB2aWV3cyxcblx0XHRmaWx0ZXJCYXJJZDogaGlkZUZpbHRlckJhciA/IFwiXCIgOiBmaWx0ZXJCYXJJZCxcblx0XHRmaWx0ZXJDb25kaXRpb25zOiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBzZWxlY3Rpb25WYXJpYW50LFxuXHRcdFx0ZGVmYXVsdFNlbWFudGljRGF0ZXM6IGRlZmF1bHRTZW1hbnRpY0RhdGVzXG5cdFx0fSxcblx0XHR2YXJpYW50TWFuYWdlbWVudDoge1xuXHRcdFx0aWQ6IGZpbHRlclZhcmlhbnRNYW5hZ2VtZW50SUQsXG5cdFx0XHR0YXJnZXRDb250cm9sSWRzOiB0YXJnZXRDb250cm9sSWRzLmpvaW4oXCIsXCIpXG5cdFx0fSxcblx0XHRpc011bHRpRW50aXR5U2V0czogaGFzTXVsdGlwbGVFbnRpdHlTZXRzLFxuXHRcdGhhc011bHRpVmlzdWFsaXphdGlvbnM6IGhhc011bHRpVmlzdWFsaXphdGlvbnMsXG5cdFx0dGVtcGxhdGVUeXBlOiBtYW5pZmVzdFdyYXBwZXIuZ2V0VGVtcGxhdGVUeXBlKCksXG5cdFx0dXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0ZmlsdGVySW5pdGlhbExheW91dCxcblx0XHRmaWx0ZXJMYXlvdXQsXG5cdFx0a3BpRGVmaW5pdGlvbnM6IGdldEtQSURlZmluaXRpb25zKGNvbnZlcnRlckNvbnRleHQpLFxuXHRcdGhpZGVGaWx0ZXJCYXJcblx0fTtcbn07XG5cbmZ1bmN0aW9uIGdldENvbnRlbnRBcmVhSWQoY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgdmlld3M6IExpc3RSZXBvcnRWaWV3RGVmaW5pdGlvbltdKTogQ29udGVudEFyZWFJRCB8IHVuZGVmaW5lZCB7XG5cdGxldCBzaW5nbGVUYWJsZUlkID0gXCJcIixcblx0XHRzaW5nbGVDaGFydElkID0gXCJcIjtcblx0aWYgKFxuXHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuaGFzTXVsdGlwbGVWaXN1YWxpemF0aW9ucygpIHx8XG5cdFx0Y29udmVydGVyQ29udGV4dC5nZXRUZW1wbGF0ZVR5cGUoKSA9PT0gVGVtcGxhdGVUeXBlLkFuYWx5dGljYWxMaXN0UGFnZVxuXHQpIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBDb21iaW5lZFZpZXdEZWZpbml0aW9uO1xuXHRcdFx0aWYgKHZpZXcuY2hhcnRDb250cm9sSWQgJiYgdmlldy50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gdmlldy5jaGFydENvbnRyb2xJZDtcblx0XHRcdFx0c2luZ2xlVGFibGVJZCA9IHZpZXcudGFibGVDb250cm9sSWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKGxldCB2aWV3IG9mIHZpZXdzKSB7XG5cdFx0XHR2aWV3ID0gdmlldyBhcyBTaW5nbGVWaWV3RGVmaW5pdGlvbjtcblx0XHRcdGlmICghc2luZ2xlVGFibGVJZCAmJiAodmlldyBhcyBTaW5nbGVUYWJsZVZpZXdEZWZpbml0aW9uKS50YWJsZUNvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVUYWJsZUlkID0gKHZpZXcgYXMgU2luZ2xlVGFibGVWaWV3RGVmaW5pdGlvbikudGFibGVDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmICghc2luZ2xlQ2hhcnRJZCAmJiAodmlldyBhcyBTaW5nbGVDaGFydFZpZXdEZWZpbml0aW9uKS5jaGFydENvbnRyb2xJZCkge1xuXHRcdFx0XHRzaW5nbGVDaGFydElkID0gKHZpZXcgYXMgU2luZ2xlQ2hhcnRWaWV3RGVmaW5pdGlvbikuY2hhcnRDb250cm9sSWQgfHwgXCJcIjtcblx0XHRcdH1cblx0XHRcdGlmIChzaW5nbGVDaGFydElkICYmIHNpbmdsZVRhYmxlSWQpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChzaW5nbGVUYWJsZUlkIHx8IHNpbmdsZUNoYXJ0SWQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y2hhcnRJZDogc2luZ2xlQ2hhcnRJZCxcblx0XHRcdHRhYmxlSWQ6IHNpbmdsZVRhYmxlSWRcblx0XHR9O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|