@sapui5/sap.fe.core 1.102.0 → 1.103.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +62 -26
- package/src/sap/fe/core/AppComponent.ts +56 -40
- package/src/sap/fe/core/AppStateHandler.js +10 -10
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +236 -109
- package/src/sap/fe/core/CommonUtils.ts +252 -136
- package/src/sap/fe/core/ExtensionAPI.js +24 -27
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +4 -4
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +6 -6
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +8 -8
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/controllerextensions/EditFlow.js +129 -118
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
- package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +22 -22
- package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
- package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +11 -25
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +2 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
- package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
- package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
- package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
- package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
- package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
- package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
- package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +49 -35
- package/src/sap/fe/core/messagebundle_ar.properties +13 -5
- package/src/sap/fe/core/messagebundle_bg.properties +13 -5
- package/src/sap/fe/core/messagebundle_ca.properties +13 -5
- package/src/sap/fe/core/messagebundle_cs.properties +13 -5
- package/src/sap/fe/core/messagebundle_cy.properties +14 -6
- package/src/sap/fe/core/messagebundle_da.properties +13 -5
- package/src/sap/fe/core/messagebundle_de.properties +15 -7
- package/src/sap/fe/core/messagebundle_el.properties +14 -6
- package/src/sap/fe/core/messagebundle_en.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
- package/src/sap/fe/core/messagebundle_es.properties +13 -5
- package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
- package/src/sap/fe/core/messagebundle_et.properties +13 -5
- package/src/sap/fe/core/messagebundle_fi.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr.properties +14 -6
- package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
- package/src/sap/fe/core/messagebundle_hi.properties +14 -6
- package/src/sap/fe/core/messagebundle_hr.properties +14 -6
- package/src/sap/fe/core/messagebundle_hu.properties +13 -5
- package/src/sap/fe/core/messagebundle_id.properties +13 -5
- package/src/sap/fe/core/messagebundle_it.properties +33 -25
- package/src/sap/fe/core/messagebundle_iw.properties +13 -5
- package/src/sap/fe/core/messagebundle_ja.properties +14 -6
- package/src/sap/fe/core/messagebundle_kk.properties +13 -5
- package/src/sap/fe/core/messagebundle_ko.properties +13 -5
- package/src/sap/fe/core/messagebundle_lt.properties +13 -5
- package/src/sap/fe/core/messagebundle_lv.properties +14 -6
- package/src/sap/fe/core/messagebundle_ms.properties +13 -5
- package/src/sap/fe/core/messagebundle_nl.properties +13 -5
- package/src/sap/fe/core/messagebundle_no.properties +13 -5
- package/src/sap/fe/core/messagebundle_pl.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt.properties +13 -5
- package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
- package/src/sap/fe/core/messagebundle_ro.properties +13 -5
- package/src/sap/fe/core/messagebundle_ru.properties +13 -5
- package/src/sap/fe/core/messagebundle_sh.properties +13 -5
- package/src/sap/fe/core/messagebundle_sk.properties +13 -5
- package/src/sap/fe/core/messagebundle_sl.properties +17 -9
- package/src/sap/fe/core/messagebundle_sv.properties +14 -6
- package/src/sap/fe/core/messagebundle_th.properties +13 -5
- package/src/sap/fe/core/messagebundle_tr.properties +13 -5
- package/src/sap/fe/core/messagebundle_uk.properties +13 -5
- package/src/sap/fe/core/messagebundle_vi.properties +13 -5
- package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
- package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
- package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +10 -9
- package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +148 -93
- package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -116,7 +116,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
} else {
|
|
119
|
-
Log.info("Table: "
|
|
119
|
+
Log.info("Table: ".concat(oTable.getId(), " was not refreshed. No binding found!"));
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
},
|
|
@@ -137,7 +137,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
137
137
|
};
|
|
138
138
|
},
|
|
139
139
|
apply: function (oOPLayout, oControlState) {
|
|
140
|
-
|
|
140
|
+
if (oControlState) {
|
|
141
|
+
oOPLayout.setSelectedSection(oControlState.selectedSection);
|
|
142
|
+
}
|
|
141
143
|
},
|
|
142
144
|
refreshBinding: function (oOPLayout) {
|
|
143
145
|
var oBindingContext = oOPLayout.getBindingContext();
|
|
@@ -173,7 +175,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
173
175
|
oBinding.refresh();
|
|
174
176
|
}
|
|
175
177
|
} else {
|
|
176
|
-
Log.info("ObjectPage: "
|
|
178
|
+
Log.info("ObjectPage: ".concat(oOPLayout.getId(), " was not refreshed. No binding found!"));
|
|
177
179
|
}
|
|
178
180
|
}
|
|
179
181
|
},
|
|
@@ -184,7 +186,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
184
186
|
};
|
|
185
187
|
},
|
|
186
188
|
apply: function (oQuickFilter, oControlState) {
|
|
187
|
-
|
|
189
|
+
if (oControlState) {
|
|
190
|
+
oQuickFilter.setSelectorKey(oControlState.selectedKey);
|
|
191
|
+
}
|
|
188
192
|
}
|
|
189
193
|
},
|
|
190
194
|
"sap.m.SegmentedButton": {
|
|
@@ -194,7 +198,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
194
198
|
};
|
|
195
199
|
},
|
|
196
200
|
apply: function (oSegmentedButton, oControlState) {
|
|
197
|
-
|
|
201
|
+
if (oControlState) {
|
|
202
|
+
oSegmentedButton.setSelectedKey(oControlState.selectedKey);
|
|
203
|
+
}
|
|
198
204
|
}
|
|
199
205
|
},
|
|
200
206
|
"sap.m.Select": {
|
|
@@ -204,7 +210,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
204
210
|
};
|
|
205
211
|
},
|
|
206
212
|
apply: function (oSelect, oControlState) {
|
|
207
|
-
|
|
213
|
+
if (oControlState) {
|
|
214
|
+
oSelect.setSelectedKey(oControlState.selectedKey);
|
|
215
|
+
}
|
|
208
216
|
}
|
|
209
217
|
},
|
|
210
218
|
"sap.f.DynamicPage": {
|
|
@@ -214,7 +222,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
214
222
|
};
|
|
215
223
|
},
|
|
216
224
|
apply: function (oDynamicPage, oControlState) {
|
|
217
|
-
|
|
225
|
+
if (oControlState) {
|
|
226
|
+
oDynamicPage.setHeaderExpanded(oControlState.headerExpanded);
|
|
227
|
+
}
|
|
218
228
|
}
|
|
219
229
|
},
|
|
220
230
|
"sap.ui.core.mvc.View": {
|
|
@@ -308,7 +318,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
308
318
|
*
|
|
309
319
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
310
320
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
311
|
-
*
|
|
321
|
+
*
|
|
322
|
+
* @param aCollectedControls The collected controls
|
|
312
323
|
* @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshControls
|
|
313
324
|
* @protected
|
|
314
325
|
*/
|
|
@@ -323,7 +334,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
323
334
|
var oPromiseChain = Promise.resolve();
|
|
324
335
|
|
|
325
336
|
if (typeof oControlRefreshBindingHandler.refreshBinding !== "function") {
|
|
326
|
-
Log.info("refreshBinding handler for control: "
|
|
337
|
+
Log.info("refreshBinding handler for control: ".concat(oControl.getMetadata().getName(), " is not provided"));
|
|
327
338
|
} else {
|
|
328
339
|
oPromiseChain = oPromiseChain.then(oControlRefreshBindingHandler.refreshBinding.bind(this, oControl));
|
|
329
340
|
}
|
|
@@ -362,9 +373,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
362
373
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
363
374
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
364
375
|
*
|
|
365
|
-
* @param
|
|
366
|
-
* @param
|
|
367
|
-
*
|
|
376
|
+
* @param oControl The control for which the refresh handler is adapted.
|
|
377
|
+
* @param oControlHandler A plain object which can have one function: <code>refreshBinding</code>
|
|
368
378
|
* @alias sap.fe.core.controllerextensions.ViewState#adaptBindingRefreshHandler
|
|
369
379
|
* @protected
|
|
370
380
|
*/
|
|
@@ -407,9 +417,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
407
417
|
* Helper function to enable multi override. It is adding an additional parameter (array) to the provided
|
|
408
418
|
* function (and its parameters), that will be evaluated via <code>Promise.all</code>.
|
|
409
419
|
*
|
|
410
|
-
* @param
|
|
420
|
+
* @param fnCall The function to be called
|
|
411
421
|
* @param args
|
|
412
|
-
* @returns
|
|
422
|
+
* @returns A promise to be resolved with the result of all overrides
|
|
413
423
|
*/
|
|
414
424
|
;
|
|
415
425
|
|
|
@@ -430,9 +440,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
430
440
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
431
441
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
432
442
|
*
|
|
433
|
-
* @param
|
|
434
|
-
* @param
|
|
435
|
-
*
|
|
443
|
+
* @param oControl The control to get state handler for
|
|
444
|
+
* @param aControlHandler A list of plain objects with two functions: <code>retrieve</code> and <code>apply</code>
|
|
436
445
|
* @alias sap.fe.core.controllerextensions.ViewState#adaptControlStateHandler
|
|
437
446
|
* @protected
|
|
438
447
|
*/
|
|
@@ -444,8 +453,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
444
453
|
/**
|
|
445
454
|
* Returns a map of <code>retrieve</code> and <code>apply</code> functions for a certain control.
|
|
446
455
|
*
|
|
447
|
-
* @param
|
|
448
|
-
* @returns
|
|
456
|
+
* @param oControl The control to get state handler for
|
|
457
|
+
* @returns A plain object with two functions: <code>retrieve</code> and <code>apply</code>
|
|
449
458
|
*/
|
|
450
459
|
;
|
|
451
460
|
|
|
@@ -471,7 +480,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
471
480
|
*
|
|
472
481
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
473
482
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
474
|
-
*
|
|
483
|
+
*
|
|
484
|
+
* @param aCollectedControls The collected controls
|
|
475
485
|
* @alias sap.fe.core.controllerextensions.ViewState#adaptStateControls
|
|
476
486
|
* @protected
|
|
477
487
|
*/
|
|
@@ -483,8 +493,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
483
493
|
/**
|
|
484
494
|
* Returns the key to be used for given control.
|
|
485
495
|
*
|
|
486
|
-
* @param
|
|
487
|
-
* @returns
|
|
496
|
+
* @param oControl The control to get state key for
|
|
497
|
+
* @returns The key to be used for storing the controls state
|
|
488
498
|
*/
|
|
489
499
|
;
|
|
490
500
|
|
|
@@ -495,8 +505,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
495
505
|
* Retrieve the view state of this extensions view.
|
|
496
506
|
* When this function is called more than once before finishing, all but the final response will resolve to <code>undefined</code>.
|
|
497
507
|
*
|
|
498
|
-
* @returns
|
|
499
|
-
*
|
|
508
|
+
* @returns A promise resolving the view state
|
|
500
509
|
* @alias sap.fe.core.controllerextensions.ViewState#retrieveViewState
|
|
501
510
|
* @public
|
|
502
511
|
*/
|
|
@@ -545,8 +554,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
545
554
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
546
555
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
547
556
|
*
|
|
548
|
-
* @param
|
|
549
|
-
*
|
|
557
|
+
* @param mAdditionalStates The additional state
|
|
550
558
|
* @alias sap.fe.core.controllerextensions.ViewState#retrieveAdditionalStates
|
|
551
559
|
* @protected
|
|
552
560
|
*/
|
|
@@ -558,7 +566,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
558
566
|
/**
|
|
559
567
|
* Returns a map of additional states (not control bound) to be added to the current view state of the given view.
|
|
560
568
|
*
|
|
561
|
-
* @returns
|
|
569
|
+
* @returns Additional view states
|
|
562
570
|
*/
|
|
563
571
|
;
|
|
564
572
|
|
|
@@ -570,8 +578,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
570
578
|
/**
|
|
571
579
|
* Returns the current state for the given control.
|
|
572
580
|
*
|
|
573
|
-
* @param
|
|
574
|
-
* @returns
|
|
581
|
+
* @param oControl The object to get the state for
|
|
582
|
+
* @returns The state for the given control
|
|
575
583
|
*/
|
|
576
584
|
;
|
|
577
585
|
|
|
@@ -581,7 +589,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
581
589
|
var aControlStateHandlers = this.getControlStateHandler(oControl);
|
|
582
590
|
return Promise.all(aControlStateHandlers.map(function (mControlStateHandler) {
|
|
583
591
|
if (typeof mControlStateHandler.retrieve !== "function") {
|
|
584
|
-
throw new Error("controlStateHandler.retrieve is not a function for control: "
|
|
592
|
+
throw new Error("controlStateHandler.retrieve is not a function for control: ".concat(oControl.getMetadata().getName()));
|
|
585
593
|
}
|
|
586
594
|
|
|
587
595
|
return mControlStateHandler.retrieve.call(_this4, oControl);
|
|
@@ -600,9 +608,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
600
608
|
* Important:
|
|
601
609
|
* You should only override this method for custom pages and not for the standard ListReportPage and ObjectPage!
|
|
602
610
|
*
|
|
603
|
-
* @returns
|
|
611
|
+
* @returns If <code>true</code>, only the initial view state is applied once,
|
|
604
612
|
* else any new view state is also applied on follow-up calls (default)
|
|
605
|
-
*
|
|
606
613
|
* @alias sap.fe.core.controllerextensions.ViewState#applyInitialStateOnly
|
|
607
614
|
* @protected
|
|
608
615
|
*/
|
|
@@ -614,15 +621,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
614
621
|
/**
|
|
615
622
|
* Applies the given view state to this extensions view.
|
|
616
623
|
*
|
|
617
|
-
* @param
|
|
618
|
-
* @param
|
|
619
|
-
* @param
|
|
620
|
-
* @param
|
|
621
|
-
* @param
|
|
622
|
-
* @param
|
|
623
|
-
*
|
|
624
|
-
* @returns {Promise} Promise for async state handling
|
|
625
|
-
*
|
|
624
|
+
* @param oViewState The view state to apply (can be undefined)
|
|
625
|
+
* @param oNavParameter The current navigation parameter
|
|
626
|
+
* @param oNavParameter.navigationType The actual navigation type
|
|
627
|
+
* @param oNavParameter.selectionVariant The selectionVariant from the navigation
|
|
628
|
+
* @param oNavParameter.selectionVariantDefaults The selectionVariant defaults from the navigation
|
|
629
|
+
* @param oNavParameter.requiresStandardVariant Defines whether standard variant must be used in VM
|
|
630
|
+
* @returns Promise for async state handling
|
|
626
631
|
* @alias sap.fe.core.controllerextensions.ViewState#applyViewState
|
|
627
632
|
* @public
|
|
628
633
|
*/
|
|
@@ -654,7 +659,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
654
659
|
return _this5.collectResults(_this5.base.viewState.applyNavigationParameters, oNavParameter);
|
|
655
660
|
}
|
|
656
661
|
}).finally(function () {
|
|
657
|
-
|
|
662
|
+
_this5.collectResults(_this5.base.viewState.onAfterStateApplied).then(_this5._setInitialStateApplied.bind(_this5)).catch(function (e) {
|
|
663
|
+
Log.error(e);
|
|
664
|
+
});
|
|
658
665
|
});
|
|
659
666
|
};
|
|
660
667
|
|
|
@@ -686,8 +693,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
686
693
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
687
694
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
688
695
|
*
|
|
689
|
-
* @param
|
|
690
|
-
*
|
|
696
|
+
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
691
697
|
* @alias sap.fe.core.controllerextensions.ViewState#onBeforeStateApplied
|
|
692
698
|
* @protected
|
|
693
699
|
*/
|
|
@@ -702,8 +708,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
702
708
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
703
709
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
704
710
|
*
|
|
705
|
-
* @param
|
|
706
|
-
*
|
|
711
|
+
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
707
712
|
* @alias sap.fe.core.controllerextensions.ViewState#onAfterStateApplied
|
|
708
713
|
* @protected
|
|
709
714
|
*/
|
|
@@ -718,9 +723,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
718
723
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
719
724
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
720
725
|
*
|
|
721
|
-
* @param
|
|
722
|
-
* @param
|
|
723
|
-
*
|
|
726
|
+
* @param oViewState The current view state
|
|
727
|
+
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
724
728
|
* @alias sap.fe.core.controllerextensions.ViewState#applyAdditionalStates
|
|
725
729
|
* @protected
|
|
726
730
|
*/
|
|
@@ -735,13 +739,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
735
739
|
* This function is meant to be individually overridden by consuming controllers, but not to be called directly.
|
|
736
740
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
737
741
|
*
|
|
738
|
-
* @param
|
|
739
|
-
* @param
|
|
740
|
-
* @param
|
|
741
|
-
* @param
|
|
742
|
-
* @param
|
|
743
|
-
* @param
|
|
744
|
-
*
|
|
742
|
+
* @param oNavParameter The current navigation parameter
|
|
743
|
+
* @param oNavParameter.navigationType The actual navigation type
|
|
744
|
+
* @param [oNavParameter.selectionVariant] The selectionVariant from the navigation
|
|
745
|
+
* @param [oNavParameter.selectionVariantDefaults] The selectionVariant defaults from the navigation
|
|
746
|
+
* @param [oNavParameter.requiresStandardVariant] Defines whether standard variant must be used in VM
|
|
747
|
+
* @param aPromises Extensible array of promises to be resolved before continuing
|
|
745
748
|
* @alias sap.fe.core.controllerextensions.ViewState#applyNavigationParameters
|
|
746
749
|
* @protected
|
|
747
750
|
*/
|
|
@@ -754,10 +757,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
754
757
|
/**
|
|
755
758
|
* Applying the given state to the given control.
|
|
756
759
|
*
|
|
757
|
-
* @param
|
|
758
|
-
* @param
|
|
759
|
-
* @param
|
|
760
|
-
* @returns
|
|
760
|
+
* @param oControl The object to apply the given state
|
|
761
|
+
* @param oControlState The state for the given control
|
|
762
|
+
* @param [oNavParameters] The current navigation parameters
|
|
763
|
+
* @returns Return a promise for async state handling
|
|
761
764
|
*/
|
|
762
765
|
;
|
|
763
766
|
|
|
@@ -768,7 +771,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
768
771
|
var oPromiseChain = Promise.resolve();
|
|
769
772
|
aControlStateHandlers.forEach(function (mControlStateHandler) {
|
|
770
773
|
if (typeof mControlStateHandler.apply !== "function") {
|
|
771
|
-
throw new Error("controlStateHandler.apply is not a function for control: "
|
|
774
|
+
throw new Error("controlStateHandler.apply is not a function for control: ".concat(oControl.getMetadata().getName()));
|
|
772
775
|
}
|
|
773
776
|
|
|
774
777
|
oPromiseChain = oPromiseChain.then(mControlStateHandler.apply.bind(_this6, oControl, oControlState, oNavParameters));
|
|
@@ -784,4 +787,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
784
787
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec43, _dec44], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec45, _dec46], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype)), _class2)) || _class);
|
|
785
788
|
return ViewState;
|
|
786
789
|
}, false);
|
|
787
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJuYW1lcyI6WyJBRERJVElPTkFMX1NUQVRFU19LRVkiLCJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsIm9Db250cm9sU3RhdGUiLCJ2YXJpYW50SWQiLCJ1bmRlZmluZWQiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJvVGFiQmFyIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm9TZWxlY3RlZEl0ZW0iLCJnZXRJdGVtcyIsImZpbmQiLCJvSXRlbSIsImdldEtleSIsInNldFNlbGVjdGVkSXRlbSIsIm9GaWx0ZXJCYXIiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwibUZpbHRlckJhclN0YXRlIiwiYVByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwibUZpbHRlciIsImZpbHRlciIsIm9Qcm9wZXJ0eUluZm8iLCJwYXRoIiwicmVtb3ZlRnJvbUFwcFN0YXRlIiwibGVuZ3RoIiwiZm9yRWFjaCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsIm9UYWJsZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJyZWZyZXNoQmluZGluZyIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJyZWZyZXNoIiwib0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0Iiwic0dyb3VwSWQiLCJnZXRHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJvQ2hhcnQiLCJvT1BMYXlvdXQiLCJzZWxlY3RlZFNlY3Rpb24iLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic1N0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib05hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCIka2luZCIsImFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0IiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImFQcmV2Iiwic05hdlByb3AiLCIkaXNDb2xsZWN0aW9uIiwicHVzaCIsImFQcm9wZXJ0aWVzIiwiJFByb3BlcnR5UGF0aCIsImNvbmNhdCIsIm9RdWlja0ZpbHRlciIsImdldFNlbGVjdG9yS2V5Iiwic2V0U2VsZWN0b3JLZXkiLCJvU2VnbWVudGVkQnV0dG9uIiwic2V0U2VsZWN0ZWRLZXkiLCJvU2VsZWN0Iiwib0R5bmFtaWNQYWdlIiwiaGVhZGVyRXhwYW5kZWQiLCJnZXRIZWFkZXJFeHBhbmRlZCIsInNldEhlYWRlckV4cGFuZGVkIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm9OYXZQYXJhbWV0ZXJzIiwiYXBwbHlWaWV3U3RhdGUiLCJyZWZyZXNoVmlld0JpbmRpbmdzIiwib0NvbXBvbmVudENvbnRhaW5lciIsIm9Db21wb25lbnQiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsInJldHJpZXZlQ29udHJvbFN0YXRlIiwiZ2V0Um9vdENvbnRyb2wiLCJhcHBseUNvbnRyb2xTdGF0ZSIsIlZpZXdTdGF0ZSIsImRlZmluZVVJNUNsYXNzIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsInByaXZhdGVFeHRlbnNpb24iLCJJbnN0ZWFkIiwiX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyIiwiX3BJbml0aWFsU3RhdGVBcHBsaWVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwiaXNBIiwicmVmcmVzaENvbnRyb2xCaW5kaW5nIiwiYmluZCIsImFDb2xsZWN0ZWRDb250cm9scyIsIm9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9SZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJzVHlwZSIsImFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyIiwib0NvbnRyb2xIYW5kbGVyIiwib25TdXNwZW5kIiwib25SZXN0b3JlIiwiZGVzdHJveSIsImZuQ2FsbCIsImFSZXN1bHRzIiwiYXJncyIsImFsbCIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImFDb250cm9sSGFuZGxlciIsImdldENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyIiwiYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhc3NpZ24iLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJnZXRTdGF0ZUtleSIsImdldFZpZXciLCJnZXRMb2NhbElkIiwibWFwIiwidlJlc3VsdCIsImtleSIsInZhbHVlIiwiYVJlc29sdmVkU3RhdGVzIiwib1N0YXRlcyIsIm1TdGF0ZSIsIm9DdXJyZW50U3RhdGUiLCJtZXJnZU9iamVjdHMiLCJvVmlld1N0YXRlIiwiX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsIm1BZGRpdGlvbmFsU3RhdGVzIiwiZmluYWxseSIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFDb250cm9sU3RhdGVIYW5kbGVycyIsIm1Db250cm9sU3RhdGVIYW5kbGVyIiwiRXJyb3IiLCJjYWxsIiwiYVN0YXRlcyIsIm9GaW5hbFN0YXRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5Iiwib05hdlBhcmFtZXRlciIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwib25CZWZvcmVTdGF0ZUFwcGxpZWQiLCJzS2V5IiwibmF2aWdhdGlvblR5cGUiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwic1ZhcmlhbnRJZCIsImFWYXJpYW50cyIsImdldFZhcmlhbnRzIiwiYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSIsIm9WYXJpYW50IiwicEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiYVByb21pc2VzIiwiZ2V0SW50ZXJmYWNlIiwiQ29udHJvbGxlckV4dGVuc2lvbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUEscUJBQXFCLEdBQUcsbUJBQTlCO0FBQUEsTUFDQ0MsT0FBTyxHQUFHQyxVQUFVLENBQUNELE9BRHRCLEMsQ0FFQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUUsd0JBQTZDLEdBQUc7QUFDckQsNENBQXdDO0FBQ3ZDQyxNQUFBQSxRQUFRLEVBQUUsVUFBVUMsR0FBVixFQUFvQjtBQUM3QixlQUFPO0FBQ04sdUJBQWFB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O0FBQzVELFlBQUksT0FBT0Esb0JBQW9CLENBQUM5SyxLQUE1QixLQUFzQyxVQUExQyxFQUFzRDtBQUNyRCxnQkFBTSxJQUFJK0ssS0FBSixDQUFVLDhEQUE4RDlDLFFBQVEsQ0FBQ08sV0FBVCxHQUF1QkMsT0FBdkIsRUFBeEUsQ0FBTjtBQUNBOztBQUNEVCxRQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ3pHLElBQWQsQ0FBbUJ1SixvQkFBb0IsQ0FBQzlLLEtBQXJCLENBQTJCb0ksSUFBM0IsQ0FBZ0MsTUFBaEMsRUFBc0NILFFBQXRDLEVBQWdEaEksYUFBaEQsRUFBK0RvRyxjQUEvRCxDQUFuQixDQUFoQjtBQUNBLE9BTEQ7QUFNQSxhQUFPMkIsYUFBUDtBQUNBLEs7O1dBQ0RxRSxZLEdBQUEsd0JBQWU7QUFDZCxhQUFPLElBQVA7QUFDQSxLOzs7SUFyaUJzQkMsbUI7U0F3aUJUeEYsUyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2VPYmplY3RzIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHByaXZhdGVFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG4vLyBhZGRpdGlvbmFsU3RhdGVzIGFyZSBzdG9yZWQgbmV4dCB0byBjb250cm9sIElEcywgc28gbmFtZSBjbGFzaCBhdm9pZGFuY2UgbmVlZGVkLiBGb3J0dW5hdGVseSBJRHMgaGF2ZSByZXN0cmljdGlvbnM6XG4vLyBcIkFsbG93ZWQgaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIChjYXBpdGFsL2xvd2VyY2FzZSksIGRpZ2l0cywgdW5kZXJzY29yZXMsIGRhc2hlcywgcG9pbnRzIGFuZC9vciBjb2xvbnMuXCJcbi8vIFRoZXJlZm9yZSBhZGRpbmcgYSBzeW1ib2wgbGlrZSAjIG9yIEBcbmNvbnN0IEFERElUSU9OQUxfU1RBVEVTX0tFWSA9IFwiI2FkZGl0aW9uYWxTdGF0ZXNcIixcblx0TmF2VHlwZSA9IE5hdkxpYnJhcnkuTmF2VHlwZTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIG1ldGhvZHMgdG8gcmV0cmlldmUgJiBhcHBseSBzdGF0ZXMgZm9yIHRoZSBkaWZmZXJlbnQgY29udHJvbHMgLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZNOiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFwidmFyaWFudElkXCI6IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvVk06IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSAmJiBvQ29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gdW5kZWZpbmVkICYmIG9Db250cm9sU3RhdGUudmFyaWFudElkICE9PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSkge1xuXHRcdFx0XHRjb25zdCBzVmFyaWFudFJlZmVyZW5jZSA9IHRoaXMuX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk0sIG9Db250cm9sU3RhdGUudmFyaWFudElkKVxuXHRcdFx0XHRcdD8gb0NvbnRyb2xTdGF0ZS52YXJpYW50SWRcblx0XHRcdFx0XHQ6IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0cmV0dXJuIENvbnRyb2xWYXJpYW50QXBwbHlBUEkuYWN0aXZhdGVWYXJpYW50KHtcblx0XHRcdFx0XHRlbGVtZW50OiBvVk0sXG5cdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLkljb25UYWJCYXJcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1RhYkJhcjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1RhYkJhci5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvVGFiQmFyOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRJdGVtID0gb1RhYkJhci5nZXRJdGVtcygpLmZpbmQoZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0l0ZW0uZ2V0S2V5KCkgPT09IG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkSXRlbSkge1xuXHRcdFx0XHRcdG9UYWJCYXIuc2V0U2VsZWN0ZWRJdGVtKG9TZWxlY3RlZEl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuRmlsdGVyQmFyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IGFueSkge1xuXHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0ZpbHRlckJhcikudGhlbihmdW5jdGlvbiAobUZpbHRlckJhclN0YXRlOiBhbnkpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIHNlbnNpdGl2ZSBvciB2aWV3IHN0YXRlIGlycmVsZXZhbnQgZmllbGRzXG5cdFx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzSW5mbyA9IG9GaWx0ZXJCYXIuZ2V0UHJvcGVydHlJbmZvU2V0KCksXG5cdFx0XHRcdFx0bUZpbHRlciA9IG1GaWx0ZXJCYXJTdGF0ZS5maWx0ZXIgfHwge307XG5cdFx0XHRcdGFQcm9wZXJ0aWVzSW5mb1xuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Qcm9wZXJ0eUluZm86IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0bUZpbHRlcltvUHJvcGVydHlJbmZvLnBhdGhdICYmIChvUHJvcGVydHlJbmZvLnJlbW92ZUZyb21BcHBTdGF0ZSB8fCBtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0ubGVuZ3RoID09PSAwKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHlJbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBtRmlsdGVyQmFyU3RhdGU7XG5cdFx0XHR9KTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob0ZpbHRlckJhcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIsIG9Db250cm9sU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRyZXR1cm4gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvVGFibGUpO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvVGFibGU6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRpZiAoIW9Db250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdG9Db250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9UYWJsZSwgb0NvbnRyb2xTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9UYWJsZUJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9Sb290QmluZGluZyA9PT0gb1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRcdC8vIGFic29sdXRlIGJpbmRpbmdcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWxhdGl2ZSBiaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb0hlYWRlckNvbnRleHQgPSBvVGFibGVCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRjb25zdCBzR3JvdXBJZCA9IG9UYWJsZUJpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdFx0aWYgKG9IZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRvSGVhZGVyQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIHNHcm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiVGFibGU6IFwiICsgb1RhYmxlLmdldElkKCkgKyBcIiB3YXMgbm90IHJlZnJlc2hlZC4gTm8gYmluZGluZyBmb3VuZCFcIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuQ2hhcnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob0NoYXJ0OiBhbnkpIHtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9DaGFydCk7XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9DaGFydCwgb0NvbnRyb2xTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob09QTGF5b3V0OiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkU2VjdGlvbjogb09QTGF5b3V0LmdldFNlbGVjdGVkU2VjdGlvbigpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRvQ29udHJvbFN0YXRlICYmIG9PUExheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24ob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZFNlY3Rpb24pO1xuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09QTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBzU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKG9PUExheW91dCwgc01ldGFQYXRoKTtcblx0XHRcdFx0aWYgKHNTdHJhdGVneSA9PT0gXCJzZWxmXCIpIHtcblx0XHRcdFx0XHQvLyBSZWZyZXNoIG1haW4gY29udGV4dCBhbmQgMS0xIG5hdmlnYXRpb24gcHJvcGVydGllcyBvciBPUFxuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHtcblx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHR9KSB8fCB7fSxcblx0XHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFQcmV2OiBhbnlbXSwgc05hdlByb3A6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVByZXYucHVzaCh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzTmF2UHJvcCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0XHR9LCBbXSksXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKGFQcm9wZXJ0aWVzLmNvbmNhdChhTmF2UHJvcGVydGllc1RvUmVxdWVzdCksIHNHcm91cElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRcdG9CaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oXCJPYmplY3RQYWdlOiBcIiArIG9PUExheW91dC5nZXRJZCgpICsgXCIgd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyQ29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1F1aWNrRmlsdGVyLmdldFNlbGVjdG9yS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdG9Db250cm9sU3RhdGUgJiYgb1F1aWNrRmlsdGVyLnNldFNlbGVjdG9yS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWdtZW50ZWRCdXR0b25cIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlZ21lbnRlZEJ1dHRvbjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0b0NvbnRyb2xTdGF0ZSAmJiBvU2VnbWVudGVkQnV0dG9uLnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWxlY3RcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlbGVjdDogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlbGVjdC5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvU2VsZWN0OiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0b0NvbnRyb2xTdGF0ZSAmJiBvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdH1cblx0fSxcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVhZGVyRXhwYW5kZWQ6IG9EeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRvQ29udHJvbFN0YXRlICYmIG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChvQ29udHJvbFN0YXRlLmhlYWRlckV4cGFuZGVkKTtcblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZpZXc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUob0NvbnRyb2xsZXIudmlld1N0YXRlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1ZpZXc6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55LCBvTmF2UGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5hcHBseVZpZXdTdGF0ZShvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9Db21wb25lbnRDb250YWluZXI6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9Db21wb25lbnRDb250YWluZXI6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55LCBvTmF2UGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGZvciBzdGF0ZSBoYW5kbGluZ1xuICpcbiAqIElmIHlvdSBuZWVkIHRvIG1haW50YWluIGEgc3BlY2lmaWMgc3RhdGUgZm9yIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gdXNlIHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbi5cbiAqXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS44NS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZVwiKVxuY2xhc3MgVmlld1N0YXRlIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByaXZhdGUgX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyOiBudW1iZXI7XG5cdHByaXZhdGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkOiBQcm9taXNlPHVua25vd24+O1xuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU/OiBGdW5jdGlvbjtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0LyoqXG5cdCAqIENvbnN0cnVjdG9yLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciA9IDA7XG5cdFx0dGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHR9KTtcblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZWZyZXNoVmlld0JpbmRpbmdzKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKS50aGVuKChhQ29udHJvbHM6IGFueSkgPT4ge1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGFDb250cm9sc1xuXHRcdFx0XHQuZmlsdGVyKChvQ29udHJvbDogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4odGhpcy5yZWZyZXNoQ29udHJvbEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKiBAcGFyYW0ge0FycmF5PHNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3Q+fSBhQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hDb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKGFDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJlZnJlc2hDb250cm9sQmluZGluZyhvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3Qgb0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIgPSB0aGlzLmdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0aWYgKHR5cGVvZiBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZyAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRMb2cuaW5mbyhcInJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgZm9yIGNvbnRyb2w6IFwiICsgb0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgKyBcIiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4ob0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIucmVmcmVzaEJpbmRpbmcuYmluZCh0aGlzLCBvQ29udHJvbCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdH0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEEgcGxhaW4gb2JqZWN0IHdpdGggb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICovXG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sOiBhbnkpOiBhbnkge1xuXHRcdGNvbnN0IG9SZWZyZXNoQmluZGluZ0hhbmRsZXI6IGFueSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZV0ucmVmcmVzaEJpbmRpbmcgfHwge307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblx0LyoqXG5cdCAqIEN1c3RvbWl6ZSB0aGUgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCBmb3Igd2hpY2ggdGhlIHJlZnJlc2ggaGFuZGxlciBpcyBhZGFwdGVkLlxuXHQgKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IG9Db250cm9sSGFuZGxlciBBIHBsYWluIG9iamVjdCB3aGljaCBjYW4gaGF2ZSBvbmUgZnVuY3Rpb246IDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb0NvbnRyb2xIYW5kbGVyOiBhbnlbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBzdXNwZW5kZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvblN1c3BlbmRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblN1c3BlbmQoKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3RvcmVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjb25SZXN0b3JlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25SZXN0b3JlKCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIERlc3RydWN0b3IgbWV0aG9kIGZvciBvYmplY3RzLlxuXHQgKi9cblx0ZGVzdHJveSgpIHtcblx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdHN1cGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5hYmxlIG11bHRpIG92ZXJyaWRlLiBJdCBpcyBhZGRpbmcgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgKGFycmF5KSB0byB0aGUgcHJvdmlkZWRcblx0ICogZnVuY3Rpb24gKGFuZCBpdHMgcGFyYW1ldGVycyksIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgdmlhIDxjb2RlPlByb21pc2UuYWxsPC9jb2RlPi5cblx0ICpcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMge1Byb21pc2V9IEEgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHRoZSByZXN1bHQgb2YgYWxsIG92ZXJyaWRlc1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjb2xsZWN0UmVzdWx0cyhmbkNhbGw6IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGFSZXN1bHRzOiBhbnlbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IGFDb250cm9sSGFuZGxlciBBIGxpc3Qgb2YgcGxhaW4gb2JqZWN0cyB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIGFDb250cm9sSGFuZGxlcjogb2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmV0cmlldmU8L2NvZGU+IGFuZCA8Y29kZT5hcHBseTwvY29kZT4gZnVuY3Rpb25zIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMge29iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogYW55W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdGlmIChvQ29udHJvbC5pc0Eoc1R5cGUpKSB7XG5cdFx0XHRcdFx0Ly8gYXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBpbnRlcm5hbCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBcblx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sLCBhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdFx0cmV0dXJuIGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIuY29uY2F0KGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIGZvciBnaXZlbiB2aWV3IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBzdGF0ZSBoYW5kbGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICogQHBhcmFtIHtBcnJheTxzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0Pn0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhZGFwdFN0YXRlQ29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0U3RhdGVDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUga2V5IHRvIGJlIHVzZWQgZm9yIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdH0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGtleSBmb3Jcblx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIGtleSB0byBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSBjb250cm9scyBzdGF0ZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFN0YXRlS2V5KG9Db250cm9sOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TG9jYWxJZChvQ29udHJvbC5nZXRJZCgpKSB8fCBvQ29udHJvbC5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2aWV3IHN0YXRlIG9mIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaW5pc2hpbmcsIGFsbCBidXQgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgcmVzb2x2ZSB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gQSBwcm9taXNlIHJlc29sdmluZyB0aGUgdmlldyBzdGF0ZVxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI3JldHJpZXZlVmlld1N0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZXRyaWV2ZVZpZXdTdGF0ZSgpIHtcblx0XHQrK3RoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdHJldHVybiB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKGFDb250cm9sczogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChcblx0XHRcdFx0XHRhQ29udHJvbHNcblx0XHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5tYXAoKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMucmV0cmlldmVDb250cm9sU3RhdGUob0NvbnRyb2wpLnRoZW4oKHZSZXN1bHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk6IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHZSZXN1bHRcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKGFSZXNvbHZlZFN0YXRlczogYW55KSB7XG5cdFx0XHRcdHJldHVybiBhUmVzb2x2ZWRTdGF0ZXMucmVkdWNlKGZ1bmN0aW9uIChvU3RhdGVzOiBhbnksIG1TdGF0ZTogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogYW55ID0ge307XG5cdFx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9TdGF0ZXMsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0XHR9LCB7fSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKG9WaWV3U3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKS50aGVuKGZ1bmN0aW9uIChtQWRkaXRpb25hbFN0YXRlczogYW55KSB7XG5cdFx0XHRcdFx0aWYgKG1BZGRpdGlvbmFsU3RhdGVzICYmIE9iamVjdC5rZXlzKG1BZGRpdGlvbmFsU3RhdGVzKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb1ZpZXdTdGF0ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChvVmlld1N0YXRlOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID09PSAwID8gb1ZpZXdTdGF0ZSA6IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4dGVuZCB0aGUgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG1BZGRpdGlvbmFsU3RhdGVzIFRoZSBhZGRpdGlvbmFsIHN0YXRlXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXM6IG9iamVjdCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtvYmplY3QgfCBQcm9taXNlPG9iamVjdD59IEFkZGl0aW9uYWwgdmlldyBzdGF0ZXNcblx0ICovXG5cdF9yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMoKSB7XG5cdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSB7fTtcblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLnJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlcyk7XG5cdFx0cmV0dXJuIG1BZGRpdGlvbmFsU3RhdGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3NhcC51aS5iYXNlLk1hbmFnZWRPYmplY3R9IG9Db250cm9sIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBzdGF0ZSBmb3Jcblx0ICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbDogYW55KSB7XG5cdFx0Y29uc3QgYUNvbnRyb2xTdGF0ZUhhbmRsZXJzID0gdGhpcy5nZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMubWFwKChtQ29udHJvbFN0YXRlSGFuZGxlcjogYW55KSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6IFwiICsgb0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZS5jYWxsKHRoaXMsIG9Db250cm9sKTtcblx0XHRcdH0pXG5cdFx0KS50aGVuKChhU3RhdGVzOiBhbnlbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIGFTdGF0ZXMucmVkdWNlKGZ1bmN0aW9uIChvRmluYWxTdGF0ZTogYW55LCBvQ3VycmVudFN0YXRlOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvRmluYWxTdGF0ZSwgb0N1cnJlbnRTdGF0ZSk7XG5cdFx0XHR9LCB7fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB3aGV0aGVyIHRoZSB2aWV3IHN0YXRlIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgb25jZSBpbml0aWFsbHkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkfS5cblx0ICpcblx0ICogSW1wb3J0YW50OlxuXHQgKiBZb3Ugc2hvdWxkIG9ubHkgb3ZlcnJpZGUgdGhpcyBtZXRob2QgZm9yIGN1c3RvbSBwYWdlcyBhbmQgbm90IGZvciB0aGUgc3RhbmRhcmQgTGlzdFJlcG9ydFBhZ2UgYW5kIE9iamVjdFBhZ2UhXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJZiA8Y29kZT50cnVlPC9jb2RlPiwgb25seSB0aGUgaW5pdGlhbCB2aWV3IHN0YXRlIGlzIGFwcGxpZWQgb25jZSxcblx0ICogZWxzZSBhbnkgbmV3IHZpZXcgc3RhdGUgaXMgYWxzbyBhcHBsaWVkIG9uIGZvbGxvdy11cCBjYWxscyAoZGVmYXVsdClcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseUluaXRpYWxTdGF0ZU9ubHlcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGFwcGx5SW5pdGlhbFN0YXRlT25seSgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSB7c2FwLmZlLm5hdmlnYXRpb24uTmF2VHlwZX0gb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHtvYmplY3R9IG9OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHtib29sZWFufSBvTmF2UGFyYW1ldGVyLnJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IERlZmluZXMgd2hldGhlciBzdGFuZGFyZCB2YXJpYW50IG11c3QgYmUgdXNlZCBpbiBWTVxuXHQgKlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseVZpZXdTdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXBwbHlWaWV3U3RhdGUoXG5cdFx0b1ZpZXdTdGF0ZTogYW55LFxuXHRcdG9OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBhbnk7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0O1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuO1xuXHRcdH1cblx0KTogUHJvbWlzZTxhbnk+IHtcblx0XHRpZiAodGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseUluaXRpYWxTdGF0ZU9ubHkoKSAmJiB0aGlzLl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5vbkJlZm9yZVN0YXRlQXBwbGllZClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChhQ29udHJvbHM6IGFueSkgPT4ge1xuXHRcdFx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0XHRhQ29udHJvbHNcblx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0tleSA9IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpO1xuXHRcdFx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKHRoaXMsIG9Db250cm9sLCBvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtzS2V5XSA6IHVuZGVmaW5lZCwgb05hdlBhcmFtZXRlcilcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUuaUFwcFN0YXRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGVjdFJlc3VsdHMoXG5cdFx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRcdG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW0FERElUSU9OQUxfU1RBVEVTX0tFWV0gOiB1bmRlZmluZWRcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25BZnRlclN0YXRlQXBwbGllZCkudGhlbih0aGlzLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkLmJpbmQodGhpcykpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBhbnksIHNWYXJpYW50SWQ6IGFueSkge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50OiBhbnkpIHtcblx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cdF9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkge1xuXHRcdHJldHVybiAhdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3QgYmVmb3JlIGEgc3RhdGUgZm9yIGdpdmVuIHZpZXcgaXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtQcm9taXNlfSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uQmVmb3JlU3RhdGVBcHBsaWVkXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8YW55Pikge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3Qgd2hlbiBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyB3YXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtQcm9taXNlfSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uQWZ0ZXJTdGF0ZUFwcGxpZWRcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQWZ0ZXJTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPGFueT4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyBhZGRpdGlvbmFsLCBub3QgY29udHJvbCByZWxhdGVkLCBzdGF0ZXMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1ZpZXdTdGF0ZSBUaGUgY3VycmVudCB2aWV3IHN0YXRlXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseUFkZGl0aW9uYWxTdGF0ZXNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlcyhvVmlld1N0YXRlOiBvYmplY3QsIGFQcm9taXNlczogUHJvbWlzZTxhbnk+KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgbm90IGlBcHBTdGF0ZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIHtzYXAuZmUubmF2aWdhdGlvbi5OYXZUeXBlfSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50XSBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHNdIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIHtib29sZWFufSBbb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudF0gRGVmaW5lcyB3aGV0aGVyIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIFZNXG5cdCAqIEBwYXJhbSB7UHJvbWlzZX0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0b05hdlBhcmFtZXRlcjoge1xuXHRcdFx0bmF2aWdhdGlvblR5cGU6IGFueTtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPGFueT5cblx0KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyB0aGUgZ2l2ZW4gc3RhdGUgdG8gdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdH0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZ2l2ZW4gc3RhdGVcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sU3RhdGUgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKiBAcGFyYW0ge29iamVjdH0gW29OYXZQYXJhbWV0ZXJzXSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHJldHVybnMge2FueX0gUmV0dXJuIGEgcHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXBwbHlDb250cm9sU3RhdGUob0NvbnRyb2w6IGFueSwgb0NvbnRyb2xTdGF0ZTogb2JqZWN0LCBvTmF2UGFyYW1ldGVycz86IG9iamVjdCkge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMuZm9yRWFjaCgobUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueSkgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6IFwiICsgb0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseS5iaW5kKHRoaXMsIG9Db250cm9sLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycykpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cdGdldEludGVyZmFjZSgpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGU7XG4iXX0=
|
|
790
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJuYW1lcyI6WyJBRERJVElPTkFMX1NUQVRFU19LRVkiLCJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsIm9Db250cm9sU3RhdGUiLCJ2YXJpYW50SWQiLCJ1bmRlZmluZWQiLCJzVmFyaWFudFJlZmVyZW5jZSIsIl9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUiLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJvVGFiQmFyIiwic2VsZWN0ZWRLZXkiLCJnZXRTZWxlY3RlZEtleSIsIm9TZWxlY3RlZEl0ZW0iLCJnZXRJdGVtcyIsImZpbmQiLCJvSXRlbSIsImdldEtleSIsInNldFNlbGVjdGVkSXRlbSIsIm9GaWx0ZXJCYXIiLCJTdGF0ZVV0aWwiLCJyZXRyaWV2ZUV4dGVybmFsU3RhdGUiLCJ0aGVuIiwibUZpbHRlckJhclN0YXRlIiwiYVByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwibUZpbHRlciIsImZpbHRlciIsIm9Qcm9wZXJ0eUluZm8iLCJwYXRoIiwicmVtb3ZlRnJvbUFwcFN0YXRlIiwibGVuZ3RoIiwiZm9yRWFjaCIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsIm9UYWJsZSIsInN1cHBsZW1lbnRhcnlDb25maWciLCJyZWZyZXNoQmluZGluZyIsIm9UYWJsZUJpbmRpbmciLCJnZXRSb3dCaW5kaW5nIiwib1Jvb3RCaW5kaW5nIiwiZ2V0Um9vdEJpbmRpbmciLCJyZWZyZXNoIiwib0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0Iiwic0dyb3VwSWQiLCJnZXRHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJvQ2hhcnQiLCJvT1BMYXlvdXQiLCJzZWxlY3RlZFNlY3Rpb24iLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic1N0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib05hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCIka2luZCIsImFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0IiwiT2JqZWN0Iiwia2V5cyIsInJlZHVjZSIsImFQcmV2Iiwic05hdlByb3AiLCIkaXNDb2xsZWN0aW9uIiwicHVzaCIsImFQcm9wZXJ0aWVzIiwiJFByb3BlcnR5UGF0aCIsImNvbmNhdCIsIm9RdWlja0ZpbHRlciIsImdldFNlbGVjdG9yS2V5Iiwic2V0U2VsZWN0b3JLZXkiLCJvU2VnbWVudGVkQnV0dG9uIiwic2V0U2VsZWN0ZWRLZXkiLCJvU2VsZWN0Iiwib0R5bmFtaWNQYWdlIiwiaGVhZGVyRXhwYW5kZWQiLCJnZXRIZWFkZXJFeHBhbmRlZCIsInNldEhlYWRlckV4cGFuZGVkIiwib1ZpZXciLCJvQ29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJyZXRyaWV2ZVZpZXdTdGF0ZSIsIm9OYXZQYXJhbWV0ZXJzIiwiYXBwbHlWaWV3U3RhdGUiLCJyZWZyZXNoVmlld0JpbmRpbmdzIiwib0NvbXBvbmVudENvbnRhaW5lciIsIm9Db21wb25lbnQiLCJnZXRDb21wb25lbnRJbnN0YW5jZSIsInJldHJpZXZlQ29udHJvbFN0YXRlIiwiZ2V0Um9vdENvbnRyb2wiLCJhcHBseUNvbnRyb2xTdGF0ZSIsIlZpZXdTdGF0ZSIsImRlZmluZVVJNUNsYXNzIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsInByaXZhdGVFeHRlbnNpb24iLCJJbnN0ZWFkIiwiX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyIiwiX3BJbml0aWFsU3RhdGVBcHBsaWVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwiaXNBIiwicmVmcmVzaENvbnRyb2xCaW5kaW5nIiwiYmluZCIsImFDb2xsZWN0ZWRDb250cm9scyIsIm9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsIm9SZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJzVHlwZSIsImFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyIiwib0NvbnRyb2xIYW5kbGVyIiwib25TdXNwZW5kIiwib25SZXN0b3JlIiwiZGVzdHJveSIsImZuQ2FsbCIsImFSZXN1bHRzIiwiYXJncyIsImFsbCIsImFkYXB0Q29udHJvbFN0YXRlSGFuZGxlciIsImFDb250cm9sSGFuZGxlciIsImdldENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyIiwiYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhc3NpZ24iLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJnZXRTdGF0ZUtleSIsImdldFZpZXciLCJnZXRMb2NhbElkIiwibWFwIiwidlJlc3VsdCIsImtleSIsInZhbHVlIiwiYVJlc29sdmVkU3RhdGVzIiwib1N0YXRlcyIsIm1TdGF0ZSIsIm9DdXJyZW50U3RhdGUiLCJtZXJnZU9iamVjdHMiLCJvVmlld1N0YXRlIiwiX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsIm1BZGRpdGlvbmFsU3RhdGVzIiwiZmluYWxseSIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFDb250cm9sU3RhdGVIYW5kbGVycyIsIm1Db250cm9sU3RhdGVIYW5kbGVyIiwiRXJyb3IiLCJjYWxsIiwiYVN0YXRlcyIsIm9GaW5hbFN0YXRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5Iiwib05hdlBhcmFtZXRlciIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwib25CZWZvcmVTdGF0ZUFwcGxpZWQiLCJzS2V5IiwibmF2aWdhdGlvblR5cGUiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiY2F0Y2giLCJlIiwiZXJyb3IiLCJzVmFyaWFudElkIiwiYVZhcmlhbnRzIiwiZ2V0VmFyaWFudHMiLCJiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlIiwib1ZhcmlhbnQiLCJwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUiLCJhUHJvbWlzZXMiLCJnZXRJbnRlcmZhY2UiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxxQkFBcUIsR0FBRyxtQkFBOUI7QUFBQSxNQUNDQyxPQUFPLEdBQUdDLFVBQVUsQ0FBQ0QsT0FEdEIsQyxDQUVBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNRSx3QkFBNkMsR0FBRztBQUNyRCw0Q0FBd0M7QUFDdkNDLE1BQUFBLFFBQVEsRUFBRSxVQUFVQyxHQUFWLEVBQW9CO0FBQzdCLGVBQU87QUFDTix1QkFBYUEsR0FBRyxDQUFDQyxvQkFBSjtBQURQLFNBQVA7QUFHQSxPQUxzQztBQU12Q0MsTUFBQUEsS0FBSyxFQUFFLFVBQVVGLEdBQVYsRUFBb0JHLGFBQXBCLEVBQXdDO0FBQzlDLFlBQUlBLGFBQWEsSUFBSUEsYUFBYSxDQUFDQyxTQUFkLEtBQTRCQyxTQUE3QyxJQUEwREYsYUFBYSxDQUFDQyxTQUFkLEtBQTRCSixHQUFHLENBQUNDLG9CQUFKLEVBQTFGLEVBQXNIO0FBQ3JILGNBQU1LLGlCQUFpQixHQUFHLEtBQUtDLDRCQUFMLENBQWtDUCxHQUFsQyxFQUF1Q0csYUFBYSxDQUFDQyxTQUFyRCxJQUN2QkQsYUFBYSxDQUFDQyxTQURTLEdBRXZCSixHQUFHLENBQUNRLHFCQUFKLEVBRkg7QUFHQSxpQkFBT0Msc0JBQXNCLENBQUNDLGVBQXZCLENBQXVDO0FBQzdDQyxZQUFBQSxPQUFPLEVBQUVYLEdBRG9DO0FBRTdDWSxZQUFBQSxnQkFBZ0IsRUFBRU47QUFGMkIsV0FBdkMsQ0FBUDtBQUlBO0FBQ0Q7QUFoQnNDLEtBRGE7QUFtQnJELHdCQUFvQjtBQUNuQlAsTUFBQUEsUUFBUSxFQUFFLFVBQVVjLE9BQVYsRUFBd0I7QUFDakMsZUFBTztBQUNOQyxVQUFBQSxXQUFXLEVBQUVELE9BQU8sQ0FBQ0UsY0FBUjtBQURQLFNBQVA7QUFHQSxPQUxrQjtBQU1uQmIsTUFBQUEsS0FBSyxFQUFFLFVBQVVXLE9BQVYsRUFBd0JWLGFBQXhCLEVBQTRDO0FBQ2xELFlBQUlBLGFBQWEsSUFBSUEsYUFBYSxDQUFDVyxXQUFuQyxFQUFnRDtBQUMvQyxjQUFNRSxhQUFhLEdBQUdILE9BQU8sQ0FBQ0ksUUFBUixHQUFtQkMsSUFBbkIsQ0FBd0IsVUFBVUMsS0FBVixFQUFzQjtBQUNuRSxtQkFBT0EsS0FBSyxDQUFDQyxNQUFOLE9BQW1CakIsYUFBYSxDQUFDVyxXQUF4QztBQUNBLFdBRnFCLENBQXRCOztBQUdBLGNBQUlFLGFBQUosRUFBbUI7QUFDbEJILFlBQUFBLE9BQU8sQ0FBQ1EsZUFBUixDQUF3QkwsYUFBeEI7QUFDQTtBQUNEO0FBQ0Q7QUFma0IsS0FuQmlDO0FBb0NyRCw0QkFBd0I7QUFDdkJqQixNQUFBQSxRQUFRLEVBQUUsVUFBVXVCLFVBQVYsRUFBMkI7QUFDcEMsZUFBT0MsU0FBUyxDQUFDQyxxQkFBVixDQUFnQ0YsVUFBaEMsRUFBNENHLElBQTVDLENBQWlELFVBQVVDLGVBQVYsRUFBZ0M7QUFDdkY7QUFDQSxjQUFNQyxlQUFlLEdBQUdMLFVBQVUsQ0FBQ00sa0JBQVgsRUFBeEI7QUFBQSxjQUNDQyxPQUFPLEdBQUdILGVBQWUsQ0FBQ0ksTUFBaEIsSUFBMEIsRUFEckM7QUFFQUgsVUFBQUEsZUFBZSxDQUNiRyxNQURGLENBQ1MsVUFBVUMsYUFBVixFQUE4QjtBQUNyQyxtQkFDQ0YsT0FBTyxDQUFDRSxhQUFhLENBQUNDLElBQWYsQ0FBUCxLQUFnQ0QsYUFBYSxDQUFDRSxrQkFBZCxJQUFvQ0osT0FBTyxDQUFDRSxhQUFhLENBQUNDLElBQWYsQ0FBUCxDQUE0QkUsTUFBNUIsS0FBdUMsQ0FBM0csQ0FERDtBQUdBLFdBTEYsRUFNRUMsT0FORixDQU1VLFVBQVVKLGFBQVYsRUFBOEI7QUFDdEMsbUJBQU9GLE9BQU8sQ0FBQ0UsYUFBYSxDQUFDQyxJQUFmLENBQWQ7QUFDQSxXQVJGO0FBU0EsaUJBQU9OLGVBQVA7QUFDQSxTQWRNLENBQVA7QUFlQSxPQWpCc0I7QUFrQnZCeEIsTUFBQUEsS0FBSyxFQUFFLFVBQVVvQixVQUFWLEVBQTJCbkIsYUFBM0IsRUFBK0M7QUFDckQsWUFBSUEsYUFBSixFQUFtQjtBQUNsQixpQkFBT29CLFNBQVMsQ0FBQ2Esa0JBQVYsQ0FBNkJkLFVBQTdCLEVBQXlDbkIsYUFBekMsQ0FBUDtBQUNBO0FBQ0Q7QUF0QnNCLEtBcEM2QjtBQTREckQsd0JBQW9CO0FBQ25CSixNQUFBQSxRQUFRLEVBQUUsVUFBVXNDLE1BQVYsRUFBdUI7QUFDaEMsZUFBT2QsU0FBUyxDQUFDQyxxQkFBVixDQUFnQ2EsTUFBaEMsQ0FBUDtBQUNBLE9BSGtCO0FBSW5CbkMsTUFBQUEsS0FBSyxFQUFFLFVBQVVtQyxNQUFWLEVBQXVCbEMsYUFBdkIsRUFBMkM7QUFDakQsWUFBSUEsYUFBSixFQUFtQjtBQUNsQixjQUFJLENBQUNBLGFBQWEsQ0FBQ21DLG1CQUFuQixFQUF3QztBQUN2Q25DLFlBQUFBLGFBQWEsQ0FBQ21DLG1CQUFkLEdBQW9DLEVBQXBDO0FBQ0E7O0FBQ0QsaUJBQU9mLFNBQVMsQ0FBQ2Esa0JBQVYsQ0FBNkJDLE1BQTdCLEVBQXFDbEMsYUFBckMsQ0FBUDtBQUNBO0FBQ0QsT0FYa0I7QUFZbkJvQyxNQUFBQSxjQUFjLEVBQUUsVUFBVUYsTUFBVixFQUF1QjtBQUN0QyxZQUFNRyxhQUFhLEdBQUdILE1BQU0sQ0FBQ0ksYUFBUCxFQUF0Qjs7QUFDQSxZQUFJRCxhQUFKLEVBQW1CO0FBQ2xCLGNBQU1FLFlBQVksR0FBR0YsYUFBYSxDQUFDRyxjQUFkLEVBQXJCOztBQUNBLGNBQUlELFlBQVksS0FBS0YsYUFBckIsRUFBb0M7QUFDbkM7QUFDQUEsWUFBQUEsYUFBYSxDQUFDSSxPQUFkO0FBQ0EsV0FIRCxNQUdPO0FBQ047QUFDQSxnQkFBTUMsY0FBYyxHQUFHTCxhQUFhLENBQUNNLGdCQUFkLEVBQXZCO0FBQ0EsZ0JBQU1DLFFBQVEsR0FBR1AsYUFBYSxDQUFDUSxVQUFkLEVBQWpCOztBQUVBLGdCQUFJSCxjQUFKLEVBQW9CO0FBQ25CQSxjQUFBQSxjQUFjLENBQUNJLGtCQUFmLENBQWtDLENBQUM7QUFBRUMsZ0JBQUFBLHVCQUF1QixFQUFFO0FBQTNCLGVBQUQsQ0FBbEMsRUFBcUVILFFBQXJFO0FBQ0E7QUFDRDtBQUNELFNBZEQsTUFjTztBQUNOSSxVQUFBQSxHQUFHLENBQUNDLElBQUosa0JBQW1CZixNQUFNLENBQUNnQixLQUFQLEVBQW5CO0FBQ0E7QUFDRDtBQS9Ca0IsS0E1RGlDO0FBNkZyRCx3QkFBb0I7QUFDbkJ0RCxNQUFBQSxRQUFRLEVBQUUsVUFBVXVELE1BQVYsRUFBdUI7QUFDaEMsZUFBTy9CLFNBQVMsQ0FBQ0MscUJBQVYsQ0FBZ0M4QixNQUFoQyxDQUFQO0FBQ0EsT0FIa0I7QUFJbkJwRCxNQUFBQSxLQUFLLEVBQUUsVUFBVW9ELE1BQVYsRUFBdUJuRCxhQUF2QixFQUEyQztBQUNqRCxZQUFJQSxhQUFKLEVBQW1CO0FBQ2xCLGlCQUFPb0IsU0FBUyxDQUFDYSxrQkFBVixDQUE2QmtCLE1BQTdCLEVBQXFDbkQsYUFBckMsQ0FBUDtBQUNBO0FBQ0Q7QUFSa0IsS0E3RmlDO0FBdUdyRCxpQ0FBNkI7QUFDNUJKLE1BQUFBLFFBQVEsRUFBRSxVQUFVd0QsU0FBVixFQUEwQjtBQUNuQyxlQUFPO0FBQ05DLFVBQUFBLGVBQWUsRUFBRUQsU0FBUyxDQUFDRSxrQkFBVjtBQURYLFNBQVA7QUFHQSxPQUwyQjtBQU01QnZELE1BQUFBLEtBQUssRUFBRSxVQUFVcUQsU0FBVixFQUEwQnBELGFBQTFCLEVBQThDO0FBQ3BELFlBQUlBLGFBQUosRUFBbUI7QUFDbEJvRCxVQUFBQSxTQUFTLENBQUNHLGtCQUFWLENBQTZCdkQsYUFBYSxDQUFDcUQsZUFBM0M7QUFDQTtBQUNELE9BVjJCO0FBVzVCakIsTUFBQUEsY0FBYyxFQUFFLFVBQVVnQixTQUFWLEVBQTBCO0FBQ3pDLFlBQU1JLGVBQWUsR0FBR0osU0FBUyxDQUFDSyxpQkFBVixFQUF4QjtBQUNBLFlBQU1DLFFBQVEsR0FBR0YsZUFBZSxJQUFJQSxlQUFlLENBQUNHLFVBQWhCLEVBQXBDOztBQUNBLFlBQUlELFFBQUosRUFBYztBQUNiLGNBQU1FLFNBQVMsR0FBR0MsV0FBVyxDQUFDQyxxQkFBWixDQUFrQ04sZUFBbEMsQ0FBbEI7QUFDQSxjQUFNTyxTQUFTLEdBQUdDLGVBQWUsQ0FBQ0MsdUNBQWhCLENBQXdEYixTQUF4RCxFQUFtRVEsU0FBbkUsQ0FBbEI7O0FBQ0EsY0FBSUcsU0FBUyxLQUFLLE1BQWxCLEVBQTBCO0FBQ3pCO0FBQ0EsZ0JBQU1HLE1BQU0sR0FBR1YsZUFBZSxDQUFDVyxRQUFoQixFQUFmO0FBQUEsZ0JBQ0NDLFVBQVUsR0FBR0YsTUFBTSxDQUFDRyxZQUFQLEVBRGQ7QUFBQSxnQkFFQ0MscUJBQXFCLEdBQ3BCQyxXQUFXLENBQUNDLHdCQUFaLENBQXFDSixVQUFyQyxFQUFpRFIsU0FBakQsRUFBNEQ7QUFDM0RhLGNBQUFBLEtBQUssRUFBRTtBQURvRCxhQUE1RCxLQUVNLEVBTFI7QUFBQSxnQkFNQ0MsdUJBQXVCLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZTixxQkFBWixFQUFtQ08sTUFBbkMsQ0FBMEMsVUFBVUMsS0FBVixFQUF3QkMsUUFBeEIsRUFBMEM7QUFDN0csa0JBQUlULHFCQUFxQixDQUFDUyxRQUFELENBQXJCLENBQWdDQyxhQUFoQyxLQUFrRCxJQUF0RCxFQUE0RDtBQUMzREYsZ0JBQUFBLEtBQUssQ0FBQ0csSUFBTixDQUFXO0FBQUVsQyxrQkFBQUEsdUJBQXVCLEVBQUVnQztBQUEzQixpQkFBWDtBQUNBOztBQUNELHFCQUFPRCxLQUFQO0FBQ0EsYUFMeUIsRUFLdkIsRUFMdUIsQ0FOM0I7QUFBQSxnQkFZQ0ksV0FBVyxHQUFHLENBQUM7QUFBRUMsY0FBQUEsYUFBYSxFQUFFO0FBQWpCLGFBQUQsQ0FaZjtBQUFBLGdCQWFDdkMsUUFBUSxHQUFHYyxRQUFRLENBQUNiLFVBQVQsRUFiWjtBQWVBVyxZQUFBQSxlQUFlLENBQUNWLGtCQUFoQixDQUFtQ29DLFdBQVcsQ0FBQ0UsTUFBWixDQUFtQlYsdUJBQW5CLENBQW5DLEVBQWdGOUIsUUFBaEY7QUFDQSxXQWxCRCxNQWtCTyxJQUFJbUIsU0FBUyxLQUFLLHFCQUFsQixFQUF5QztBQUMvQztBQUNBTCxZQUFBQSxRQUFRLENBQUNqQixPQUFUO0FBQ0E7QUFDRCxTQXpCRCxNQXlCTztBQUNOTyxVQUFBQSxHQUFHLENBQUNDLElBQUosdUJBQXdCRyxTQUFTLENBQUNGLEtBQVYsRUFBeEI7QUFDQTtBQUNEO0FBMUMyQixLQXZHd0I7QUFtSnJELGdEQUE0QztBQUMzQ3RELE1BQUFBLFFBQVEsRUFBRSxVQUFVeUYsWUFBVixFQUE2QjtBQUN0QyxlQUFPO0FBQ04xRSxVQUFBQSxXQUFXLEVBQUUwRSxZQUFZLENBQUNDLGNBQWI7QUFEUCxTQUFQO0FBR0EsT0FMMEM7QUFNM0N2RixNQUFBQSxLQUFLLEVBQUUsVUFBVXNGLFlBQVYsRUFBNkJyRixhQUE3QixFQUFpRDtBQUN2RCxZQUFJQSxhQUFKLEVBQW1CO0FBQ2xCcUYsVUFBQUEsWUFBWSxDQUFDRSxjQUFiLENBQTRCdkYsYUFBYSxDQUFDVyxXQUExQztBQUNBO0FBQ0Q7QUFWMEMsS0FuSlM7QUErSnJELDZCQUF5QjtBQUN4QmYsTUFBQUEsUUFBUSxFQUFFLFVBQVU0RixnQkFBVixFQUFpQztBQUMxQyxlQUFPO0FBQ043RSxVQUFBQSxXQUFXLEVBQUU2RSxnQkFBZ0IsQ0FBQzVFLGNBQWpCO0FBRFAsU0FBUDtBQUdBLE9BTHVCO0FBTXhCYixNQUFBQSxLQUFLLEVBQUUsVUFBVXlGLGdCQUFWLEVBQWlDeEYsYUFBakMsRUFBcUQ7QUFDM0QsWUFBSUEsYUFBSixFQUFtQjtBQUNsQndGLFVBQUFBLGdCQUFnQixDQUFDQyxjQUFqQixDQUFnQ3pGLGFBQWEsQ0FBQ1csV0FBOUM7QUFDQTtBQUNEO0FBVnVCLEtBL0o0QjtBQTJLckQsb0JBQWdCO0FBQ2ZmLE1BQUFBLFFBQVEsRUFBRSxVQUFVOEYsT0FBVixFQUF3QjtBQUNqQyxlQUFPO0FBQ04vRSxVQUFBQSxXQUFXLEVBQUUrRSxPQUFPLENBQUM5RSxjQUFSO0FBRFAsU0FBUDtBQUdBLE9BTGM7QUFNZmIsTUFBQUEsS0FBSyxFQUFFLFVBQVUyRixPQUFWLEVBQXdCMUYsYUFBeEIsRUFBNEM7QUFDbEQsWUFBSUEsYUFBSixFQUFtQjtBQUNsQjBGLFVBQUFBLE9BQU8sQ0FBQ0QsY0FBUixDQUF1QnpGLGFBQWEsQ0FBQ1csV0FBckM7QUFDQTtBQUNEO0FBVmMsS0EzS3FDO0FBdUxyRCx5QkFBcUI7QUFDcEJmLE1BQUFBLFFBQVEsRUFBRSxVQUFVK0YsWUFBVixFQUE2QjtBQUN0QyxlQUFPO0FBQ05DLFVBQUFBLGNBQWMsRUFBRUQsWUFBWSxDQUFDRSxpQkFBYjtBQURWLFNBQVA7QUFHQSxPQUxtQjtBQU1wQjlGLE1BQUFBLEtBQUssRUFBRSxVQUFVNEYsWUFBVixFQUE2QjNGLGFBQTdCLEVBQWlEO0FBQ3ZELFlBQUlBLGFBQUosRUFBbUI7QUFDbEIyRixVQUFBQSxZQUFZLENBQUNHLGlCQUFiLENBQStCOUYsYUFBYSxDQUFDNEYsY0FBN0M7QUFDQTtBQUNEO0FBVm1CLEtBdkxnQztBQW1NckQsNEJBQXdCO0FBQ3ZCaEcsTUFBQUEsUUFBUSxFQUFFLFVBQVVtRyxLQUFWLEVBQXNCO0FBQy9CLFlBQU1DLFdBQVcsR0FBR0QsS0FBSyxDQUFDRSxhQUFOLEVBQXBCOztBQUNBLFlBQUlELFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxTQUEvQixFQUEwQztBQUN6QyxpQkFBT0YsV0FBVyxDQUFDRSxTQUFaLENBQXNCQyxpQkFBdEIsQ0FBd0NILFdBQVcsQ0FBQ0UsU0FBcEQsQ0FBUDtBQUNBOztBQUNELGVBQU8sRUFBUDtBQUNBLE9BUHNCO0FBUXZCbkcsTUFBQUEsS0FBSyxFQUFFLFVBQVVnRyxLQUFWLEVBQXNCL0YsYUFBdEIsRUFBMENvRyxjQUExQyxFQUErRDtBQUNyRSxZQUFNSixXQUFXLEdBQUdELEtBQUssQ0FBQ0UsYUFBTixFQUFwQjs7QUFDQSxZQUFJRCxXQUFXLElBQUlBLFdBQVcsQ0FBQ0UsU0FBL0IsRUFBMEM7QUFDekMsaUJBQU9GLFdBQVcsQ0FBQ0UsU0FBWixDQUFzQkcsY0FBdEIsQ0FBcUNyRyxhQUFyQyxFQUFvRG9HLGNBQXBELENBQVA7QUFDQTtBQUNELE9BYnNCO0FBY3ZCaEUsTUFBQUEsY0FBYyxFQUFFLFVBQVUyRCxLQUFWLEVBQXNCO0FBQ3JDLFlBQU1DLFdBQVcsR0FBR0QsS0FBSyxDQUFDRSxhQUFOLEVBQXBCOztBQUNBLFlBQUlELFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxTQUEvQixFQUEwQztBQUN6QyxpQkFBT0YsV0FBVyxDQUFDRSxTQUFaLENBQXNCSSxtQkFBdEIsRUFBUDtBQUNBO0FBQ0Q7QUFuQnNCLEtBbk02QjtBQXdOckQsc0NBQWtDO0FBQ2pDMUcsTUFBQUEsUUFBUSxFQUFFLFVBQVUyRyxtQkFBVixFQUFvQztBQUM3QyxZQUFNQyxVQUFVLEdBQUdELG1CQUFtQixDQUFDRSxvQkFBcEIsRUFBbkI7O0FBQ0EsWUFBSUQsVUFBSixFQUFnQjtBQUNmLGlCQUFPLEtBQUtFLG9CQUFMLENBQTBCRixVQUFVLENBQUNHLGNBQVgsRUFBMUIsQ0FBUDtBQUNBOztBQUNELGVBQU8sRUFBUDtBQUNBLE9BUGdDO0FBUWpDNUcsTUFBQUEsS0FBSyxFQUFFLFVBQVV3RyxtQkFBVixFQUFvQ3ZHLGFBQXBDLEVBQXdEb0csY0FBeEQsRUFBNkU7QUFDbkYsWUFBTUksVUFBVSxHQUFHRCxtQkFBbUIsQ0FBQ0Usb0JBQXBCLEVBQW5COztBQUNBLFlBQUlELFVBQUosRUFBZ0I7QUFDZixpQkFBTyxLQUFLSSxpQkFBTCxDQUF1QkosVUFBVSxDQUFDRyxjQUFYLEVBQXZCLEVBQW9EM0csYUFBcEQsRUFBbUVvRyxjQUFuRSxDQUFQO0FBQ0E7QUFDRDtBQWJnQztBQXhObUIsR0FBdEQ7QUF3T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztNQUVNUyxTLFdBRExDLGNBQWMsQ0FBQyw0Q0FBRCxDLFVBa0JiQyxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBd0JkRCxlQUFlLEUsVUFDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxVQU1WQyxnQkFBZ0IsRSxVQUNoQkosY0FBYyxFLFVBbUJkSSxnQkFBZ0IsRSxVQUNoQkosY0FBYyxFLFdBNEJkRCxlQUFlLEUsV0FDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxXQVlWSixlQUFlLEUsV0FDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxXQVdWSixlQUFlLEUsV0FDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxXQXFCVkMsZ0JBQWdCLEUsV0FDaEJKLGNBQWMsRSxXQW1CZEQsZUFBZSxFLFdBQ2ZFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsV0FZVkMsZ0JBQWdCLEUsV0FDaEJKLGNBQWMsRSxXQTJCZEQsZUFBZSxFLFdBQ2ZFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsV0FZVkosZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWFkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBd0RkRCxlQUFlLEUsV0FDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxXQXVCVkMsZ0JBQWdCLEUsV0FDaEJKLGNBQWMsRSxXQStCZEQsZUFBZSxFLFdBQ2ZFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNHLE9BQW5CLEMsV0FpQlZOLGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FrRGRJLGdCQUFnQixFLFdBaUNoQkwsZUFBZSxFLFdBQ2ZFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsV0FnQlZKLGVBQWUsRSxXQUNmRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFuQixDLFdBaUJWSixlQUFlLEUsV0FDZkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBbkIsQyxXQXFCVkosZUFBZSxFLFdBQ2ZFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQW5CLEMsV0F1QlZDLGdCQUFnQixFLFdBQ2hCSixjQUFjLEU7OztBQTVnQmY7QUFDRDtBQUNBO0FBQ0MseUJBQWM7QUFBQTs7QUFDYjtBQUNBLFlBQUtNLHdCQUFMLEdBQWdDLENBQWhDO0FBQ0EsWUFBS0MscUJBQUwsR0FBNkIsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBYTtBQUNyRCxjQUFLQyw0QkFBTCxHQUFvQ0QsT0FBcEM7QUFDQSxPQUY0QixDQUE3QjtBQUhhO0FBTWI7Ozs7V0FJRG5CLG1CLEdBRkEsK0JBRXNCO0FBQUE7O0FBQ3JCLGFBQU8sS0FBS3FCLGNBQUwsQ0FBb0IsS0FBS0MsSUFBTCxDQUFVMUIsU0FBVixDQUFvQjJCLDJCQUF4QyxFQUFxRXZHLElBQXJFLENBQTBFLFVBQUN3RyxTQUFELEVBQW9CO0FBQ3BHLFlBQUlDLGFBQWEsR0FBR1AsT0FBTyxDQUFDQyxPQUFSLEVBQXBCO0FBQ0FLLFFBQUFBLFNBQVMsQ0FDUG5HLE1BREYsQ0FDUyxVQUFDcUcsUUFBRCxFQUFtQjtBQUMxQixpQkFBT0EsUUFBUSxJQUFJQSxRQUFRLENBQUNDLEdBQXJCLElBQTRCRCxRQUFRLENBQUNDLEdBQVQsQ0FBYSwyQkFBYixDQUFuQztBQUNBLFNBSEYsRUFJRWpHLE9BSkYsQ0FJVSxVQUFDZ0csUUFBRCxFQUFtQjtBQUMzQkQsVUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUN6RyxJQUFkLENBQW1CLE1BQUksQ0FBQzRHLHFCQUFMLENBQTJCQyxJQUEzQixDQUFnQyxNQUFoQyxFQUFzQ0gsUUFBdEMsQ0FBbkIsQ0FBaEI7QUFDQSxTQU5GO0FBT0EsZUFBT0QsYUFBUDtBQUNBLE9BVk0sQ0FBUDtBQVdBO0FBQ0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztZQUdDO0FBQ0FGLElBQUFBLDJCLEdBSEEscUNBRzRCTyxrQkFINUIsRUFHaUUsQ0FDaEU7QUFDQSxLOztXQUlERixxQixHQUZBLCtCQUVzQkYsUUFGdEIsRUFFcUM7QUFDcEMsVUFBTUssNkJBQTZCLEdBQUcsS0FBS0MsK0JBQUwsQ0FBcUNOLFFBQXJDLENBQXRDO0FBQ0EsVUFBSUQsYUFBYSxHQUFHUCxPQUFPLENBQUNDLE9BQVIsRUFBcEI7O0FBQ0EsVUFBSSxPQUFPWSw2QkFBNkIsQ0FBQ2pHLGNBQXJDLEtBQXdELFVBQTVELEVBQXdFO0FBQ3ZFWSxRQUFBQSxHQUFHLENBQUNDLElBQUosK0NBQWdEK0UsUUFBUSxDQUFDTyxXQUFULEdBQXVCQyxPQUF2QixFQUFoRDtBQUNBLE9BRkQsTUFFTztBQUNOVCxRQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ3pHLElBQWQsQ0FBbUIrRyw2QkFBNkIsQ0FBQ2pHLGNBQTlCLENBQTZDK0YsSUFBN0MsQ0FBa0QsSUFBbEQsRUFBd0RILFFBQXhELENBQW5CLENBQWhCO0FBQ0E7O0FBQ0QsYUFBT0QsYUFBUDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FJQ08sK0IsR0FGQSx5Q0FFZ0NOLFFBRmhDLEVBRW9EO0FBQ25ELFVBQU1TLHNCQUEyQixHQUFHLEVBQXBDOztBQUNBLFVBQUlULFFBQUosRUFBYztBQUNiLGFBQUssSUFBTVUsS0FBWCxJQUFvQi9JLHdCQUFwQixFQUE4QztBQUM3QyxjQUFJcUksUUFBUSxDQUFDQyxHQUFULENBQWFTLEtBQWIsQ0FBSixFQUF5QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQUQsWUFBQUEsc0JBQXNCLENBQUMsZ0JBQUQsQ0FBdEIsR0FBMkM5SSx3QkFBd0IsQ0FBQytJLEtBQUQsQ0FBeEIsQ0FBZ0N0RyxjQUFoQyxJQUFrRCxFQUE3RjtBQUNBO0FBQ0E7QUFDRDtBQUNEOztBQUNELFdBQUt3RixJQUFMLENBQVUxQixTQUFWLENBQW9CeUMsMEJBQXBCLENBQStDWCxRQUEvQyxFQUF5RFMsc0JBQXpEO0FBQ0EsYUFBT0Esc0JBQVA7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztZQUdDO0FBQ0FFLElBQUFBLDBCLEdBSEEsb0NBRzJCWCxRQUgzQixFQUdvRFksZUFIcEQsRUFHNEUsQ0FDM0U7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBR0NDLFMsR0FGQSxxQkFFWSxDQUNYO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUdDQyxTLEdBRkEscUJBRVksQ0FDWDtBQUNBO0FBRUQ7QUFDRDtBQUNBOzs7V0FDQ0MsTyxHQUFBLG1CQUFVO0FBQ1QsYUFBTyxLQUFLckIsNEJBQVo7O0FBQ0EscUNBQU1xQixPQUFOO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FHQ3BCLGMsR0FGQSx3QkFFZXFCLE1BRmYsRUFFaUQ7QUFDaEQsVUFBTUMsUUFBZSxHQUFHLEVBQXhCOztBQURnRCx3Q0FBYkMsSUFBYTtBQUFiQSxRQUFBQSxJQUFhO0FBQUE7O0FBRWhEQSxNQUFBQSxJQUFJLENBQUNqRSxJQUFMLENBQVVnRSxRQUFWO0FBQ0FELE1BQUFBLE1BQU0sQ0FBQ2pKLEtBQVAsQ0FBYSxJQUFiLEVBQW1CbUosSUFBbkI7QUFDQSxhQUFPMUIsT0FBTyxDQUFDMkIsR0FBUixDQUFZRixRQUFaLENBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztZQUdDO0FBQ0FHLElBQUFBLHdCLEdBSEEsa0NBR3lCcEIsUUFIekIsRUFHa0RxQixlQUhsRCxFQUc2RSxDQUM1RTtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FHQ0Msc0IsR0FGQSxnQ0FFdUJ0QixRQUZ2QixFQUVzQztBQUNyQyxVQUFNdUIsNEJBQTRCLEdBQUcsRUFBckM7QUFBQSxVQUNDQywwQkFBaUMsR0FBRyxFQURyQzs7QUFFQSxVQUFJeEIsUUFBSixFQUFjO0FBQ2IsYUFBSyxJQUFNVSxLQUFYLElBQW9CL0ksd0JBQXBCLEVBQThDO0FBQzdDLGNBQUlxSSxRQUFRLENBQUNDLEdBQVQsQ0FBYVMsS0FBYixDQUFKLEVBQXlCO0FBQ3hCO0FBQ0FhLFlBQUFBLDRCQUE0QixDQUFDdEUsSUFBN0IsQ0FBa0NOLE1BQU0sQ0FBQzhFLE1BQVAsQ0FBYyxFQUFkLEVBQWtCOUosd0JBQXdCLENBQUMrSSxLQUFELENBQTFDLENBQWxDO0FBQ0E7QUFDQTtBQUNEO0FBQ0Q7O0FBQ0QsV0FBS2QsSUFBTCxDQUFVMUIsU0FBVixDQUFvQmtELHdCQUFwQixDQUE2Q3BCLFFBQTdDLEVBQXVEd0IsMEJBQXZEO0FBQ0EsYUFBT0QsNEJBQTRCLENBQUNuRSxNQUE3QixDQUFvQ29FLDBCQUFwQyxDQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1lBR0M7QUFDQUUsSUFBQUEsa0IsR0FIQSw0QkFHbUJ0QixrQkFIbkIsRUFHd0QsQ0FDdkQ7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBR0N1QixXLEdBRkEscUJBRVkzQixRQUZaLEVBRTJCO0FBQzFCLGFBQU8sS0FBSzRCLE9BQUwsR0FBZUMsVUFBZixDQUEwQjdCLFFBQVEsQ0FBQzlFLEtBQVQsRUFBMUIsS0FBK0M4RSxRQUFRLENBQUM5RSxLQUFULEVBQXREO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FHQ2lELGlCLEdBRkEsNkJBRW9CO0FBQUE7O0FBQ25CLFFBQUUsS0FBS21CLHdCQUFQO0FBQ0EsYUFBTyxLQUFLQyxxQkFBTCxDQUNMakcsSUFESyxDQUNBLFlBQU07QUFDWCxlQUFPLE1BQUksQ0FBQ3FHLGNBQUwsQ0FBb0IsTUFBSSxDQUFDQyxJQUFMLENBQVUxQixTQUFWLENBQW9Cd0Qsa0JBQXhDLENBQVA7QUFDQSxPQUhLLEVBSUxwSSxJQUpLLENBSUEsVUFBQ3dHLFNBQUQsRUFBb0I7QUFDekIsZUFBT04sT0FBTyxDQUFDMkIsR0FBUixDQUNOckIsU0FBUyxDQUNQbkcsTUFERixDQUNTLFVBQVVxRyxRQUFWLEVBQXlCO0FBQ2hDLGlCQUFPQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ0MsR0FBckIsSUFBNEJELFFBQVEsQ0FBQ0MsR0FBVCxDQUFhLDJCQUFiLENBQW5DO0FBQ0EsU0FIRixFQUlFNkIsR0FKRixDQUlNLFVBQUM5QixRQUFELEVBQW1CO0FBQ3ZCLGlCQUFPLE1BQUksQ0FBQ3RCLG9CQUFMLENBQTBCc0IsUUFBMUIsRUFBb0MxRyxJQUFwQyxDQUF5QyxVQUFDeUksT0FBRCxFQUFrQjtBQUNqRSxtQkFBTztBQUNOQyxjQUFBQSxHQUFHLEVBQUUsTUFBSSxDQUFDTCxXQUFMLENBQWlCM0IsUUFBakIsQ0FEQztBQUVOaUMsY0FBQUEsS0FBSyxFQUFFRjtBQUZELGFBQVA7QUFJQSxXQUxNLENBQVA7QUFNQSxTQVhGLENBRE0sQ0FBUDtBQWNBLE9BbkJLLEVBb0JMekksSUFwQkssQ0FvQkEsVUFBVTRJLGVBQVYsRUFBZ0M7QUFDckMsZUFBT0EsZUFBZSxDQUFDckYsTUFBaEIsQ0FBdUIsVUFBVXNGLE9BQVYsRUFBd0JDLE1BQXhCLEVBQXFDO0FBQ2xFLGNBQU1DLGFBQWtCLEdBQUcsRUFBM0I7QUFDQUEsVUFBQUEsYUFBYSxDQUFDRCxNQUFNLENBQUNKLEdBQVIsQ0FBYixHQUE0QkksTUFBTSxDQUFDSCxLQUFuQztBQUNBLGlCQUFPSyxZQUFZLENBQUNILE9BQUQsRUFBVUUsYUFBVixDQUFuQjtBQUNBLFNBSk0sRUFJSixFQUpJLENBQVA7QUFLQSxPQTFCSyxFQTJCTC9JLElBM0JLLENBMkJBLFVBQUNpSixVQUFELEVBQXFCO0FBQzFCLGVBQU8vQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsTUFBSSxDQUFDK0MseUJBQUwsRUFBaEIsRUFBa0RsSixJQUFsRCxDQUF1RCxVQUFVbUosaUJBQVYsRUFBa0M7QUFDL0YsY0FBSUEsaUJBQWlCLElBQUk5RixNQUFNLENBQUNDLElBQVAsQ0FBWTZGLGlCQUFaLEVBQStCMUksTUFBeEQsRUFBZ0U7QUFDL0R3SSxZQUFBQSxVQUFVLENBQUMvSyxxQkFBRCxDQUFWLEdBQW9DaUwsaUJBQXBDO0FBQ0E7O0FBQ0QsaUJBQU9GLFVBQVA7QUFDQSxTQUxNLENBQVA7QUFNQSxPQWxDSyxFQW1DTEcsT0FuQ0ssQ0FtQ0csWUFBTTtBQUNkLFVBQUUsTUFBSSxDQUFDcEQsd0JBQVA7QUFDQSxPQXJDSyxFQXNDTGhHLElBdENLLENBc0NBLFVBQUNpSixVQUFELEVBQXFCO0FBQzFCLGVBQU8sTUFBSSxDQUFDakQsd0JBQUwsS0FBa0MsQ0FBbEMsR0FBc0NpRCxVQUF0QyxHQUFtRHJLLFNBQTFEO0FBQ0EsT0F4Q0ssQ0FBUDtBQXlDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7WUFHQztBQUNBeUssSUFBQUEsd0IsR0FIQSxrQ0FHeUJGLGlCQUh6QixFQUdvRCxDQUNuRDtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7O1dBQ0NELHlCLEdBQUEscUNBQTRCO0FBQzNCLFVBQU1DLGlCQUFpQixHQUFHLEVBQTFCO0FBQ0EsV0FBSzdDLElBQUwsQ0FBVTFCLFNBQVYsQ0FBb0J5RSx3QkFBcEIsQ0FBNkNGLGlCQUE3QztBQUNBLGFBQU9BLGlCQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUdDL0Qsb0IsR0FGQSw4QkFFcUJzQixRQUZyQixFQUVvQztBQUFBOztBQUNuQyxVQUFNNEMscUJBQXFCLEdBQUcsS0FBS3RCLHNCQUFMLENBQTRCdEIsUUFBNUIsQ0FBOUI7QUFDQSxhQUFPUixPQUFPLENBQUMyQixHQUFSLENBQ055QixxQkFBcUIsQ0FBQ2QsR0FBdEIsQ0FBMEIsVUFBQ2Usb0JBQUQsRUFBK0I7QUFDeEQsWUFBSSxPQUFPQSxvQkFBb0IsQ0FBQ2pMLFFBQTVCLEtBQXlDLFVBQTdDLEVBQXlEO0FBQ3hELGdCQUFNLElBQUlrTCxLQUFKLHVFQUF5RTlDLFFBQVEsQ0FBQ08sV0FBVCxHQUF1QkMsT0FBdkIsRUFBekUsRUFBTjtBQUNBOztBQUNELGVBQU9xQyxvQkFBb0IsQ0FBQ2pMLFFBQXJCLENBQThCbUwsSUFBOUIsQ0FBbUMsTUFBbkMsRUFBeUMvQyxRQUF6QyxDQUFQO0FBQ0EsT0FMRCxDQURNLEVBT0wxRyxJQVBLLENBT0EsVUFBQzBKLE9BQUQsRUFBb0I7QUFDMUIsZUFBT0EsT0FBTyxDQUFDbkcsTUFBUixDQUFlLFVBQVVvRyxXQUFWLEVBQTRCWixhQUE1QixFQUFnRDtBQUNyRSxpQkFBT0MsWUFBWSxDQUFDVyxXQUFELEVBQWNaLGFBQWQsQ0FBbkI7QUFDQSxTQUZNLEVBRUosRUFGSSxDQUFQO0FBR0EsT0FYTSxDQUFQO0FBWUE7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7V0FHQ2EscUIsR0FGQSxpQ0FFd0I7QUFDdkIsYUFBTyxJQUFQO0FBQ0E7QUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBR0M3RSxjLEdBRkEsd0JBR0NrRSxVQUhELEVBSUNZLGFBSkQsRUFVZ0I7QUFBQTs7QUFDZixVQUFJLEtBQUt2RCxJQUFMLENBQVUxQixTQUFWLENBQW9CZ0YscUJBQXBCLE1BQStDLEtBQUtFLHVCQUFMLEVBQW5ELEVBQW1GO0FBQ2xGLGVBQU81RCxPQUFPLENBQUNDLE9BQVIsRUFBUDtBQUNBOztBQUNELGFBQU8sS0FBS0UsY0FBTCxDQUFvQixLQUFLQyxJQUFMLENBQVUxQixTQUFWLENBQW9CbUYsb0JBQXhDLEVBQ0wvSixJQURLLENBQ0EsWUFBTTtBQUNYLGVBQU8sTUFBSSxDQUFDcUcsY0FBTCxDQUFvQixNQUFJLENBQUNDLElBQUwsQ0FBVTFCLFNBQVYsQ0FBb0J3RCxrQkFBeEMsQ0FBUDtBQUNBLE9BSEssRUFJTHBJLElBSkssQ0FJQSxVQUFDd0csU0FBRCxFQUFvQjtBQUN6QixZQUFJQyxhQUFhLEdBQUdQLE9BQU8sQ0FBQ0MsT0FBUixFQUFwQjtBQUNBSyxRQUFBQSxTQUFTLENBQ1BuRyxNQURGLENBQ1MsVUFBVXFHLFFBQVYsRUFBeUI7QUFDaEMsaUJBQU9BLFFBQVEsSUFBSUEsUUFBUSxDQUFDQyxHQUFyQixJQUE0QkQsUUFBUSxDQUFDQyxHQUFULENBQWEsMkJBQWIsQ0FBbkM7QUFDQSxTQUhGLEVBSUVqRyxPQUpGLENBSVUsVUFBQ2dHLFFBQUQsRUFBbUI7QUFDM0IsY0FBTXNELElBQUksR0FBRyxNQUFJLENBQUMzQixXQUFMLENBQWlCM0IsUUFBakIsQ0FBYjs7QUFDQUQsVUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUN6RyxJQUFkLENBQ2YsTUFBSSxDQUFDc0YsaUJBQUwsQ0FBdUJ1QixJQUF2QixDQUE0QixNQUE1QixFQUFrQ0gsUUFBbEMsRUFBNEN1QyxVQUFVLEdBQUdBLFVBQVUsQ0FBQ2UsSUFBRCxDQUFiLEdBQXNCcEwsU0FBNUUsRUFBdUZpTCxhQUF2RixDQURlLENBQWhCO0FBR0EsU0FURjtBQVVBLGVBQU9wRCxhQUFQO0FBQ0EsT0FqQkssRUFrQkx6RyxJQWxCSyxDQWtCQSxZQUFNO0FBQ1gsWUFBSTZKLGFBQWEsQ0FBQ0ksY0FBZCxLQUFpQzlMLE9BQU8sQ0FBQytMLFNBQTdDLEVBQXdEO0FBQ3ZELGlCQUFPLE1BQUksQ0FBQzdELGNBQUwsQ0FDTixNQUFJLENBQUNDLElBQUwsQ0FBVTFCLFNBQVYsQ0FBb0J1RixxQkFEZCxFQUVObEIsVUFBVSxHQUFHQSxVQUFVLENBQUMvSyxxQkFBRCxDQUFiLEdBQXVDVSxTQUYzQyxDQUFQO0FBSUEsU0FMRCxNQUtPO0FBQ04saUJBQU8sTUFBSSxDQUFDeUgsY0FBTCxDQUFvQixNQUFJLENBQUNDLElBQUwsQ0FBVTFCLFNBQVYsQ0FBb0J3Rix5QkFBeEMsRUFBbUVQLGFBQW5FLENBQVA7QUFDQTtBQUNELE9BM0JLLEVBNEJMVCxPQTVCSyxDQTRCRyxZQUFNO0FBQ2QsUUFBQSxNQUFJLENBQUMvQyxjQUFMLENBQW9CLE1BQUksQ0FBQ0MsSUFBTCxDQUFVMUIsU0FBVixDQUFvQnlGLG1CQUF4QyxFQUNFckssSUFERixDQUNPLE1BQUksQ0FBQ3NLLHVCQUFMLENBQTZCekQsSUFBN0IsQ0FBa0MsTUFBbEMsQ0FEUCxFQUVFMEQsS0FGRixDQUVRLFVBQUNDLENBQUQsRUFBTztBQUNiOUksVUFBQUEsR0FBRyxDQUFDK0ksS0FBSixDQUFVRCxDQUFWO0FBQ0EsU0FKRjtBQUtBLE9BbENLLENBQVA7QUFtQ0EsSzs7V0FHRDFMLDRCLEdBREEsc0NBQzZCUCxHQUQ3QixFQUN1Q21NLFVBRHZDLEVBQ3dEO0FBQ3ZELFVBQU1DLFNBQVMsR0FBR3BNLEdBQUcsQ0FBQ3FNLFdBQUosRUFBbEI7QUFDQSxVQUFJQywrQkFBK0IsR0FBRyxLQUF0QztBQUNBRixNQUFBQSxTQUFTLENBQUNqSyxPQUFWLENBQWtCLFVBQVVvSyxRQUFWLEVBQXlCO0FBQzFDLFlBQUlBLFFBQVEsQ0FBQ3BDLEdBQVQsS0FBaUJnQyxVQUFyQixFQUFpQztBQUNoQ0csVUFBQUEsK0JBQStCLEdBQUcsSUFBbEM7QUFDQTtBQUNELE9BSkQ7QUFLQSxhQUFPQSwrQkFBUDtBQUNBLEs7O1dBRURQLHVCLEdBQUEsbUNBQTBCO0FBQ3pCLFVBQUksS0FBS2xFLDRCQUFULEVBQXVDO0FBQ3RDLFlBQU0yRSwyQkFBMkIsR0FBRyxLQUFLM0UsNEJBQXpDO0FBQ0EsZUFBTyxLQUFLQSw0QkFBWjtBQUNBMkUsUUFBQUEsMkJBQTJCO0FBQzNCO0FBQ0QsSzs7V0FDRGpCLHVCLEdBQUEsbUNBQTBCO0FBQ3pCLGFBQU8sQ0FBQyxLQUFLMUQsNEJBQWI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7WUFHQztBQUNBMkQsSUFBQUEsb0IsR0FIQSw4QkFHcUJpQixTQUhyQixFQUc4QyxDQUM3QztBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztZQUdDO0FBQ0FYLElBQUFBLG1CLEdBSEEsNkJBR29CVyxTQUhwQixFQUc2QyxDQUM1QztBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1lBR0M7QUFDQWIsSUFBQUEscUIsR0FIQSwrQkFHc0JsQixVQUh0QixFQUcwQytCLFNBSDFDLEVBR21FLENBQ2xFO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUdDWix5QixHQUZBLG9DQUdDO0FBQ0FQLElBQUFBLGFBSkQsRUFVQztBQUNBbUIsSUFBQUEsU0FYRCxFQVlFLENBQ0Q7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUdDMUYsaUIsR0FGQSwyQkFFa0JvQixRQUZsQixFQUVpQ2hJLGFBRmpDLEVBRXdEb0csY0FGeEQsRUFFaUY7QUFBQTs7QUFDaEYsVUFBTXdFLHFCQUFxQixHQUFHLEtBQUt0QixzQkFBTCxDQUE0QnRCLFFBQTVCLENBQTlCO0FBQ0EsVUFBSUQsYUFBYSxHQUFHUCxPQUFPLENBQUNDLE9BQVIsRUFBcEI7QUFDQW1ELE1BQUFBLHFCQUFxQixDQUFDNUksT0FBdEIsQ0FBOEIsVUFBQzZJLG9CQUFELEVBQStCO0FBQzVELFlBQUksT0FBT0Esb0JBQW9CLENBQUM5SyxLQUE1QixLQUFzQyxVQUExQyxFQUFzRDtBQUNyRCxnQkFBTSxJQUFJK0ssS0FBSixvRUFBc0U5QyxRQUFRLENBQUNPLFdBQVQsR0FBdUJDLE9BQXZCLEVBQXRFLEVBQU47QUFDQTs7QUFDRFQsUUFBQUEsYUFBYSxHQUFHQSxhQUFhLENBQUN6RyxJQUFkLENBQW1CdUosb0JBQW9CLENBQUM5SyxLQUFyQixDQUEyQm9JLElBQTNCLENBQWdDLE1BQWhDLEVBQXNDSCxRQUF0QyxFQUFnRGhJLGFBQWhELEVBQStEb0csY0FBL0QsQ0FBbkIsQ0FBaEI7QUFDQSxPQUxEO0FBTUEsYUFBTzJCLGFBQVA7QUFDQSxLOztXQUNEd0UsWSxHQUFBLHdCQUFlO0FBQ2QsYUFBTyxJQUFQO0FBQ0EsSzs7O0lBaGlCc0JDLG1CO1NBbWlCVDNGLFMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbi8vIGFkZGl0aW9uYWxTdGF0ZXMgYXJlIHN0b3JlZCBuZXh0IHRvIGNvbnRyb2wgSURzLCBzbyBuYW1lIGNsYXNoIGF2b2lkYW5jZSBuZWVkZWQuIEZvcnR1bmF0ZWx5IElEcyBoYXZlIHJlc3RyaWN0aW9uczpcbi8vIFwiQWxsb3dlZCBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgKGNhcGl0YWwvbG93ZXJjYXNlKSwgZGlnaXRzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBwb2ludHMgYW5kL29yIGNvbG9ucy5cIlxuLy8gVGhlcmVmb3JlIGFkZGluZyBhIHN5bWJvbCBsaWtlICMgb3IgQFxuY29uc3QgQURESVRJT05BTF9TVEFURVNfS0VZID0gXCIjYWRkaXRpb25hbFN0YXRlc1wiLFxuXHROYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWV0aG9kcyB0byByZXRyaWV2ZSAmIGFwcGx5IHN0YXRlcyBmb3IgdGhlIGRpZmZlcmVudCBjb250cm9scyAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuY29uc3QgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVk06IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XCJ2YXJpYW50SWRcIjogb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9WTTogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlICYmIG9Db250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgb0NvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTSwgb0NvbnRyb2xTdGF0ZS52YXJpYW50SWQpXG5cdFx0XHRcdFx0PyBvQ29udHJvbFN0YXRlLnZhcmlhbnRJZFxuXHRcdFx0XHRcdDogb1ZNLmdldFN0YW5kYXJkVmFyaWFudEtleSgpO1xuXHRcdFx0XHRyZXR1cm4gQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdGVsZW1lbnQ6IG9WTSxcblx0XHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBzVmFyaWFudFJlZmVyZW5jZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uSWNvblRhYkJhclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVGFiQmFyOiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvVGFiQmFyLmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9UYWJCYXI6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSAmJiBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZEl0ZW0gPSBvVGFiQmFyLmdldEl0ZW1zKCkuZmluZChmdW5jdGlvbiAob0l0ZW06IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvSXRlbS5nZXRLZXkoKSA9PT0gb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRJdGVtKSB7XG5cdFx0XHRcdFx0b1RhYkJhci5zZXRTZWxlY3RlZEl0ZW0ob1NlbGVjdGVkSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob0ZpbHRlckJhcjogYW55KSB7XG5cdFx0XHRyZXR1cm4gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKS50aGVuKGZ1bmN0aW9uIChtRmlsdGVyQmFyU3RhdGU6IGFueSkge1xuXHRcdFx0XHQvLyByZW1vdmUgc2Vuc2l0aXZlIG9yIHZpZXcgc3RhdGUgaXJyZWxldmFudCBmaWVsZHNcblx0XHRcdFx0Y29uc3QgYVByb3BlcnRpZXNJbmZvID0gb0ZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKSxcblx0XHRcdFx0XHRtRmlsdGVyID0gbUZpbHRlckJhclN0YXRlLmZpbHRlciB8fCB7fTtcblx0XHRcdFx0YVByb3BlcnRpZXNJbmZvXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob1Byb3BlcnR5SW5mbzogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0gJiYgKG9Qcm9wZXJ0eUluZm8ucmVtb3ZlRnJvbUFwcFN0YXRlIHx8IG1GaWx0ZXJbb1Byb3BlcnR5SW5mby5wYXRoXS5sZW5ndGggPT09IDApXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9Qcm9wZXJ0eUluZm86IGFueSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG1GaWx0ZXJbb1Byb3BlcnR5SW5mby5wYXRoXTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG1GaWx0ZXJCYXJTdGF0ZTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRmlsdGVyQmFyOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwgb0NvbnRyb2xTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuVGFibGVcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9UYWJsZSk7XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9UYWJsZTogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdGlmICghb0NvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob1RhYmxlLCBvQ29udHJvbFN0YXRlKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9UYWJsZUJpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0aWYgKG9UYWJsZUJpbmRpbmcpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RCaW5kaW5nID0gb1RhYmxlQmluZGluZy5nZXRSb290QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1Jvb3RCaW5kaW5nID09PSBvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdFx0Ly8gYWJzb2x1dGUgYmluZGluZ1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbGF0aXZlIGJpbmRpbmdcblx0XHRcdFx0XHRjb25zdCBvSGVhZGVyQ29udGV4dCA9IG9UYWJsZUJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdGNvbnN0IHNHcm91cElkID0gb1RhYmxlQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRpZiAob0hlYWRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRcdG9IZWFkZXJDb250ZXh0LnJlcXVlc3RTaWRlRWZmZWN0cyhbeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIiB9XSwgc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFRhYmxlOiAke29UYWJsZS5nZXRJZCgpfSB3YXMgbm90IHJlZnJlc2hlZC4gTm8gYmluZGluZyBmb3VuZCFgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5DaGFydFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0NoYXJ0KTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob0NoYXJ0OiBhbnksIG9Db250cm9sU3RhdGU6IGFueSkge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0NoYXJ0LCBvQ29udHJvbFN0YXRlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRTZWN0aW9uOiBvT1BMYXlvdXQuZ2V0U2VsZWN0ZWRTZWN0aW9uKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9PUExheW91dDogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9PUExheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24ob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZFNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09QTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBzU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKG9PUExheW91dCwgc01ldGFQYXRoKTtcblx0XHRcdFx0aWYgKHNTdHJhdGVneSA9PT0gXCJzZWxmXCIpIHtcblx0XHRcdFx0XHQvLyBSZWZyZXNoIG1haW4gY29udGV4dCBhbmQgMS0xIG5hdmlnYXRpb24gcHJvcGVydGllcyBvciBPUFxuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUHJvcGVydGllcyA9XG5cdFx0XHRcdFx0XHRcdENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHtcblx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHR9KSB8fCB7fSxcblx0XHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKGFQcmV2OiBhbnlbXSwgc05hdlByb3A6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0aWVzW3NOYXZQcm9wXS4kaXNDb2xsZWN0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0YVByZXYucHVzaCh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzTmF2UHJvcCB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYVByZXY7XG5cdFx0XHRcdFx0XHR9LCBbXSksXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllcyA9IFt7ICRQcm9wZXJ0eVBhdGg6IFwiKlwiIH1dLFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQgPSBvQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRvQmluZGluZ0NvbnRleHQucmVxdWVzdFNpZGVFZmZlY3RzKGFQcm9wZXJ0aWVzLmNvbmNhdChhTmF2UHJvcGVydGllc1RvUmVxdWVzdCksIHNHcm91cElkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU3RyYXRlZ3kgPT09IFwiaW5jbHVkaW5nRGVwZW5kZW50c1wiKSB7XG5cdFx0XHRcdFx0Ly8gQ29tcGxldGUgcmVmcmVzaFxuXHRcdFx0XHRcdG9CaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYE9iamVjdFBhZ2U6ICR7b09QTGF5b3V0LmdldElkKCl9IHdhcyBub3QgcmVmcmVzaGVkLiBObyBiaW5kaW5nIGZvdW5kIWApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZmUubWFjcm9zLnRhYmxlLlF1aWNrRmlsdGVyQ29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55KSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1F1aWNrRmlsdGVyLmdldFNlbGVjdG9yS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9RdWlja0ZpbHRlcjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9RdWlja0ZpbHRlci5zZXRTZWxlY3RvcktleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWdtZW50ZWRCdXR0b246IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWdtZW50ZWRCdXR0b24uZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob1NlZ21lbnRlZEJ1dHRvbjogYW55LCBvQ29udHJvbFN0YXRlOiBhbnkpIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlbGVjdFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VsZWN0OiBhbnkpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvU2VsZWN0LmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9TZWxlY3Q6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aGVhZGVyRXhwYW5kZWQ6IG9EeW5hbWljUGFnZS5nZXRIZWFkZXJFeHBhbmRlZCgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IGFueSwgb0NvbnRyb2xTdGF0ZTogYW55KSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRvRHluYW1pY1BhZ2Uuc2V0SGVhZGVyRXhwYW5kZWQob0NvbnRyb2xTdGF0ZS5oZWFkZXJFeHBhbmRlZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJldHJpZXZlVmlld1N0YXRlKG9Db250cm9sbGVyLnZpZXdTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge307XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9WaWV3OiBhbnksIG9Db250cm9sU3RhdGU6IGFueSwgb05hdlBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUuYXBwbHlWaWV3U3RhdGUob0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVmlldzogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvQ29tcG9uZW50Q29udGFpbmVyOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29tcG9uZW50Q29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRpZiAob0NvbXBvbmVudCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvQ29tcG9uZW50Q29udGFpbmVyOiBhbnksIG9Db250cm9sU3RhdGU6IGFueSwgb05hdlBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db21wb25lbnRDb250YWluZXIuZ2V0Q29tcG9uZW50SW5zdGFuY2UoKTtcblx0XHRcdGlmIChvQ29tcG9uZW50KSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmFwcGx5Q29udHJvbFN0YXRlKG9Db21wb25lbnQuZ2V0Um9vdENvbnRyb2woKSwgb0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBmb3Igc3RhdGUgaGFuZGxpbmdcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGZvciB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODUuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGVcIilcbmNsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjogbnVtYmVyO1xuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZDogUHJvbWlzZTx1bmtub3duPjtcblx0cHJpdmF0ZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlPzogRnVuY3Rpb247XG5cdHByaXZhdGUgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVmcmVzaFZpZXdCaW5kaW5ncygpIHtcblx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scykudGhlbigoYUNvbnRyb2xzOiBhbnkpID0+IHtcblx0XHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRhQ29udHJvbHNcblx0XHRcdFx0LmZpbHRlcigob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZvckVhY2goKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKHRoaXMucmVmcmVzaENvbnRyb2xCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWRkIGFsbCBjb250cm9scyByZWxldmFudCBmb3IgcmVmcmVzaGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHMoYUNvbGxlY3RlZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmVmcmVzaENvbnRyb2xCaW5kaW5nKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0fSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMge29iamVjdH0gQSBwbGFpbiBvYmplY3Qgd2l0aCBvbmUgZnVuY3Rpb246IDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPlxuXHQgKi9cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIob0NvbnRyb2w6IGFueSk6IGFueSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjogYW55ID0ge307XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIHBhc3Mgb25seSB0aGUgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBpbiBhbiBvYmplY3Qgc28gdGhhdCA6XG5cdFx0XHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gaGFzIGFjY2VzcyBvbmx5IHRvIHJlZnJlc2hCaW5kaW5nIGFuZCBub3QgYXBwbHkgYW5kIHJldGVyaXZlIGF0IHRoaXMgc3RhZ2Vcblx0XHRcdFx0XHQvLyAyLiBBcHBsaWNhdGlvbiBtb2RpZmljYXRpb25zIHRvIHRoZSBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQgaGVyZSAoYXMgd2UgcGFzcyBieSByZWZlcmVuY2UpXG5cdFx0XHRcdFx0b1JlZnJlc2hCaW5kaW5nSGFuZGxlcltcInJlZnJlc2hCaW5kaW5nXCJdID0gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXS5yZWZyZXNoQmluZGluZyB8fCB7fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sLCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyKTtcblx0XHRyZXR1cm4gb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjtcblx0fVxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHdoaWNoIHRoZSByZWZyZXNoIGhhbmRsZXIgaXMgYWRhcHRlZC5cblx0ICogQHBhcmFtIG9Db250cm9sSGFuZGxlciBBIHBsYWluIG9iamVjdCB3aGljaCBjYW4gaGF2ZSBvbmUgZnVuY3Rpb246IDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCwgb0NvbnRyb2xIYW5kbGVyOiBhbnlbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBzdXNwZW5kZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvblN1c3BlbmRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblN1c3BlbmQoKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHJlc3RvcmVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjb25SZXN0b3JlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25SZXN0b3JlKCkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIERlc3RydWN0b3IgbWV0aG9kIGZvciBvYmplY3RzLlxuXHQgKi9cblx0ZGVzdHJveSgpIHtcblx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdHN1cGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZnVuY3Rpb24gdG8gZW5hYmxlIG11bHRpIG92ZXJyaWRlLiBJdCBpcyBhZGRpbmcgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgKGFycmF5KSB0byB0aGUgcHJvdmlkZWRcblx0ICogZnVuY3Rpb24gKGFuZCBpdHMgcGFyYW1ldGVycyksIHRoYXQgd2lsbCBiZSBldmFsdWF0ZWQgdmlhIDxjb2RlPlByb21pc2UuYWxsPC9jb2RlPi5cblx0ICpcblx0ICogQHBhcmFtIGZuQ2FsbCBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkXG5cdCAqIEBwYXJhbSBhcmdzXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0byBiZSByZXNvbHZlZCB3aXRoIHRoZSByZXN1bHQgb2YgYWxsIG92ZXJyaWRlc1xuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRjb2xsZWN0UmVzdWx0cyhmbkNhbGw6IEZ1bmN0aW9uLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRcdGNvbnN0IGFSZXN1bHRzOiBhbnlbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FkYXB0Q29udHJvbFN0YXRlSGFuZGxlclxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBhbnkpIHtcblx0XHRjb25zdCBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogYW55W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdGlmIChvQ29udHJvbC5pc0Eoc1R5cGUpKSB7XG5cdFx0XHRcdFx0Ly8gYXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBpbnRlcm5hbCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBcblx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlXSkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sLCBhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdFx0cmV0dXJuIGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIuY29uY2F0KGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIGZvciBnaXZlbiB2aWV3IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBzdGF0ZSBoYW5kbGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFDb2xsZWN0ZWRDb250cm9scyBUaGUgY29sbGVjdGVkIGNvbnRyb2xzXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYWRhcHRTdGF0ZUNvbnRyb2xzXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdFN0YXRlQ29udHJvbHMoYUNvbGxlY3RlZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGtleSB0byBiZSB1c2VkIGZvciBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGtleSBmb3Jcblx0ICogQHJldHVybnMgVGhlIGtleSB0byBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSBjb250cm9scyBzdGF0ZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFN0YXRlS2V5KG9Db250cm9sOiBhbnkpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TG9jYWxJZChvQ29udHJvbC5nZXRJZCgpKSB8fCBvQ29udHJvbC5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2aWV3IHN0YXRlIG9mIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaW5pc2hpbmcsIGFsbCBidXQgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgcmVzb2x2ZSB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSB2aWV3IHN0YXRlXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjcmV0cmlldmVWaWV3U3RhdGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHJldHJpZXZlVmlld1N0YXRlKCkge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0cmV0dXJuIHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYUNvbnRyb2xzOiBhbnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdGFDb250cm9sc1xuXHRcdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0Lm1hcCgob0NvbnRyb2w6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdGtleTogdGhpcy5nZXRTdGF0ZUtleShvQ29udHJvbCksXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdlJlc3VsdFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoYVJlc29sdmVkU3RhdGVzOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGFSZXNvbHZlZFN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9TdGF0ZXM6IGFueSwgbVN0YXRlOiBhbnkpIHtcblx0XHRcdFx0XHRjb25zdCBvQ3VycmVudFN0YXRlOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRvQ3VycmVudFN0YXRlW21TdGF0ZS5rZXldID0gbVN0YXRlLnZhbHVlO1xuXHRcdFx0XHRcdHJldHVybiBtZXJnZU9iamVjdHMob1N0YXRlcywgb0N1cnJlbnRTdGF0ZSk7XG5cdFx0XHRcdH0sIHt9KTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigob1ZpZXdTdGF0ZTogYW55KSA9PiB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCkpLnRoZW4oZnVuY3Rpb24gKG1BZGRpdGlvbmFsU3RhdGVzOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAobUFkZGl0aW9uYWxTdGF0ZXMgJiYgT2JqZWN0LmtleXMobUFkZGl0aW9uYWxTdGF0ZXMpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0b1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldID0gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBvVmlld1N0YXRlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdC0tdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKG9WaWV3U3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPT09IDAgPyBvVmlld1N0YXRlIDogdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gbUFkZGl0aW9uYWxTdGF0ZXMgVGhlIGFkZGl0aW9uYWwgc3RhdGVcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNyZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlczogb2JqZWN0KSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogQHJldHVybnMgQWRkaXRpb25hbCB2aWV3IHN0YXRlc1xuXHQgKi9cblx0X3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpIHtcblx0XHRjb25zdCBtQWRkaXRpb25hbFN0YXRlcyA9IHt9O1xuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUucmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzKTtcblx0XHRyZXR1cm4gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgc3RhdGUgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cmV0cmlldmVDb250cm9sU3RhdGUob0NvbnRyb2w6IGFueSkge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLm1hcCgobUNvbnRyb2xTdGF0ZUhhbmRsZXI6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlLmNhbGwodGhpcywgb0NvbnRyb2wpO1xuXHRcdFx0fSlcblx0XHQpLnRoZW4oKGFTdGF0ZXM6IGFueVtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gYVN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9GaW5hbFN0YXRlOiBhbnksIG9DdXJyZW50U3RhdGU6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9GaW5hbFN0YXRlLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHZpZXcgc3RhdGUgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCBvbmNlIGluaXRpYWxseS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJbXBvcnRhbnQ6XG5cdCAqIFlvdSBzaG91bGQgb25seSBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgY3VzdG9tIHBhZ2VzIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBMaXN0UmVwb3J0UGFnZSBhbmQgT2JqZWN0UGFnZSFcblx0ICpcblx0ICogQHJldHVybnMgSWYgPGNvZGU+dHJ1ZTwvY29kZT4sIG9ubHkgdGhlIGluaXRpYWwgdmlldyBzdGF0ZSBpcyBhcHBsaWVkIG9uY2UsXG5cdCAqIGVsc2UgYW55IG5ldyB2aWV3IHN0YXRlIGlzIGFsc28gYXBwbGllZCBvbiBmb2xsb3ctdXAgY2FsbHMgKGRlZmF1bHQpXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlJbml0aWFsU3RhdGVPbmx5XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHkoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0LyoqXG5cdCAqIEFwcGxpZXMgdGhlIGdpdmVuIHZpZXcgc3RhdGUgdG8gdGhpcyBleHRlbnNpb25zIHZpZXcuXG5cdCAqXG5cdCAqIEBwYXJhbSBvVmlld1N0YXRlIFRoZSB2aWV3IHN0YXRlIHRvIGFwcGx5IChjYW4gYmUgdW5kZWZpbmVkKVxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlciBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZVxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50IFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgRGVmaW5lcyB3aGV0aGVyIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIFZNXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBhbGlhcyBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGUjYXBwbHlWaWV3U3RhdGVcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFwcGx5Vmlld1N0YXRlKFxuXHRcdG9WaWV3U3RhdGU6IGFueSxcblx0XHRvTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogYW55O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbjtcblx0XHR9XG5cdCk6IFByb21pc2U8YW55PiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYUNvbnRyb2xzOiBhbnkpID0+IHtcblx0XHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0YUNvbnRyb2xzXG5cdFx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmZvckVhY2goKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRcdG9Qcm9taXNlQ2hhaW4gPSBvUHJvbWlzZUNoYWluLnRoZW4oXG5cdFx0XHRcdFx0XHRcdHRoaXMuYXBwbHlDb250cm9sU3RhdGUuYmluZCh0aGlzLCBvQ29udHJvbCwgb1ZpZXdTdGF0ZSA/IG9WaWV3U3RhdGVbc0tleV0gOiB1bmRlZmluZWQsIG9OYXZQYXJhbWV0ZXIpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlID09PSBOYXZUeXBlLmlBcHBTdGF0ZSkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmNvbGxlY3RSZXN1bHRzKFxuXHRcdFx0XHRcdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseUFkZGl0aW9uYWxTdGF0ZXMsXG5cdFx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMsIG9OYXZQYXJhbWV0ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25BZnRlclN0YXRlQXBwbGllZClcblx0XHRcdFx0XHQudGhlbih0aGlzLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkLmJpbmQodGhpcykpXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0X2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk06IGFueSwgc1ZhcmlhbnRJZDogYW55KSB7XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gb1ZNLmdldFZhcmlhbnRzKCk7XG5cdFx0bGV0IGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSBmYWxzZTtcblx0XHRhVmFyaWFudHMuZm9yRWFjaChmdW5jdGlvbiAob1ZhcmlhbnQ6IGFueSkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmtleSA9PT0gc1ZhcmlhbnRJZCkge1xuXHRcdFx0XHRiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZTtcblx0fVxuXG5cdF9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkge1xuXHRcdGlmICh0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUpIHtcblx0XHRcdGNvbnN0IHBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUoKTtcblx0XHR9XG5cdH1cblx0X2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKSB7XG5cdFx0cmV0dXJuICF0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdH1cblxuXHQvKipcblx0ICogSG9vayB0byByZWFjdCBiZWZvcmUgYSBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyBpcyBhcHBsaWVkLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQGFsaWFzIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlZpZXdTdGF0ZSNvbkJlZm9yZVN0YXRlQXBwbGllZFxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPGFueT4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IHdoZW4gc3RhdGUgZm9yIGdpdmVuIHZpZXcgd2FzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI29uQWZ0ZXJTdGF0ZUFwcGxpZWRcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQWZ0ZXJTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPGFueT4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyBhZGRpdGlvbmFsLCBub3QgY29udHJvbCByZWxhdGVkLCBzdGF0ZXMgLSBpcyBjYWxsZWQgb25seSBpZiBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgY3VycmVudCB2aWV3IHN0YXRlXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5QWRkaXRpb25hbFN0YXRlc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YXBwbHlBZGRpdGlvbmFsU3RhdGVzKG9WaWV3U3RhdGU6IG9iamVjdCwgYVByb21pc2VzOiBQcm9taXNlPGFueT4pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IG5hdmlnYXRpb24gcGFyYW1ldGVycyAtIGlzIGNhbGxlZCBvbmx5IGlmIG5hdmlnYXRpb24gdHlwZSBpcyBub3QgaUFwcFN0YXRlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlciBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZVxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudF0gVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXSBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudF0gRGVmaW5lcyB3aGV0aGVyIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIFZNXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAYWxpYXMgc2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlI2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRvTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogYW55O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRhUHJvbWlzZXM6IFByb21pc2U8YW55PlxuXHQpIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIHRoZSBnaXZlbiBzdGF0ZSB0byB0aGUgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGdpdmVuIHN0YXRlXG5cdCAqIEBwYXJhbSBvQ29udHJvbFN0YXRlIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyc10gVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzXG5cdCAqIEByZXR1cm5zIFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFwcGx5Q29udHJvbFN0YXRlKG9Db250cm9sOiBhbnksIG9Db250cm9sU3RhdGU6IG9iamVjdCwgb05hdlBhcmFtZXRlcnM/OiBvYmplY3QpIHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLmZvckVhY2goKG1Db250cm9sU3RhdGVIYW5kbGVyOiBhbnkpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHR9XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5LmJpbmQodGhpcywgb0NvbnRyb2wsIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdTdGF0ZTtcbiJdfQ==
|