@sapui5/sap.fe.core 1.97.0 → 1.100.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 +7 -4
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +309 -405
- package/src/sap/fe/core/AnnotationHelper.ts +315 -0
- package/src/sap/fe/core/AppComponent.js +389 -397
- package/src/sap/fe/core/AppComponent.ts +403 -0
- package/src/sap/fe/core/AppStateHandler.js +198 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +83 -58
- package/src/sap/fe/core/BaseController.ts +68 -0
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2164 -2379
- package/src/sap/fe/core/CommonUtils.ts +2177 -0
- package/src/sap/fe/core/ExtensionAPI.js +279 -266
- package/src/sap/fe/core/ExtensionAPI.ts +250 -0
- package/src/sap/fe/core/PageController.js +218 -125
- package/src/sap/fe/core/PageController.ts +129 -0
- package/src/sap/fe/core/RouterProxy.js +924 -807
- package/src/sap/fe/core/RouterProxy.ts +840 -0
- package/src/sap/fe/core/Synchronization.js +41 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -155
- package/src/sap/fe/core/TemplateComponent.ts +173 -0
- package/src/sap/fe/core/TemplateModel.js +79 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1560 -1579
- package/src/sap/fe/core/TransactionHelper.ts +1717 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
- package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
- package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
- package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
- package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
- package/src/sap/fe/core/actions/draft.js +521 -581
- package/src/sap/fe/core/actions/draft.ts +566 -0
- package/src/sap/fe/core/actions/messageHandling.js +564 -511
- package/src/sap/fe/core/actions/messageHandling.ts +552 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1093 -1211
- package/src/sap/fe/core/actions/operations.ts +1192 -0
- package/src/sap/fe/core/actions/sticky.js +114 -104
- package/src/sap/fe/core/actions/sticky.ts +119 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +70 -66
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1594 -1701
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +80 -54
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +719 -505
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +797 -813
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1005 -973
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +530 -476
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +137 -46
- package/src/sap/fe/core/controllerextensions/MassEdit.js +144 -0
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +234 -232
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
- package/src/sap/fe/core/controllerextensions/PageReady.js +302 -337
- package/src/sap/fe/core/controllerextensions/PageReady.ts +23 -17
- package/src/sap/fe/core/controllerextensions/Paginator.js +189 -148
- package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
- package/src/sap/fe/core/controllerextensions/Placeholder.js +158 -146
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +145 -106
- package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +8 -6
- package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Share.js +220 -244
- package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +593 -634
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +29 -27
- package/src/sap/fe/core/controllerextensions/ViewState.js +789 -806
- package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -3
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
- package/src/sap/fe/core/controls/CommandExecution.js +68 -66
- package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
- package/src/sap/fe/core/controls/ConditionalWrapper.js +91 -75
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +131 -125
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +105 -110
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
- package/src/sap/fe/core/controls/FieldWrapper.js +122 -140
- package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
- package/src/sap/fe/core/controls/FilterBar.js +163 -159
- package/src/sap/fe/core/controls/FilterBar.ts +143 -0
- package/src/sap/fe/core/controls/FormElementWrapper.js +46 -44
- package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +38 -42
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +127 -116
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +242 -255
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +151 -141
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +336 -322
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
- package/src/sap/fe/core/converters/ConverterContext.js +348 -367
- package/src/sap/fe/core/converters/ConverterContext.ts +33 -19
- package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +16 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js +354 -354
- package/src/sap/fe/core/converters/ManifestWrapper.ts +34 -6
- package/src/sap/fe/core/converters/MetaModelConverter.js +72 -9
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +4 -3
- package/src/sap/fe/core/converters/annotations/DataField.js +28 -14
- package/src/sap/fe/core/converters/annotations/DataField.ts +38 -14
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
- package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -11
- package/src/sap/fe/core/converters/controls/Common/Form.ts +28 -6
- package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +75 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +507 -408
- package/src/sap/fe/core/converters/controls/Common/Table.ts +618 -500
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +592 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +718 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +465 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +462 -72
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
- package/src/sap/fe/core/converters/helpers/Aggregation.js +118 -121
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
- package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
- package/src/sap/fe/core/converters/helpers/Key.js +42 -57
- package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +28 -7
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +23 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +20 -7
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +36 -14
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +93 -90
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +91 -29
- package/src/sap/fe/core/formatters/TableFormatter.ts +94 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
- package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
- package/src/sap/fe/core/fpm/Component.js +51 -54
- package/src/sap/fe/core/fpm/Component.ts +48 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.js +373 -0
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +417 -0
- package/src/sap/fe/core/helpers/BindingExpression.js +489 -442
- package/src/sap/fe/core/helpers/BindingExpression.ts +486 -469
- package/src/sap/fe/core/helpers/ClassSupport.js +212 -76
- package/src/sap/fe/core/helpers/ClassSupport.ts +198 -71
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +64 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +52 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
- package/src/sap/fe/core/helpers/MassEditHelper.js +604 -0
- package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +253 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +250 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +336 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +334 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +427 -425
- package/src/sap/fe/core/library.support.js +23 -27
- package/src/sap/fe/core/library.support.ts +23 -0
- package/src/sap/fe/core/library.ts +420 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +64 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +69 -0
- package/src/sap/fe/core/messagebundle.properties +78 -13
- package/src/sap/fe/core/messagebundle_ar.properties +58 -7
- package/src/sap/fe/core/messagebundle_bg.properties +58 -7
- package/src/sap/fe/core/messagebundle_ca.properties +58 -7
- package/src/sap/fe/core/messagebundle_cs.properties +59 -8
- package/src/sap/fe/core/messagebundle_cy.properties +58 -7
- package/src/sap/fe/core/messagebundle_da.properties +58 -7
- package/src/sap/fe/core/messagebundle_de.properties +58 -7
- package/src/sap/fe/core/messagebundle_el.properties +58 -7
- package/src/sap/fe/core/messagebundle_en.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_GB.properties +57 -6
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +61 -6
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +58 -7
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +58 -7
- package/src/sap/fe/core/messagebundle_es.properties +58 -7
- package/src/sap/fe/core/messagebundle_es_MX.properties +58 -7
- package/src/sap/fe/core/messagebundle_et.properties +58 -7
- package/src/sap/fe/core/messagebundle_fi.properties +60 -9
- package/src/sap/fe/core/messagebundle_fr.properties +64 -13
- package/src/sap/fe/core/messagebundle_fr_CA.properties +59 -8
- package/src/sap/fe/core/messagebundle_hi.properties +58 -7
- package/src/sap/fe/core/messagebundle_hr.properties +58 -7
- package/src/sap/fe/core/messagebundle_hu.properties +59 -8
- package/src/sap/fe/core/messagebundle_id.properties +61 -10
- package/src/sap/fe/core/messagebundle_it.properties +58 -7
- package/src/sap/fe/core/messagebundle_iw.properties +58 -7
- package/src/sap/fe/core/messagebundle_ja.properties +58 -7
- package/src/sap/fe/core/messagebundle_kk.properties +58 -7
- package/src/sap/fe/core/messagebundle_ko.properties +58 -7
- package/src/sap/fe/core/messagebundle_lt.properties +58 -7
- package/src/sap/fe/core/messagebundle_lv.properties +59 -8
- package/src/sap/fe/core/messagebundle_ms.properties +58 -7
- package/src/sap/fe/core/messagebundle_nl.properties +58 -7
- package/src/sap/fe/core/messagebundle_no.properties +58 -7
- package/src/sap/fe/core/messagebundle_pl.properties +58 -7
- package/src/sap/fe/core/messagebundle_pt.properties +59 -8
- package/src/sap/fe/core/messagebundle_pt_PT.properties +58 -7
- package/src/sap/fe/core/messagebundle_ro.properties +58 -7
- package/src/sap/fe/core/messagebundle_ru.properties +58 -7
- package/src/sap/fe/core/messagebundle_sh.properties +58 -7
- package/src/sap/fe/core/messagebundle_sk.properties +58 -7
- package/src/sap/fe/core/messagebundle_sl.properties +58 -7
- package/src/sap/fe/core/messagebundle_sv.properties +59 -8
- package/src/sap/fe/core/messagebundle_th.properties +58 -7
- package/src/sap/fe/core/messagebundle_tr.properties +60 -9
- package/src/sap/fe/core/messagebundle_uk.properties +58 -7
- package/src/sap/fe/core/messagebundle_vi.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_CN.properties +58 -7
- package/src/sap/fe/core/messagebundle_zh_TW.properties +58 -7
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +231 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +67 -92
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +351 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +313 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +114 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +83 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +927 -1152
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +649 -707
- package/src/sap/fe/core/services/ShellServicesFactory.ts +52 -15
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +569 -637
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +78 -102
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +429 -478
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +460 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.ts +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +36 -48
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
- package/src/sap/fe/core/templating/DataModelPathHelper.js +97 -127
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +112 -135
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +140 -78
- package/src/sap/fe/core/templating/FilterHelper.ts +149 -78
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +2 -2
- package/src/sap/fe/core/templating/UIFormatters.js +76 -135
- package/src/sap/fe/core/templating/UIFormatters.ts +76 -99
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
- package/src/sap/fe/core/controls/filterbar.d.js +0 -8
- package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
|
@@ -14,7 +14,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
14
14
|
* Create the binding expression to check if the property is non editable or not.
|
|
15
15
|
*
|
|
16
16
|
* @param {object} oTarget The target property or DataField
|
|
17
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
17
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's non editable
|
|
18
18
|
*/
|
|
19
19
|
var isNonEditableExpression = function (oTarget) {
|
|
20
20
|
return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
|
|
@@ -23,7 +23,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
23
23
|
* Create the binding expression to check if the property is read only or not.
|
|
24
24
|
*
|
|
25
25
|
* @param {object} oTarget The target property or DataField
|
|
26
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
26
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
29
|
|
|
@@ -35,7 +35,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
35
35
|
var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations = oTarget.annotations) === null || _oTarget$annotations === void 0 ? void 0 : (_oTarget$annotations$ = _oTarget$annotations.Common) === null || _oTarget$annotations$ === void 0 ? void 0 : (_oTarget$annotations$2 = _oTarget$annotations$.FieldControl) === null || _oTarget$annotations$2 === void 0 ? void 0 : _oTarget$annotations$2.valueOf();
|
|
36
36
|
|
|
37
37
|
if (typeof oFieldControlValue === "object") {
|
|
38
|
-
return !!oFieldControlValue && equal(annotationExpression(oFieldControlValue), 1);
|
|
38
|
+
return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 1), equal(annotationExpression(oFieldControlValue), "1"));
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return oFieldControlValue === "Common.FieldControlType/ReadOnly";
|
|
@@ -44,7 +44,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
44
44
|
* Create the binding expression to check if the property is disabled or not.
|
|
45
45
|
*
|
|
46
46
|
* @param {object} oTarget The target property or DataField
|
|
47
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
47
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's disabled
|
|
48
48
|
*/
|
|
49
49
|
|
|
50
50
|
|
|
@@ -56,7 +56,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
56
56
|
var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations2 = oTarget.annotations) === null || _oTarget$annotations2 === void 0 ? void 0 : (_oTarget$annotations3 = _oTarget$annotations2.Common) === null || _oTarget$annotations3 === void 0 ? void 0 : (_oTarget$annotations4 = _oTarget$annotations3.FieldControl) === null || _oTarget$annotations4 === void 0 ? void 0 : _oTarget$annotations4.valueOf();
|
|
57
57
|
|
|
58
58
|
if (typeof oFieldControlValue === "object") {
|
|
59
|
-
return !!oFieldControlValue && equal(annotationExpression(oFieldControlValue), 0);
|
|
59
|
+
return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 0), equal(annotationExpression(oFieldControlValue), "0"));
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
return oFieldControlValue === "Common.FieldControlType/Inapplicable";
|
|
@@ -65,7 +65,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
65
65
|
* Create the binding expression to check if the property is read only or not.
|
|
66
66
|
*
|
|
67
67
|
* @param {object} oTarget The target property or DataField
|
|
68
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
68
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
|
|
69
69
|
*/
|
|
70
70
|
|
|
71
71
|
|
|
@@ -77,7 +77,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
77
77
|
var oFieldControlValue = oTarget === null || oTarget === void 0 ? void 0 : (_oTarget$annotations5 = oTarget.annotations) === null || _oTarget$annotations5 === void 0 ? void 0 : (_oTarget$annotations6 = _oTarget$annotations5.Common) === null || _oTarget$annotations6 === void 0 ? void 0 : (_oTarget$annotations7 = _oTarget$annotations6.FieldControl) === null || _oTarget$annotations7 === void 0 ? void 0 : _oTarget$annotations7.valueOf();
|
|
78
78
|
|
|
79
79
|
if (typeof oFieldControlValue === "object") {
|
|
80
|
-
return !!oFieldControlValue && equal(annotationExpression(oFieldControlValue), 7);
|
|
80
|
+
return !!oFieldControlValue && or(equal(annotationExpression(oFieldControlValue), 7), equal(annotationExpression(oFieldControlValue), "7"));
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
return oFieldControlValue === "Common.FieldControlType/Mandatory";
|
|
@@ -86,4 +86,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
|
|
|
86
86
|
_exports.isRequiredExpression = isRequiredExpression;
|
|
87
87
|
return _exports;
|
|
88
88
|
}, false);
|
|
89
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpZWxkQ29udHJvbEhlbHBlci50cyJdLCJuYW1lcyI6WyJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9UYXJnZXQiLCJvciIsImlzUmVhZE9ubHlFeHByZXNzaW9uIiwiaXNEaXNhYmxlZEV4cHJlc3Npb24iLCJvRmllbGRDb250cm9sVmFsdWUiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkZpZWxkQ29udHJvbCIsInZhbHVlT2YiLCJlcXVhbCIsImFubm90YXRpb25FeHByZXNzaW9uIiwiaXNSZXF1aXJlZEV4cHJlc3Npb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLHVCQUF1QixHQUFHLFVBQVNDLE9BQVQsRUFBNEM7QUFDbEYsV0FBT0MsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQ0YsT0FBRCxDQUFyQixFQUFnQ0csb0JBQW9CLENBQUNILE9BQUQsQ0FBcEQsQ0FBVDtBQUNBLEdBRk07QUFJUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUUsb0JBQW9CLEdBQUcsVUFBU0YsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILCtDQUFHQSxPQUFPLENBQUVLLFdBQVosa0ZBQUcscUJBQXNCQyxNQUF6QixvRkFBRyxzQkFBOEJDLFlBQWpDLDJEQUFHLHVCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLGtDQUE5QjtBQUNBLEdBWk07QUFjUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTUQsb0JBQW9CLEdBQUcsVUFBU0gsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILGdEQUFHQSxPQUFPLENBQUVLLFdBQVosbUZBQUcsc0JBQXNCQyxNQUF6QixtRkFBRyxzQkFBOEJDLFlBQWpDLDBEQUFHLHNCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLHNDQUE5QjtBQUNBLEdBWk07QUFjUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sTUFBTU8sb0JBQW9CLEdBQUcsVUFBU1gsT0FBVCxFQUF1RDtBQUFBOztBQUMxRixRQUFNSSxrQkFBa0IsR0FBR0osT0FBSCxhQUFHQSxPQUFILGdEQUFHQSxPQUFPLENBQUVLLFdBQVosbUZBQUcsc0JBQXNCQyxNQUF6QixtRkFBRyxzQkFBOEJDLFlBQWpDLDBEQUFHLHNCQUE0Q0MsT0FBNUMsRUFBM0I7O0FBQ0EsUUFBSSxPQUFPSixrQkFBUCxLQUE4QixRQUFsQyxFQUE0QztBQUMzQyxhQUNDLENBQUMsQ0FBQ0Esa0JBQUYsSUFDQUgsRUFBRSxDQUNEUSxLQUFLLENBQUNDLG9CQUFvQixDQUFDTixrQkFBRCxDQUFyQixFQUE0RSxDQUE1RSxDQURKLEVBRURLLEtBQUssQ0FBQ0Msb0JBQW9CLENBQUNOLGtCQUFELENBQXJCLEVBQTRFLEdBQTVFLENBRkosQ0FGSDtBQU9BOztBQUNELFdBQU9BLGtCQUFrQixLQUFLLG1DQUE5QjtBQUNBLEdBWk0iLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVxdWFsLCBFeHByZXNzaW9uLCBFeHByZXNzaW9uT3JQcmltaXRpdmUsIG9yLCBhbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdFeHByZXNzaW9uXCI7XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIG5vbiBlZGl0YWJsZSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9UYXJnZXQgVGhlIHRhcmdldCBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVzb2x2aW5nIHRvIGEgQm9vbGVhbiBiZWluZyB0cnVlIGlmIGl0J3Mgbm9uIGVkaXRhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG9UYXJnZXQ6IGFueSk6IEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ob1RhcmdldCksIGlzRGlzYWJsZWRFeHByZXNzaW9uKG9UYXJnZXQpKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIHJlYWQgb25seSBvciBub3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9UYXJnZXQgVGhlIHRhcmdldCBwcm9wZXJ0eSBvciBEYXRhRmllbGRcbiAqIEByZXR1cm5zIHtFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj59IFRoZSBiaW5kaW5nIGV4cHJlc3Npb24gcmVzb2x2aW5nIHRvIGEgQm9vbGVhbiBiZWluZyB0cnVlIGlmIGl0J3MgcmVhZCBvbmx5XG4gKi9cbmV4cG9ydCBjb25zdCBpc1JlYWRPbmx5RXhwcmVzc2lvbiA9IGZ1bmN0aW9uKG9UYXJnZXQ6IGFueSk6IEV4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPiB7XG5cdGNvbnN0IG9GaWVsZENvbnRyb2xWYWx1ZSA9IG9UYXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkZpZWxkQ29udHJvbD8udmFsdWVPZigpO1xuXHRpZiAodHlwZW9mIG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIW9GaWVsZENvbnRyb2xWYWx1ZSAmJlxuXHRcdFx0b3IoXG5cdFx0XHRcdGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKG9GaWVsZENvbnRyb2xWYWx1ZSkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPG51bWJlcj4sIDEpLFxuXHRcdFx0XHRlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihvRmllbGRDb250cm9sVmFsdWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxzdHJpbmc+LCBcIjFcIilcblx0XHRcdClcblx0XHQpO1xuXHR9XG5cdHJldHVybiBvRmllbGRDb250cm9sVmFsdWUgPT09IFwiQ29tbW9uLkZpZWxkQ29udHJvbFR5cGUvUmVhZE9ubHlcIjtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBiaW5kaW5nIGV4cHJlc3Npb24gdG8gY2hlY2sgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb1RhcmdldCBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHJldHVybnMge0V4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXNvbHZpbmcgdG8gYSBCb29sZWFuIGJlaW5nIHRydWUgaWYgaXQncyBkaXNhYmxlZFxuICovXG5leHBvcnQgY29uc3QgaXNEaXNhYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbihvVGFyZ2V0OiBhbnkpOiBFeHByZXNzaW9uT3JQcmltaXRpdmU8Ym9vbGVhbj4ge1xuXHRjb25zdCBvRmllbGRDb250cm9sVmFsdWUgPSBvVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5GaWVsZENvbnRyb2w/LnZhbHVlT2YoKTtcblx0aWYgKHR5cGVvZiBvRmllbGRDb250cm9sVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0ISFvRmllbGRDb250cm9sVmFsdWUgJiZcblx0XHRcdG9yKFxuXHRcdFx0XHRlcXVhbChhbm5vdGF0aW9uRXhwcmVzc2lvbihvRmllbGRDb250cm9sVmFsdWUpIGFzIEV4cHJlc3Npb25PclByaW1pdGl2ZTxudW1iZXI+LCAwKSxcblx0XHRcdFx0ZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0ZpZWxkQ29udHJvbFZhbHVlKSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8c3RyaW5nPiwgXCIwXCIpXG5cdFx0XHQpXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIkNvbW1vbi5GaWVsZENvbnRyb2xUeXBlL0luYXBwbGljYWJsZVwiO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBjaGVjayBpZiB0aGUgcHJvcGVydHkgaXMgcmVhZCBvbmx5IG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb1RhcmdldCBUaGUgdGFyZ2V0IHByb3BlcnR5IG9yIERhdGFGaWVsZFxuICogQHJldHVybnMge0V4cHJlc3Npb25PclByaW1pdGl2ZTxib29sZWFuPn0gVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXNvbHZpbmcgdG8gYSBCb29sZWFuIGJlaW5nIHRydWUgaWYgaXQncyByZWFkIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGlzUmVxdWlyZWRFeHByZXNzaW9uID0gZnVuY3Rpb24ob1RhcmdldDogYW55KTogRXhwcmVzc2lvbk9yUHJpbWl0aXZlPGJvb2xlYW4+IHtcblx0Y29uc3Qgb0ZpZWxkQ29udHJvbFZhbHVlID0gb1RhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uRmllbGRDb250cm9sPy52YWx1ZU9mKCk7XG5cdGlmICh0eXBlb2Ygb0ZpZWxkQ29udHJvbFZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCEhb0ZpZWxkQ29udHJvbFZhbHVlICYmXG5cdFx0XHRvcihcblx0XHRcdFx0ZXF1YWwoYW5ub3RhdGlvbkV4cHJlc3Npb24ob0ZpZWxkQ29udHJvbFZhbHVlKSBhcyBFeHByZXNzaW9uT3JQcmltaXRpdmU8bnVtYmVyPiwgNyksXG5cdFx0XHRcdGVxdWFsKGFubm90YXRpb25FeHByZXNzaW9uKG9GaWVsZENvbnRyb2xWYWx1ZSkgYXMgRXhwcmVzc2lvbk9yUHJpbWl0aXZlPHN0cmluZz4sIFwiN1wiKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG9GaWVsZENvbnRyb2xWYWx1ZSA9PT0gXCJDb21tb24uRmllbGRDb250cm9sVHlwZS9NYW5kYXRvcnlcIjtcbn07XG4iXX0=
|
|
@@ -4,7 +4,7 @@ import { equal, Expression, ExpressionOrPrimitive, or, annotationExpression } fr
|
|
|
4
4
|
* Create the binding expression to check if the property is non editable or not.
|
|
5
5
|
*
|
|
6
6
|
* @param {object} oTarget The target property or DataField
|
|
7
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
7
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's non editable
|
|
8
8
|
*/
|
|
9
9
|
export const isNonEditableExpression = function(oTarget: any): Expression<boolean> {
|
|
10
10
|
return or(isReadOnlyExpression(oTarget), isDisabledExpression(oTarget));
|
|
@@ -14,12 +14,18 @@ export const isNonEditableExpression = function(oTarget: any): Expression<boolea
|
|
|
14
14
|
* Create the binding expression to check if the property is read only or not.
|
|
15
15
|
*
|
|
16
16
|
* @param {object} oTarget The target property or DataField
|
|
17
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
17
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
|
|
18
18
|
*/
|
|
19
19
|
export const isReadOnlyExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
|
|
20
20
|
const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
|
|
21
21
|
if (typeof oFieldControlValue === "object") {
|
|
22
|
-
return
|
|
22
|
+
return (
|
|
23
|
+
!!oFieldControlValue &&
|
|
24
|
+
or(
|
|
25
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 1),
|
|
26
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "1")
|
|
27
|
+
)
|
|
28
|
+
);
|
|
23
29
|
}
|
|
24
30
|
return oFieldControlValue === "Common.FieldControlType/ReadOnly";
|
|
25
31
|
};
|
|
@@ -28,12 +34,18 @@ export const isReadOnlyExpression = function(oTarget: any): ExpressionOrPrimitiv
|
|
|
28
34
|
* Create the binding expression to check if the property is disabled or not.
|
|
29
35
|
*
|
|
30
36
|
* @param {object} oTarget The target property or DataField
|
|
31
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
37
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's disabled
|
|
32
38
|
*/
|
|
33
39
|
export const isDisabledExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
|
|
34
40
|
const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
|
|
35
41
|
if (typeof oFieldControlValue === "object") {
|
|
36
|
-
return
|
|
42
|
+
return (
|
|
43
|
+
!!oFieldControlValue &&
|
|
44
|
+
or(
|
|
45
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 0),
|
|
46
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "0")
|
|
47
|
+
)
|
|
48
|
+
);
|
|
37
49
|
}
|
|
38
50
|
return oFieldControlValue === "Common.FieldControlType/Inapplicable";
|
|
39
51
|
};
|
|
@@ -42,12 +54,18 @@ export const isDisabledExpression = function(oTarget: any): ExpressionOrPrimitiv
|
|
|
42
54
|
* Create the binding expression to check if the property is read only or not.
|
|
43
55
|
*
|
|
44
56
|
* @param {object} oTarget The target property or DataField
|
|
45
|
-
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a
|
|
57
|
+
* @returns {ExpressionOrPrimitive<boolean>} The binding expression resolving to a Boolean being true if it's read only
|
|
46
58
|
*/
|
|
47
59
|
export const isRequiredExpression = function(oTarget: any): ExpressionOrPrimitive<boolean> {
|
|
48
60
|
const oFieldControlValue = oTarget?.annotations?.Common?.FieldControl?.valueOf();
|
|
49
61
|
if (typeof oFieldControlValue === "object") {
|
|
50
|
-
return
|
|
62
|
+
return (
|
|
63
|
+
!!oFieldControlValue &&
|
|
64
|
+
or(
|
|
65
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<number>, 7),
|
|
66
|
+
equal(annotationExpression(oFieldControlValue) as ExpressionOrPrimitive<string>, "7")
|
|
67
|
+
)
|
|
68
|
+
);
|
|
51
69
|
}
|
|
52
70
|
return oFieldControlValue === "Common.FieldControlType/Mandatory";
|
|
53
71
|
};
|
|
@@ -6,7 +6,6 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var createCondition = Condition.createCondition;
|
|
10
9
|
|
|
11
10
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
12
11
|
|
|
@@ -29,6 +28,30 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
29
28
|
"NE": "EQ",
|
|
30
29
|
"EQ": "NE"
|
|
31
30
|
};
|
|
31
|
+
|
|
32
|
+
function _getDateTimeOffsetCompliantValue(sValue) {
|
|
33
|
+
var oValue;
|
|
34
|
+
|
|
35
|
+
if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})\+(\d{1,4})/)) {
|
|
36
|
+
oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})\+(\d{1,4})/)[0];
|
|
37
|
+
} else if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})/)) {
|
|
38
|
+
oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})T(\d{1,2}):(\d{1,2}):(\d{1,2})/)[0] + "+0000";
|
|
39
|
+
} else if (sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)) {
|
|
40
|
+
oValue = sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)[0] + "T00:00:00+0000";
|
|
41
|
+
} else if (sValue.indexOf("Z") === sValue.length - 1) {
|
|
42
|
+
oValue = sValue.split("Z")[0] + "+0100";
|
|
43
|
+
} else {
|
|
44
|
+
oValue = undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return oValue;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_exports._getDateTimeOffsetCompliantValue = _getDateTimeOffsetCompliantValue;
|
|
51
|
+
|
|
52
|
+
function _getDateCompliantValue(sValue) {
|
|
53
|
+
return sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/) ? sValue.match(/^(\d{4})-(\d{1,2})-(\d{1,2})/)[0] : sValue.match(/^(\d{8})/) && sValue.match(/^(\d{8})/)[0];
|
|
54
|
+
}
|
|
32
55
|
/**
|
|
33
56
|
* Method to get the compliant value type based on the data type.
|
|
34
57
|
*
|
|
@@ -37,38 +60,51 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
37
60
|
* @returns Value to be propagated to the condition.
|
|
38
61
|
*/
|
|
39
62
|
|
|
63
|
+
|
|
64
|
+
_exports._getDateCompliantValue = _getDateCompliantValue;
|
|
65
|
+
|
|
40
66
|
function getTypeCompliantValue(sValue, sType) {
|
|
41
67
|
var oValue;
|
|
42
68
|
|
|
43
|
-
if (aValidTypes.indexOf(sType)
|
|
44
|
-
|
|
69
|
+
if (aValidTypes.indexOf(sType) === -1) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
oValue = sValue;
|
|
45
74
|
|
|
46
|
-
|
|
75
|
+
switch (sType) {
|
|
76
|
+
case "Edm.Boolean":
|
|
47
77
|
oValue = sValue === "true" || (sValue === "false" ? false : undefined);
|
|
48
|
-
|
|
78
|
+
break;
|
|
79
|
+
|
|
80
|
+
case "Edm.Double":
|
|
81
|
+
case "Edm.Single":
|
|
49
82
|
oValue = isNaN(sValue) ? undefined : parseFloat(sValue);
|
|
50
|
-
|
|
83
|
+
break;
|
|
84
|
+
|
|
85
|
+
case "Edm.Byte":
|
|
86
|
+
case "Edm.Int16":
|
|
87
|
+
case "Edm.Int32":
|
|
88
|
+
case "Edm.SByte":
|
|
51
89
|
oValue = isNaN(sValue) ? undefined : parseInt(sValue, 10);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
} else {
|
|
64
|
-
oValue = undefined;
|
|
65
|
-
}
|
|
66
|
-
} else if (sType === "Edm.TimeOfDay") {
|
|
90
|
+
break;
|
|
91
|
+
|
|
92
|
+
case "Edm.Date":
|
|
93
|
+
oValue = _getDateCompliantValue(sValue);
|
|
94
|
+
break;
|
|
95
|
+
|
|
96
|
+
case "Edm.DateTimeOffset":
|
|
97
|
+
oValue = _getDateTimeOffsetCompliantValue(sValue);
|
|
98
|
+
break;
|
|
99
|
+
|
|
100
|
+
case "Edm.TimeOfDay":
|
|
67
101
|
oValue = sValue.match(/(\d{1,2}):(\d{1,2}):(\d{1,2})/) ? sValue.match(/(\d{1,2}):(\d{1,2}):(\d{1,2})/)[0] : undefined;
|
|
68
|
-
|
|
102
|
+
break;
|
|
103
|
+
|
|
104
|
+
default:
|
|
69
105
|
}
|
|
70
106
|
|
|
71
|
-
return oValue;
|
|
107
|
+
return oValue === null ? undefined : oValue;
|
|
72
108
|
}
|
|
73
109
|
/**
|
|
74
110
|
* Method to create a condition.
|
|
@@ -176,55 +212,81 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
176
212
|
|
|
177
213
|
_exports.getOperator = getOperator;
|
|
178
214
|
|
|
179
|
-
function
|
|
180
|
-
var
|
|
215
|
+
function _buildConditionsFromSelectionRanges(Ranges, oProperty, sPropertyName, getCustomConditions) {
|
|
216
|
+
var aConditions = [];
|
|
217
|
+
Ranges === null || Ranges === void 0 ? void 0 : Ranges.forEach(function (Range) {
|
|
218
|
+
var oCondition = getCustomConditions ? getCustomConditions(Range, oProperty, sPropertyName) : getConditions(Range, oProperty);
|
|
181
219
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
var oCondition = getCustomConditions ? {
|
|
211
|
-
operator: "EQ",
|
|
212
|
-
value1: parameter.PropertyValue,
|
|
213
|
-
value2: null,
|
|
214
|
-
path: sPropertyPath,
|
|
215
|
-
isParameter: true
|
|
216
|
-
} : {
|
|
217
|
-
operator: "EQ",
|
|
218
|
-
values: [parameter.PropertyValue],
|
|
219
|
-
isEmpty: null,
|
|
220
|
-
validated: ConditionValidated.Validated,
|
|
221
|
-
isParameter: true
|
|
222
|
-
};
|
|
223
|
-
ofilterConditions[sPropertyPath] = [oCondition];
|
|
224
|
-
});
|
|
220
|
+
if (oCondition) {
|
|
221
|
+
aConditions.push(oCondition);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return aConditions;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function _getProperty(propertyName, metaModel, entitySetPath) {
|
|
228
|
+
var lastSlashIndex = propertyName.lastIndexOf("/");
|
|
229
|
+
var navigationPath = lastSlashIndex > -1 ? propertyName.substring(0, propertyName.lastIndexOf("/") + 1) : "";
|
|
230
|
+
var collection = metaModel.getObject(entitySetPath + "/" + navigationPath);
|
|
231
|
+
return collection === null || collection === void 0 ? void 0 : collection[propertyName.replace(navigationPath, "")];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function _buildFiltersConditionsFromSelectOption(selectOption, metaModel, entitySetPath, getCustomConditions) {
|
|
235
|
+
var propertyName = selectOption.PropertyName,
|
|
236
|
+
filterConditions = {},
|
|
237
|
+
propertyPath = propertyName.value || propertyName.$PropertyPath,
|
|
238
|
+
Ranges = selectOption.Ranges;
|
|
239
|
+
|
|
240
|
+
var targetProperty = _getProperty(propertyPath, metaModel, entitySetPath);
|
|
241
|
+
|
|
242
|
+
if (targetProperty) {
|
|
243
|
+
var conditions = _buildConditionsFromSelectionRanges(Ranges, targetProperty, propertyPath, getCustomConditions);
|
|
244
|
+
|
|
245
|
+
if (conditions.length) {
|
|
246
|
+
filterConditions[propertyPath] = (filterConditions[propertyPath] || []).concat(conditions);
|
|
247
|
+
}
|
|
225
248
|
}
|
|
226
249
|
|
|
227
|
-
return
|
|
250
|
+
return filterConditions;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function getFiltersConditionsFromSelectionVariant(sEntitySetPath, oMetaModel, selectionVariant, getCustomConditions) {
|
|
254
|
+
var oFilterConditions = {};
|
|
255
|
+
|
|
256
|
+
if (!selectionVariant) {
|
|
257
|
+
return oFilterConditions;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
var aSelectOptions = selectionVariant.SelectOptions,
|
|
261
|
+
aParameters = selectionVariant.Parameters;
|
|
262
|
+
aSelectOptions === null || aSelectOptions === void 0 ? void 0 : aSelectOptions.forEach(function (selectOption) {
|
|
263
|
+
var propertyName = selectOption.PropertyName,
|
|
264
|
+
sPropertyName = propertyName.value || propertyName.$PropertyPath;
|
|
265
|
+
|
|
266
|
+
if (Object.keys(oFilterConditions).includes(sPropertyName)) {
|
|
267
|
+
oFilterConditions[sPropertyName] = oFilterConditions[sPropertyName].concat(_buildFiltersConditionsFromSelectOption(selectOption, oMetaModel, sEntitySetPath, getCustomConditions)[sPropertyName]);
|
|
268
|
+
} else {
|
|
269
|
+
oFilterConditions = _objectSpread(_objectSpread({}, oFilterConditions), _buildFiltersConditionsFromSelectOption(selectOption, oMetaModel, sEntitySetPath, getCustomConditions));
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
aParameters === null || aParameters === void 0 ? void 0 : aParameters.forEach(function (parameter) {
|
|
273
|
+
var sPropertyPath = parameter.PropertyName.value || parameter.PropertyName.$PropertyPath;
|
|
274
|
+
var oCondition = getCustomConditions ? {
|
|
275
|
+
operator: "EQ",
|
|
276
|
+
value1: parameter.PropertyValue,
|
|
277
|
+
value2: null,
|
|
278
|
+
path: sPropertyPath,
|
|
279
|
+
isParameter: true
|
|
280
|
+
} : {
|
|
281
|
+
operator: "EQ",
|
|
282
|
+
values: [parameter.PropertyValue],
|
|
283
|
+
isEmpty: null,
|
|
284
|
+
validated: ConditionValidated.Validated,
|
|
285
|
+
isParameter: true
|
|
286
|
+
};
|
|
287
|
+
oFilterConditions[sPropertyPath] = [oCondition];
|
|
288
|
+
});
|
|
289
|
+
return oFilterConditions;
|
|
228
290
|
}
|
|
229
291
|
|
|
230
292
|
_exports.getFiltersConditionsFromSelectionVariant = getFiltersConditionsFromSelectionVariant;
|
|
@@ -233,12 +295,12 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
233
295
|
var oCondition;
|
|
234
296
|
var sign = Range.Sign;
|
|
235
297
|
var sOption = Range.Option ? getOperator(Range.Option) : undefined;
|
|
236
|
-
var oValue1 = getTypeCompliantValue(Range.Low, oValidProperty.$Type);
|
|
237
|
-
var oValue2 = Range.High ? getTypeCompliantValue(Range.High, oValidProperty.$Type) : undefined;
|
|
298
|
+
var oValue1 = getTypeCompliantValue(Range.Low, oValidProperty.$Type || oValidProperty.type);
|
|
299
|
+
var oValue2 = Range.High ? getTypeCompliantValue(Range.High, oValidProperty.$Type || oValidProperty.type) : undefined;
|
|
238
300
|
var oConditionValues = resolveConditionValues(sOption, oValue1, oValue2, sign);
|
|
239
301
|
|
|
240
302
|
if (oConditionValues) {
|
|
241
|
-
oCondition = createCondition(oConditionValues.operator, oConditionValues.values, null, null, ConditionValidated.Validated);
|
|
303
|
+
oCondition = Condition.createCondition(oConditionValues.operator, oConditionValues.values, null, null, ConditionValidated.Validated);
|
|
242
304
|
}
|
|
243
305
|
|
|
244
306
|
return oCondition;
|
|
@@ -257,7 +319,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
257
319
|
|
|
258
320
|
if (defaultFilterValue !== undefined) {
|
|
259
321
|
var PropertyName = key;
|
|
260
|
-
filterConditions[PropertyName] = [createCondition("EQ", [defaultFilterValue], null, null, ConditionValidated.Validated)];
|
|
322
|
+
filterConditions[PropertyName] = [Condition.createCondition("EQ", [defaultFilterValue], null, null, ConditionValidated.Validated)];
|
|
261
323
|
}
|
|
262
324
|
}
|
|
263
325
|
}
|
|
@@ -272,7 +334,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
272
334
|
for (var key in properties) {
|
|
273
335
|
// currently defaultSemanticDates can support only one entry, we pick the first one directly using 0 index
|
|
274
336
|
if (defaultSemanticDates[key] && defaultSemanticDates[key][0]) {
|
|
275
|
-
filterConditions[key] = [createCondition(defaultSemanticDates[key][0].operator, [], null, null, null)];
|
|
337
|
+
filterConditions[key] = [Condition.createCondition(defaultSemanticDates[key][0].operator, [], null, null, null)];
|
|
276
338
|
}
|
|
277
339
|
}
|
|
278
340
|
}
|
|
@@ -282,7 +344,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
282
344
|
|
|
283
345
|
function getEditStatusFilter() {
|
|
284
346
|
var ofilterConditions = {};
|
|
285
|
-
ofilterConditions["$editState"] = [createCondition("DRAFT_EDIT_STATE", ["ALL"], null, null, ConditionValidated.Validated)];
|
|
347
|
+
ofilterConditions["$editState"] = [Condition.createCondition("DRAFT_EDIT_STATE", ["ALL"], null, null, ConditionValidated.Validated)];
|
|
286
348
|
return ofilterConditions;
|
|
287
349
|
}
|
|
288
350
|
|
|
@@ -305,7 +367,7 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
305
367
|
var defaultSemanticDateFilters = getDefaultSemanticDateFilters(oContext, entityTypeProperties, defaultSemanticDates);
|
|
306
368
|
|
|
307
369
|
if (selectionVariant) {
|
|
308
|
-
filterConditions = getFiltersConditionsFromSelectionVariant(
|
|
370
|
+
filterConditions = getFiltersConditionsFromSelectionVariant(entitySetPath, oMetaModel, selectionVariant);
|
|
309
371
|
} else if (defaultFilters) {
|
|
310
372
|
filterConditions = defaultFilters;
|
|
311
373
|
}
|
|
@@ -321,11 +383,11 @@ sap.ui.define(["sap/ui/mdc/condition/Condition", "sap/ui/mdc/enum/ConditionValid
|
|
|
321
383
|
filterConditions = _objectSpread(_objectSpread({}, filterConditions), editStateFilter);
|
|
322
384
|
}
|
|
323
385
|
|
|
324
|
-
return Object.keys(filterConditions).length > 0 ? JSON.stringify(filterConditions) : undefined;
|
|
386
|
+
return Object.keys(filterConditions).length > 0 ? JSON.stringify(filterConditions).replace(/([\{\}])/g, "\\$1") : undefined;
|
|
325
387
|
}
|
|
326
388
|
|
|
327
389
|
_exports.getFilterConditions = getFilterConditions;
|
|
328
390
|
getFilterConditions.requiresIContext = true;
|
|
329
391
|
return _exports;
|
|
330
392
|
}, false);
|
|
331
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiZ2V0VHlwZUNvbXBsaWFudFZhbHVlIiwic1ZhbHVlIiwic1R5cGUiLCJvVmFsdWUiLCJpbmRleE9mIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwicGFyc2VJbnQiLCJtYXRjaCIsImxlbmd0aCIsInNwbGl0IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50IiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJzZWxlY3Rpb25WYXJpYW50IiwiZ2V0Q3VzdG9tQ29uZGl0aW9ucyIsIm9maWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiYVZhbGlkUHJvcGVydGllcyIsImZvckVhY2giLCJzZWxlY3RPcHRpb24iLCJwcm9wZXJ0eU5hbWUiLCJQcm9wZXJ0eU5hbWUiLCJzUHJvcGVydHlOYW1lIiwidmFsdWUiLCIkUHJvcGVydHlQYXRoIiwiUmFuZ2VzIiwia2V5Iiwib1ZhbGlkUHJvcGVydHkiLCJhQ29uZGl0aW9ucyIsIlJhbmdlIiwiZ2V0Q29uZGl0aW9ucyIsImNvbmNhdCIsInBhcmFtZXRlciIsInNQcm9wZXJ0eVBhdGgiLCJ2YWx1ZTEiLCJQcm9wZXJ0eVZhbHVlIiwidmFsdWUyIiwicGF0aCIsImlzUGFyYW1ldGVyIiwidmFsaWRhdGVkIiwiQ29uZGl0aW9uVmFsaWRhdGVkIiwiVmFsaWRhdGVkIiwic2lnbiIsIlNpZ24iLCJPcHRpb24iLCJvVmFsdWUxIiwiTG93IiwiJFR5cGUiLCJIaWdoIiwib0NvbmRpdGlvblZhbHVlcyIsImNyZWF0ZUNvbmRpdGlvbiIsImdldERlZmF1bHRWYWx1ZUZpbHRlcnMiLCJvQ29udGV4dCIsInByb3BlcnRpZXMiLCJmaWx0ZXJDb25kaXRpb25zIiwiZW50aXR5U2V0UGF0aCIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJvTWV0YU1vZGVsIiwiZ2V0TW9kZWwiLCJkZWZhdWx0RmlsdGVyVmFsdWUiLCJnZXRPYmplY3QiLCJnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVzIiwiZ2V0RWRpdFN0YXR1c0ZpbHRlciIsImdldEZpbHRlckNvbmRpdGlvbnMiLCJlZGl0U3RhdGVGaWx0ZXIiLCJlbnRpdHlUeXBlQW5ub3RhdGlvbnMiLCJkZWZhdWx0RmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXF1aXJlc0lDb250ZXh0Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBU0EsTUFBTUEsV0FBVyxHQUFHLENBQ25CLGFBRG1CLEVBRW5CLFVBRm1CLEVBR25CLFVBSG1CLEVBSW5CLGNBSm1CLEVBS25CLG9CQUxtQixFQU1uQixhQU5tQixFQU9uQixZQVBtQixFQVFuQixXQVJtQixFQVNuQixVQVRtQixFQVVuQixXQVZtQixFQVduQixXQVhtQixFQVluQixXQVptQixFQWFuQixXQWJtQixFQWNuQixZQWRtQixFQWVuQixZQWZtQixFQWdCbkIsVUFoQm1CLEVBaUJuQixlQWpCbUIsQ0FBcEI7QUFvQkEsTUFBTUMsV0FBZ0MsR0FBRztBQUN4QyxnQkFBWSxhQUQ0QjtBQUV4QyxrQkFBYyxlQUYwQjtBQUd4QyxnQkFBWSxhQUg0QjtBQUl4QyxhQUFTLFVBSitCO0FB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R0FBdUMsSUFBdkMiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdE9wdGlvblR5cGUsIFNlbGVjdGlvblZhcmlhbnRUeXBlVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbmRpdGlvbiB9IGZyb20gXCJzYXAvdWkvbWRjL2NvbmRpdGlvbi9Db25kaXRpb25cIjtcbmltcG9ydCB7IENvbmRpdGlvblZhbGlkYXRlZCB9IGZyb20gXCJzYXAvdWkvbWRjL2VudW1cIjtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQ29uZGl0aW9ucyA9IHtcblx0b3BlcmF0b3I6IHN0cmluZztcblx0dmFsdWVzOiBBcnJheTxzdHJpbmc+O1xuXHRpc0VtcHR5PzogYm9vbGVhbiB8IG51bGw7XG5cdHZhbGlkYXRlZD86IHN0cmluZztcbn07XG5cbmNvbnN0IGFWYWxpZFR5cGVzID0gW1xuXHRcIkVkbS5Cb29sZWFuXCIsXG5cdFwiRWRtLkJ5dGVcIixcblx0XCJFZG0uRGF0ZVwiLFxuXHRcIkVkbS5EYXRlVGltZVwiLFxuXHRcIkVkbS5EYXRlVGltZU9mZnNldFwiLFxuXHRcIkVkbS5EZWNpbWFsXCIsXG5cdFwiRWRtLkRvdWJsZVwiLFxuXHRcIkVkbS5GbG9hdFwiLFxuXHRcIkVkbS5HdWlkXCIsXG5cdFwiRWRtLkludDE2XCIsXG5cdFwiRWRtLkludDMyXCIsXG5cdFwiRWRtLkludDY0XCIsXG5cdFwiRWRtLlNCeXRlXCIsXG5cdFwiRWRtLlNpbmdsZVwiLFxuXHRcIkVkbS5TdHJpbmdcIixcblx0XCJFZG0uVGltZVwiLFxuXHRcIkVkbS5UaW1lT2ZEYXlcIlxuXTtcblxuY29uc3Qgb0V4Y2x1ZGVNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG5cdFwiQ29udGFpbnNcIjogXCJOb3RDb250YWluc1wiLFxuXHRcIlN0YXJ0c1dpdGhcIjogXCJOb3RTdGFydHNXaXRoXCIsXG5cdFwiRW5kc1dpdGhcIjogXCJOb3RFbmRzV2l0aFwiLFxuXHRcIkVtcHR5XCI6IFwiTm90RW1wdHlcIixcblx0XCJOb3RFbXB0eVwiOiBcIkVtcHR5XCIsXG5cdFwiTEVcIjogXCJOT1RMRVwiLFxuXHRcIkdFXCI6IFwiTk9UR0VcIixcblx0XCJMVFwiOiBcIk5PVExUXCIsXG5cdFwiR1RcIjogXCJOT1RHVFwiLFxuXHRcIkJUXCI6IFwiTk9UQlRcIixcblx0XCJORVwiOiBcIkVRXCIsXG5cdFwiRVFcIjogXCJORVwiXG59O1xuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGNvbXBsaWFudCB2YWx1ZSB0eXBlIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuXG4gKlxuICogQHBhcmFtICBzVmFsdWUgUmF3IHZhbHVlXG4gKiBAcGFyYW0gIHNUeXBlIFRoZSBwcm9wZXJ0eSB0eXBlXG4gKiBAcmV0dXJucyBWYWx1ZSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSwgc1R5cGU6IHN0cmluZykge1xuXHRsZXQgb1ZhbHVlO1xuXHRpZiAoYVZhbGlkVHlwZXMuaW5kZXhPZihzVHlwZSkgPiAtMSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZTtcblx0XHRpZiAoc1R5cGUgPT09IFwiRWRtLkJvb2xlYW5cIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlID09PSBcInRydWVcIiB8fCAoc1ZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uRG91YmxlXCIgfHwgc1R5cGUgPT09IFwiRWRtLlNpbmdsZVwiKSB7XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VGbG9hdChzVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkJ5dGVcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MTZcIiB8fCBzVHlwZSA9PT0gXCJFZG0uSW50MzJcIiB8fCBzVHlwZSA9PT0gXCJFZG0uU0J5dGVcIikge1xuXHRcdFx0b1ZhbHVlID0gaXNOYU4oc1ZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlSW50KHNWYWx1ZSwgMTApO1xuXHRcdH0gZWxzZSBpZiAoc1R5cGUgPT09IFwiRWRtLkRhdGVcIikge1xuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylcblx0XHRcdFx0PyBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXVxuXHRcdFx0XHQ6IHNWYWx1ZS5tYXRjaCgvXihcXGR7OH0pLykgJiYgc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKVswXTtcblx0XHR9IGVsc2UgaWYgKHNUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pXFwrKFxcZHsxLDR9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKVswXTtcblx0XHRcdH0gZWxzZSBpZiAoc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLykpIHtcblx0XHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pVChcXGR7MSwyfSk6KFxcZHsxLDJ9KTooXFxkezEsMn0pLylbMF0gKyBcIiswMDAwXCI7XG5cdFx0XHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pWzBdICsgXCJUMDA6MDA6MDArMDAwMFwiO1xuXHRcdFx0fSBlbHNlIGlmIChzVmFsdWUuaW5kZXhPZihcIlpcIikgPT09IHNWYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5zcGxpdChcIlpcIilbMF0gKyBcIiswMTAwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvVmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChzVHlwZSA9PT0gXCJFZG0uVGltZU9mRGF5XCIpIHtcblx0XHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSA/IHNWYWx1ZS5tYXRjaCgvKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKVswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG9WYWx1ZTtcbn1cblxuLyoqXG4gKiBNZXRob2QgdG8gY3JlYXRlIGEgY29uZGl0aW9uLlxuICogQHBhcmFtICBzT3B0aW9uIE9wZXJhdG9yIHRvIGJlIHVzZWQuXG4gKiBAcGFyYW0gIG9WMSBMb3dlciB2YWx1ZVxuICogQHBhcmFtICBvVjIgSGlnaGVyIHZhbHVlXG4gKiBAcGFyYW0gc1NpZ25cbiAqIEByZXR1cm5zIENvbmRpdGlvbiB0byBiZSBjcmVhdGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCwgb1YxOiBhbnksIG9WMjogYW55LCBzU2lnbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdGxldCBvVmFsdWUgPSBvVjEsXG5cdFx0b1ZhbHVlMixcblx0XHRzSW50ZXJuYWxPcGVyYXRpb246IGFueTtcblx0Y29uc3Qgb0NvbmRpdGlvbjogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtdO1xuXHRvQ29uZGl0aW9uLmlzRW1wdHkgPSBudWxsIGFzIGFueTtcblx0aWYgKG9WMSA9PT0gdW5kZWZpbmVkIHx8IG9WMSA9PT0gbnVsbCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoc09wdGlvbikge1xuXHRcdGNhc2UgXCJDUFwiOlxuXHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJDb250YWluc1wiO1xuXHRcdFx0aWYgKG9WYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBuSW5kZXhPZiA9IG9WYWx1ZS5pbmRleE9mKFwiKlwiKTtcblx0XHRcdFx0Y29uc3Qgbkxhc3RJbmRleCA9IG9WYWx1ZS5sYXN0SW5kZXhPZihcIipcIik7XG5cblx0XHRcdFx0Ly8gb25seSB3aGVuIHRoZXJlIGFyZSAnKicgYXQgYWxsXG5cdFx0XHRcdGlmIChuSW5kZXhPZiA+IC0xKSB7XG5cdFx0XHRcdFx0aWYgKG5JbmRleE9mID09PSAwICYmIG5MYXN0SW5kZXggIT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIkVuZHNXaXRoXCI7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobkluZGV4T2YgIT09IDAgJiYgbkxhc3RJbmRleCA9PT0gb1ZhbHVlLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiU3RhcnRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygwLCBvVmFsdWUubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMSwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvKiBUT0RPIEFkZCBkaWFnb25vc3RpY3MgTG9nLndhcm5pbmcoXCJDb250YWlucyBPcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAnKicuXCIpICovXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiRW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9WMSA9PT0gXCJcIiA/IFwiTm90RW1wdHlcIiA6IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdGlmIChvVjIgPT09IHVuZGVmaW5lZCB8fCBvVjIgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0b1ZhbHVlMiA9IG9WMjtcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiTEVcIjpcblx0XHRjYXNlIFwiR0VcIjpcblx0XHRjYXNlIFwiR1RcIjpcblx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IHNPcHRpb247XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiU2VsZWN0aW9uIE9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIDogJ1wiICsgc09wdGlvbiArIFwiJ1wiKTsgKi9cblx0XHRcdHJldHVybjtcblx0fVxuXHRpZiAoc1NpZ24gPT09IFwiRVwiKSB7XG5cdFx0c0ludGVybmFsT3BlcmF0aW9uID0gb0V4Y2x1ZGVNYXBbc0ludGVybmFsT3BlcmF0aW9uXTtcblx0fVxuXHRvQ29uZGl0aW9uLm9wZXJhdG9yID0gc0ludGVybmFsT3BlcmF0aW9uO1xuXHRpZiAoc0ludGVybmFsT3BlcmF0aW9uICE9PSBcIkVtcHR5XCIpIHtcblx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZSk7XG5cdFx0aWYgKG9WYWx1ZTIpIHtcblx0XHRcdG9Db25kaXRpb24udmFsdWVzLnB1c2gob1ZhbHVlMik7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvQ29uZGl0aW9uO1xufVxuXG4vKiBNZXRob2QgdG8gZ2V0IHRoZSBvcGVyYXRvciBmcm9tIHRoZSBTZWxlY3Rpb24gT3B0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3BlcmF0b3Ioc09wZXJhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gc09wZXJhdG9yLmluZGV4T2YoXCIvXCIpID4gMCA/IHNPcGVyYXRvci5zcGxpdChcIi9cIilbMV0gOiBzT3BlcmF0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KFxuXHRlbnRpdHlUeXBlUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgb2JqZWN0Pixcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRjb25zdCBhU2VsZWN0T3B0aW9ucyA9IHNlbGVjdGlvblZhcmlhbnQuU2VsZWN0T3B0aW9ucztcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IHNlbGVjdGlvblZhcmlhbnQuUGFyYW1ldGVycztcblx0XHRjb25zdCBhVmFsaWRQcm9wZXJ0aWVzID0gZW50aXR5VHlwZVByb3BlcnRpZXM7XG5cdFx0YVNlbGVjdE9wdGlvbnM/LmZvckVhY2goKHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSkgPT4ge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lO1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5TmFtZTogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlIHx8IHByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3QgUmFuZ2VzOiBhbnkgPSBzZWxlY3RPcHRpb24uUmFuZ2VzO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gYVZhbGlkUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoc1Byb3BlcnR5TmFtZSA9PT0ga2V5KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1ZhbGlkUHJvcGVydHkgPSBhVmFsaWRQcm9wZXJ0aWVzW2tleV0gYXMgYW55O1xuXHRcdFx0XHRcdGNvbnN0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuXHRcdFx0XHRcdFJhbmdlcz8uZm9yRWFjaCgoUmFuZ2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbiA9IGdldEN1c3RvbUNvbmRpdGlvbnNcblx0XHRcdFx0XHRcdFx0PyBnZXRDdXN0b21Db25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSwgc1Byb3BlcnR5TmFtZSlcblx0XHRcdFx0XHRcdFx0OiBnZXRDb25kaXRpb25zKFJhbmdlLCBvVmFsaWRQcm9wZXJ0eSk7XG5cdFx0XHRcdFx0XHRhQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdFx0XHRcdFx0aWYgKGFDb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSA9IChvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlOYW1lXSB8fCBbXSkuY29uY2F0KGFDb25kaXRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGFQYXJhbWV0ZXJzPy5mb3JFYWNoKChwYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUudmFsdWUgfHwgcGFyYW1ldGVyLlByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdFx0Y29uc3Qgb0NvbmRpdGlvbjogYW55ID0gZ2V0Q3VzdG9tQ29uZGl0aW9uc1xuXHRcdFx0XHQ/IHsgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiBwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZSwgdmFsdWUyOiBudWxsLCBwYXRoOiBzUHJvcGVydHlQYXRoLCBpc1BhcmFtZXRlcjogdHJ1ZSB9XG5cdFx0XHRcdDoge1xuXHRcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIixcblx0XHRcdFx0XHRcdHZhbHVlczogW3BhcmFtZXRlci5Qcm9wZXJ0eVZhbHVlXSxcblx0XHRcdFx0XHRcdGlzRW1wdHk6IG51bGwsXG5cdFx0XHRcdFx0XHR2YWxpZGF0ZWQ6IENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQsXG5cdFx0XHRcdFx0XHRpc1BhcmFtZXRlcjogdHJ1ZVxuXHRcdFx0XHQgIH07XG5cdFx0XHRvZmlsdGVyQ29uZGl0aW9uc1tzUHJvcGVydHlQYXRoXSA9IFtvQ29uZGl0aW9uXTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gb2ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25kaXRpb25zKFJhbmdlOiBhbnksIG9WYWxpZFByb3BlcnR5OiBhbnkpIHtcblx0bGV0IG9Db25kaXRpb247XG5cdGNvbnN0IHNpZ246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLlNpZ247XG5cdGNvbnN0IHNPcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IFJhbmdlLk9wdGlvbiA/IGdldE9wZXJhdG9yKFJhbmdlLk9wdGlvbikgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9WYWx1ZTE6IGFueSA9IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5Mb3csIG9WYWxpZFByb3BlcnR5LiRUeXBlKTtcblx0Y29uc3Qgb1ZhbHVlMjogYW55ID0gUmFuZ2UuSGlnaCA/IGdldFR5cGVDb21wbGlhbnRWYWx1ZShSYW5nZS5IaWdoLCBvVmFsaWRQcm9wZXJ0eS4kVHlwZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Db25kaXRpb25WYWx1ZXMgPSByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb24sIG9WYWx1ZTEsIG9WYWx1ZTIsIHNpZ24pIGFzIGFueTtcblx0aWYgKG9Db25kaXRpb25WYWx1ZXMpIHtcblx0XHRvQ29uZGl0aW9uID0gY3JlYXRlQ29uZGl0aW9uKG9Db25kaXRpb25WYWx1ZXMub3BlcmF0b3IsIG9Db25kaXRpb25WYWx1ZXMudmFsdWVzLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKTtcblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuY29uc3QgZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyA9IGZ1bmN0aW9uKG9Db250ZXh0OiBhbnksIHByb3BlcnRpZXM6IGFueSk6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKTtcblx0aWYgKHByb3BlcnRpZXMpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0RmlsdGVyVmFsdWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChcblx0XHRcdFx0ZW50aXR5U2V0UGF0aCArIFwiL1wiICsga2V5ICsgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpbHRlckRlZmF1bHRWYWx1ZVwiXG5cdFx0XHQpO1xuXHRcdFx0aWYgKGRlZmF1bHRGaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IFByb3BlcnR5TmFtZSA9IGtleTtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1tQcm9wZXJ0eU5hbWVdID0gW1xuXHRcdFx0XHRcdGNyZWF0ZUNvbmRpdGlvbihcIkVRXCIsIFtkZWZhdWx0RmlsdGVyVmFsdWVdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuY29uc3QgZ2V0RGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBmdW5jdGlvbihcblx0b0NvbnRleHQ6IGFueSxcblx0cHJvcGVydGllczogYW55LFxuXHRkZWZhdWx0U2VtYW50aWNEYXRlczogYW55XG4pOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRpZiAocHJvcGVydGllcykge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHByb3BlcnRpZXMpIHtcblx0XHRcdC8vIGN1cnJlbnRseSBkZWZhdWx0U2VtYW50aWNEYXRlcyBjYW4gc3VwcG9ydCBvbmx5IG9uZSBlbnRyeSwgd2UgcGljayB0aGUgZmlyc3Qgb25lIGRpcmVjdGx5IHVzaW5nIDAgaW5kZXhcblx0XHRcdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldICYmIGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV1bMF0pIHtcblx0XHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1trZXldID0gW2NyZWF0ZUNvbmRpdGlvbihkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdLm9wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgbnVsbCkgYXMgRmlsdGVyQ29uZGl0aW9uc107XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmaWx0ZXJDb25kaXRpb25zO1xufTtcblxuZnVuY3Rpb24gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3Qgb2ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b2ZpbHRlckNvbmRpdGlvbnNbXCIkZWRpdFN0YXRlXCJdID0gW1xuXHRcdGNyZWF0ZUNvbmRpdGlvbihcIkRSQUZUX0VESVRfU1RBVEVcIiwgW1wiQUxMXCJdLCBudWxsLCBudWxsLCBDb25kaXRpb25WYWxpZGF0ZWQuVmFsaWRhdGVkKSBhcyBGaWx0ZXJDb25kaXRpb25zXG5cdF07XG5cdHJldHVybiBvZmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlckNvbmRpdGlvbnMob0NvbnRleHQ6IGFueSwgZmlsdGVyQ29uZGl0aW9uczogYW55KTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGxldCBlZGl0U3RhdGVGaWx0ZXI7XG5cdGNvbnN0IGVudGl0eVNldFBhdGggPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0UGF0aCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRJbnRlcmZhY2UoMSkuZ2V0TW9kZWwoKSxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCJAXCIpLFxuXHRcdGVudGl0eVR5cGVQcm9wZXJ0aWVzID0gb01ldGFNb2RlbC5nZXRPYmplY3QoZW50aXR5U2V0UGF0aCArIFwiL1wiKTtcblx0aWYgKFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290XCJdIHx8XG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdE5vZGVcIl1cblx0KSB7XG5cdFx0ZWRpdFN0YXRlRmlsdGVyID0gZ2V0RWRpdFN0YXR1c0ZpbHRlcigpO1xuXHR9XG5cdGNvbnN0IHNlbGVjdGlvblZhcmlhbnQgPSBmaWx0ZXJDb25kaXRpb25zPy5zZWxlY3Rpb25WYXJpYW50O1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlcyA9IGZpbHRlckNvbmRpdGlvbnM/LmRlZmF1bHRTZW1hbnRpY0RhdGVzIHx8IHt9O1xuXHRjb25zdCBkZWZhdWx0RmlsdGVycyA9IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMob0NvbnRleHQsIGVudGl0eVR5cGVQcm9wZXJ0aWVzKTtcblx0Y29uc3QgZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgPSBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyhvQ29udGV4dCwgZW50aXR5VHlwZVByb3BlcnRpZXMsIGRlZmF1bHRTZW1hbnRpY0RhdGVzKTtcblx0aWYgKHNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZ2V0RmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0aW9uVmFyaWFudChlbnRpdHlUeXBlUHJvcGVydGllcywgc2VsZWN0aW9uVmFyaWFudCk7XG5cdH0gZWxzZSBpZiAoZGVmYXVsdEZpbHRlcnMpIHtcblx0XHRmaWx0ZXJDb25kaXRpb25zID0gZGVmYXVsdEZpbHRlcnM7XG5cdH1cblx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzKSB7XG5cdFx0Ly8gb25seSBmb3Igc2VtYW50aWMgZGF0ZTpcblx0XHQvLyAxLiB2YWx1ZSBmcm9tIG1hbmlmZXN0IGdldCBtZXJnZWQgd2l0aCBTVlxuXHRcdC8vIDIuIG1hbmlmZXN0IHZhbHVlIGlzIGdpdmVuIHByZWZlcmVuY2Ugd2hlbiB0aGVyZSBpcyBzYW1lIHNlbWFudGljIGRhdGUgcHJvcGVydHkgaW4gU1YgYW5kIG1hbmlmZXN0XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZGVmYXVsdFNlbWFudGljRGF0ZUZpbHRlcnMgfTtcblx0fVxuXHRpZiAoZWRpdFN0YXRlRmlsdGVyKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IHsgLi4uZmlsdGVyQ29uZGl0aW9ucywgLi4uZWRpdFN0YXRlRmlsdGVyIH07XG5cdH1cblx0cmV0dXJuIChPYmplY3Qua2V5cyhmaWx0ZXJDb25kaXRpb25zKS5sZW5ndGggPiAwID8gSlNPTi5zdHJpbmdpZnkoZmlsdGVyQ29uZGl0aW9ucykgOiB1bmRlZmluZWQpIGFzIGFueTtcbn1cblxuZ2V0RmlsdGVyQ29uZGl0aW9ucy5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdfQ==
|
|
393
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZpbHRlckhlbHBlci50cyJdLCJuYW1lcyI6WyJhVmFsaWRUeXBlcyIsIm9FeGNsdWRlTWFwIiwiX2dldERhdGVUaW1lT2Zmc2V0Q29tcGxpYW50VmFsdWUiLCJzVmFsdWUiLCJvVmFsdWUiLCJtYXRjaCIsImluZGV4T2YiLCJsZW5ndGgiLCJzcGxpdCIsInVuZGVmaW5lZCIsIl9nZXREYXRlQ29tcGxpYW50VmFsdWUiLCJnZXRUeXBlQ29tcGxpYW50VmFsdWUiLCJzVHlwZSIsImlzTmFOIiwicGFyc2VGbG9hdCIsInBhcnNlSW50IiwicmVzb2x2ZUNvbmRpdGlvblZhbHVlcyIsInNPcHRpb24iLCJvVjEiLCJvVjIiLCJzU2lnbiIsIm9WYWx1ZTIiLCJzSW50ZXJuYWxPcGVyYXRpb24iLCJvQ29uZGl0aW9uIiwidmFsdWVzIiwiaXNFbXB0eSIsIm5JbmRleE9mIiwibkxhc3RJbmRleCIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwib3BlcmF0b3IiLCJwdXNoIiwiZ2V0T3BlcmF0b3IiLCJzT3BlcmF0b3IiLCJfYnVpbGRDb25kaXRpb25zRnJvbVNlbGVjdGlvblJhbmdlcyIsIlJhbmdlcyIsIm9Qcm9wZXJ0eSIsInNQcm9wZXJ0eU5hbWUiLCJnZXRDdXN0b21Db25kaXRpb25zIiwiYUNvbmRpdGlvbnMiLCJmb3JFYWNoIiwiUmFuZ2UiLCJnZXRDb25kaXRpb25zIiwiX2dldFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImxhc3RTbGFzaEluZGV4IiwibmF2aWdhdGlvblBhdGgiLCJjb2xsZWN0aW9uIiwiZ2V0T2JqZWN0IiwicmVwbGFjZSIsIl9idWlsZEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdE9wdGlvbiIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsImZpbHRlckNvbmRpdGlvbnMiLCJwcm9wZXJ0eVBhdGgiLCJ2YWx1ZSIsIiRQcm9wZXJ0eVBhdGgiLCJ0YXJnZXRQcm9wZXJ0eSIsImNvbmRpdGlvbnMiLCJjb25jYXQiLCJnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50Iiwic0VudGl0eVNldFBhdGgiLCJvTWV0YU1vZGVsIiwic2VsZWN0aW9uVmFyaWFudCIsIm9GaWx0ZXJDb25kaXRpb25zIiwiYVNlbGVjdE9wdGlvbnMiLCJTZWxlY3RPcHRpb25zIiwiYVBhcmFtZXRlcnMiLCJQYXJhbWV0ZXJzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwicGFyYW1ldGVyIiwic1Byb3BlcnR5UGF0aCIsInZhbHVlMSIsIlByb3BlcnR5VmFsdWUiLCJ2YWx1ZTIiLCJwYXRoIiwiaXNQYXJhbWV0ZXIiLCJ2YWxpZGF0ZWQiLCJDb25kaXRpb25WYWxpZGF0ZWQiLCJWYWxpZGF0ZWQiLCJvVmFsaWRQcm9wZXJ0eSIsInNpZ24iLCJTaWduIiwiT3B0aW9uIiwib1ZhbHVlMSIsIkxvdyIsIiRUeXBlIiwidHlwZSIsIkhpZ2giLCJvQ29uZGl0aW9uVmFsdWVzIiwiQ29uZGl0aW9uIiwiY3JlYXRlQ29uZGl0aW9uIiwiZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyIsIm9Db250ZXh0IiwicHJvcGVydGllcyIsImdldEludGVyZmFjZSIsImdldFBhdGgiLCJnZXRNb2RlbCIsImtleSIsImRlZmF1bHRGaWx0ZXJWYWx1ZSIsImdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiZGVmYXVsdFNlbWFudGljRGF0ZXMiLCJnZXRFZGl0U3RhdHVzRmlsdGVyIiwib2ZpbHRlckNvbmRpdGlvbnMiLCJnZXRGaWx0ZXJDb25kaXRpb25zIiwiZWRpdFN0YXRlRmlsdGVyIiwiZW50aXR5VHlwZUFubm90YXRpb25zIiwiZW50aXR5VHlwZVByb3BlcnRpZXMiLCJkZWZhdWx0RmlsdGVycyIsImRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcXVpcmVzSUNvbnRleHQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztBQVNB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QUVEbUcsRUFBQUEsbUJBQW1CLENBQUNRLGdCQUFwQixHQUF1QyxJQUF2QyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0T3B0aW9uVHlwZSwgU2VsZWN0aW9uVmFyaWFudFR5cGVUeXBlcywgU2VsZWN0aW9uUmFuZ2VUeXBlVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvVUlcIjtcbmltcG9ydCBDb25kaXRpb24sIHsgQ29uZGl0aW9uT2JqZWN0IH0gZnJvbSBcInNhcC91aS9tZGMvY29uZGl0aW9uL0NvbmRpdGlvblwiO1xuaW1wb3J0IENvbmRpdGlvblZhbGlkYXRlZCBmcm9tIFwic2FwL3VpL21kYy9lbnVtL0NvbmRpdGlvblZhbGlkYXRlZFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmV4cG9ydCB0eXBlIEZpbHRlckNvbmRpdGlvbnMgPSB7XG5cdG9wZXJhdG9yOiBzdHJpbmc7XG5cdHZhbHVlczogQXJyYXk8c3RyaW5nPjtcblx0aXNFbXB0eT86IGJvb2xlYW4gfCBudWxsO1xuXHR2YWxpZGF0ZWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBhVmFsaWRUeXBlcyA9IFtcblx0XCJFZG0uQm9vbGVhblwiLFxuXHRcIkVkbS5CeXRlXCIsXG5cdFwiRWRtLkRhdGVcIixcblx0XCJFZG0uRGF0ZVRpbWVcIixcblx0XCJFZG0uRGF0ZVRpbWVPZmZzZXRcIixcblx0XCJFZG0uRGVjaW1hbFwiLFxuXHRcIkVkbS5Eb3VibGVcIixcblx0XCJFZG0uRmxvYXRcIixcblx0XCJFZG0uR3VpZFwiLFxuXHRcIkVkbS5JbnQxNlwiLFxuXHRcIkVkbS5JbnQzMlwiLFxuXHRcIkVkbS5JbnQ2NFwiLFxuXHRcIkVkbS5TQnl0ZVwiLFxuXHRcIkVkbS5TaW5nbGVcIixcblx0XCJFZG0uU3RyaW5nXCIsXG5cdFwiRWRtLlRpbWVcIixcblx0XCJFZG0uVGltZU9mRGF5XCJcbl07XG5cbmNvbnN0IG9FeGNsdWRlTWFwOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuXHRcIkNvbnRhaW5zXCI6IFwiTm90Q29udGFpbnNcIixcblx0XCJTdGFydHNXaXRoXCI6IFwiTm90U3RhcnRzV2l0aFwiLFxuXHRcIkVuZHNXaXRoXCI6IFwiTm90RW5kc1dpdGhcIixcblx0XCJFbXB0eVwiOiBcIk5vdEVtcHR5XCIsXG5cdFwiTm90RW1wdHlcIjogXCJFbXB0eVwiLFxuXHRcIkxFXCI6IFwiTk9UTEVcIixcblx0XCJHRVwiOiBcIk5PVEdFXCIsXG5cdFwiTFRcIjogXCJOT1RMVFwiLFxuXHRcIkdUXCI6IFwiTk9UR1RcIixcblx0XCJCVFwiOiBcIk5PVEJUXCIsXG5cdFwiTkVcIjogXCJFUVwiLFxuXHRcIkVRXCI6IFwiTkVcIlxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9nZXREYXRlVGltZU9mZnNldENvbXBsaWFudFZhbHVlKHNWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0bGV0IG9WYWx1ZTtcblx0aWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KVxcKyhcXGR7MSw0fSkvKVswXTtcblx0fSBlbHNlIGlmIChzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSlUKFxcZHsxLDJ9KTooXFxkezEsMn0pOihcXGR7MSwyfSkvKSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KVQoXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdICsgXCIrMDAwMFwiO1xuXHR9IGVsc2UgaWYgKHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pKSB7XG5cdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC9eKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pLylbMF0gKyBcIlQwMDowMDowMCswMDAwXCI7XG5cdH0gZWxzZSBpZiAoc1ZhbHVlLmluZGV4T2YoXCJaXCIpID09PSBzVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdG9WYWx1ZSA9IHNWYWx1ZS5zcGxpdChcIlpcIilbMF0gKyBcIiswMTAwXCI7XG5cdH0gZWxzZSB7XG5cdFx0b1ZhbHVlID0gdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiBvVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZ2V0RGF0ZUNvbXBsaWFudFZhbHVlKHNWYWx1ZTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIHNWYWx1ZS5tYXRjaCgvXihcXGR7NH0pLShcXGR7MSwyfSktKFxcZHsxLDJ9KS8pXG5cdFx0PyBzVmFsdWUubWF0Y2goL14oXFxkezR9KS0oXFxkezEsMn0pLShcXGR7MSwyfSkvKVswXVxuXHRcdDogc1ZhbHVlLm1hdGNoKC9eKFxcZHs4fSkvKSAmJiBzVmFsdWUubWF0Y2goL14oXFxkezh9KS8pWzBdO1xufVxuXG4vKipcbiAqIE1ldGhvZCB0byBnZXQgdGhlIGNvbXBsaWFudCB2YWx1ZSB0eXBlIGJhc2VkIG9uIHRoZSBkYXRhIHR5cGUuXG4gKlxuICogQHBhcmFtICBzVmFsdWUgUmF3IHZhbHVlXG4gKiBAcGFyYW0gIHNUeXBlIFRoZSBwcm9wZXJ0eSB0eXBlXG4gKiBAcmV0dXJucyBWYWx1ZSB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb24uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wbGlhbnRWYWx1ZShzVmFsdWU6IGFueSwgc1R5cGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBvVmFsdWU7XG5cdGlmIChhVmFsaWRUeXBlcy5pbmRleE9mKHNUeXBlKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdG9WYWx1ZSA9IHNWYWx1ZTtcblx0c3dpdGNoIChzVHlwZSkge1xuXHRcdGNhc2UgXCJFZG0uQm9vbGVhblwiOlxuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlID09PSBcInRydWVcIiB8fCAoc1ZhbHVlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRvdWJsZVwiOlxuXHRcdGNhc2UgXCJFZG0uU2luZ2xlXCI6XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VGbG9hdChzVmFsdWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVkbS5CeXRlXCI6XG5cdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdGNhc2UgXCJFZG0uSW50MzJcIjpcblx0XHRjYXNlIFwiRWRtLlNCeXRlXCI6XG5cdFx0XHRvVmFsdWUgPSBpc05hTihzVmFsdWUpID8gdW5kZWZpbmVkIDogcGFyc2VJbnQoc1ZhbHVlLCAxMCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdG9WYWx1ZSA9IF9nZXREYXRlQ29tcGxpYW50VmFsdWUoc1ZhbHVlKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFZG0uRGF0ZVRpbWVPZmZzZXRcIjpcblx0XHRcdG9WYWx1ZSA9IF9nZXREYXRlVGltZU9mZnNldENvbXBsaWFudFZhbHVlKHNWYWx1ZSk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0b1ZhbHVlID0gc1ZhbHVlLm1hdGNoKC8oXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pID8gc1ZhbHVlLm1hdGNoKC8oXFxkezEsMn0pOihcXGR7MSwyfSk6KFxcZHsxLDJ9KS8pWzBdIDogdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdHJldHVybiBvVmFsdWUgPT09IG51bGwgPyB1bmRlZmluZWQgOiBvVmFsdWU7XG59XG5cbi8qKlxuICogTWV0aG9kIHRvIGNyZWF0ZSBhIGNvbmRpdGlvbi5cbiAqIEBwYXJhbSAgc09wdGlvbiBPcGVyYXRvciB0byBiZSB1c2VkLlxuICogQHBhcmFtICBvVjEgTG93ZXIgdmFsdWVcbiAqIEBwYXJhbSAgb1YyIEhpZ2hlciB2YWx1ZVxuICogQHBhcmFtIHNTaWduXG4gKiBAcmV0dXJucyBDb25kaXRpb24gdG8gYmUgY3JlYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmRpdGlvblZhbHVlcyhzT3B0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsIG9WMTogYW55LCBvVjI6IGFueSwgc1NpZ246IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRsZXQgb1ZhbHVlID0gb1YxLFxuXHRcdG9WYWx1ZTIsXG5cdFx0c0ludGVybmFsT3BlcmF0aW9uOiBhbnk7XG5cdGNvbnN0IG9Db25kaXRpb246IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXTtcblx0b0NvbmRpdGlvbi5pc0VtcHR5ID0gbnVsbCBhcyBhbnk7XG5cdGlmIChvVjEgPT09IHVuZGVmaW5lZCB8fCBvVjEgPT09IG51bGwpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzd2l0Y2ggKHNPcHRpb24pIHtcblx0XHRjYXNlIFwiQ1BcIjpcblx0XHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IFwiQ29udGFpbnNcIjtcblx0XHRcdGlmIChvVmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgbkluZGV4T2YgPSBvVmFsdWUuaW5kZXhPZihcIipcIik7XG5cdFx0XHRcdGNvbnN0IG5MYXN0SW5kZXggPSBvVmFsdWUubGFzdEluZGV4T2YoXCIqXCIpO1xuXG5cdFx0XHRcdC8vIG9ubHkgd2hlbiB0aGVyZSBhcmUgJyonIGF0IGFsbFxuXHRcdFx0XHRpZiAobkluZGV4T2YgPiAtMSkge1xuXHRcdFx0XHRcdGlmIChuSW5kZXhPZiA9PT0gMCAmJiBuTGFzdEluZGV4ICE9PSBvVmFsdWUubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0c0ludGVybmFsT3BlcmF0aW9uID0gXCJFbmRzV2l0aFwiO1xuXHRcdFx0XHRcdFx0b1ZhbHVlID0gb1ZhbHVlLnN1YnN0cmluZygxLCBvVmFsdWUubGVuZ3RoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG5JbmRleE9mICE9PSAwICYmIG5MYXN0SW5kZXggPT09IG9WYWx1ZS5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBcIlN0YXJ0c1dpdGhcIjtcblx0XHRcdFx0XHRcdG9WYWx1ZSA9IG9WYWx1ZS5zdWJzdHJpbmcoMCwgb1ZhbHVlLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvVmFsdWUgPSBvVmFsdWUuc3Vic3RyaW5nKDEsIG9WYWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0LyogVE9ETyBBZGQgZGlhZ29ub3N0aWNzIExvZy53YXJuaW5nKFwiQ29udGFpbnMgT3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgJyonLlwiKSAqL1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIkVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBvVjEgPT09IFwiXCIgPyBcIk5vdEVtcHR5XCIgOiBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRpZiAob1YyID09PSB1bmRlZmluZWQgfHwgb1YyID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdG9WYWx1ZTIgPSBvVjI7XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkxFXCI6XG5cdFx0Y2FzZSBcIkdFXCI6XG5cdFx0Y2FzZSBcIkdUXCI6XG5cdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRzSW50ZXJuYWxPcGVyYXRpb24gPSBzT3B0aW9uO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8qIFRPRE8gQWRkIGRpYWdvbm9zdGljcyBMb2cud2FybmluZyhcIlNlbGVjdGlvbiBPcHRpb24gaXMgbm90IHN1cHBvcnRlZCA6ICdcIiArIHNPcHRpb24gKyBcIidcIik7ICovXG5cdFx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHNTaWduID09PSBcIkVcIikge1xuXHRcdHNJbnRlcm5hbE9wZXJhdGlvbiA9IG9FeGNsdWRlTWFwW3NJbnRlcm5hbE9wZXJhdGlvbl07XG5cdH1cblx0b0NvbmRpdGlvbi5vcGVyYXRvciA9IHNJbnRlcm5hbE9wZXJhdGlvbjtcblx0aWYgKHNJbnRlcm5hbE9wZXJhdGlvbiAhPT0gXCJFbXB0eVwiKSB7XG5cdFx0b0NvbmRpdGlvbi52YWx1ZXMucHVzaChvVmFsdWUpO1xuXHRcdGlmIChvVmFsdWUyKSB7XG5cdFx0XHRvQ29uZGl0aW9uLnZhbHVlcy5wdXNoKG9WYWx1ZTIpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb0NvbmRpdGlvbjtcbn1cblxuLyogTWV0aG9kIHRvIGdldCB0aGUgb3BlcmF0b3IgZnJvbSB0aGUgU2VsZWN0aW9uIE9wdGlvbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9wZXJhdG9yKHNPcGVyYXRvcjogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHNPcGVyYXRvci5pbmRleE9mKFwiL1wiKSA+IDAgPyBzT3BlcmF0b3Iuc3BsaXQoXCIvXCIpWzFdIDogc09wZXJhdG9yO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRDb25kaXRpb25zRnJvbVNlbGVjdGlvblJhbmdlcyhcblx0UmFuZ2VzOiBTZWxlY3Rpb25SYW5nZVR5cGVUeXBlc1tdLFxuXHRvUHJvcGVydHk6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4sXG5cdHNQcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0Z2V0Q3VzdG9tQ29uZGl0aW9ucz86IEZ1bmN0aW9uXG4pOiBhbnlbXSB7XG5cdGNvbnN0IGFDb25kaXRpb25zOiBhbnlbXSA9IFtdO1xuXHRSYW5nZXM/LmZvckVhY2goKFJhbmdlOiBhbnkpID0+IHtcblx0XHRjb25zdCBvQ29uZGl0aW9uID0gZ2V0Q3VzdG9tQ29uZGl0aW9ucyA/IGdldEN1c3RvbUNvbmRpdGlvbnMoUmFuZ2UsIG9Qcm9wZXJ0eSwgc1Byb3BlcnR5TmFtZSkgOiBnZXRDb25kaXRpb25zKFJhbmdlLCBvUHJvcGVydHkpO1xuXHRcdGlmIChvQ29uZGl0aW9uKSB7XG5cdFx0XHRhQ29uZGl0aW9ucy5wdXNoKG9Db25kaXRpb24pO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBhQ29uZGl0aW9ucztcbn1cblxuZnVuY3Rpb24gX2dldFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+IHtcblx0Y29uc3QgbGFzdFNsYXNoSW5kZXggPSBwcm9wZXJ0eU5hbWUubGFzdEluZGV4T2YoXCIvXCIpO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IGxhc3RTbGFzaEluZGV4ID4gLTEgPyBwcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5TmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSA6IFwiXCI7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGggKyBcIi9cIiArIG5hdmlnYXRpb25QYXRoKTtcblx0cmV0dXJuIGNvbGxlY3Rpb24/Lltwcm9wZXJ0eU5hbWUucmVwbGFjZShuYXZpZ2F0aW9uUGF0aCwgXCJcIildO1xufVxuXG5mdW5jdGlvbiBfYnVpbGRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3RPcHRpb24oXG5cdHNlbGVjdE9wdGlvbjogU2VsZWN0T3B0aW9uVHlwZSxcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0ZW50aXR5U2V0UGF0aDogc3RyaW5nLFxuXHRnZXRDdXN0b21Db25kaXRpb25zPzogRnVuY3Rpb25cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBwcm9wZXJ0eU5hbWU6IGFueSA9IHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWUsXG5cdFx0ZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9LFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlIHx8IHByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoLFxuXHRcdFJhbmdlczogU2VsZWN0aW9uUmFuZ2VUeXBlVHlwZXNbXSA9IHNlbGVjdE9wdGlvbi5SYW5nZXM7XG5cdGNvbnN0IHRhcmdldFByb3BlcnR5ID0gX2dldFByb3BlcnR5KHByb3BlcnR5UGF0aCwgbWV0YU1vZGVsLCBlbnRpdHlTZXRQYXRoKTtcblx0aWYgKHRhcmdldFByb3BlcnR5KSB7XG5cdFx0Y29uc3QgY29uZGl0aW9uczogYW55W10gPSBfYnVpbGRDb25kaXRpb25zRnJvbVNlbGVjdGlvblJhbmdlcyhSYW5nZXMsIHRhcmdldFByb3BlcnR5LCBwcm9wZXJ0eVBhdGgsIGdldEN1c3RvbUNvbmRpdGlvbnMpO1xuXHRcdGlmIChjb25kaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0ZmlsdGVyQ29uZGl0aW9uc1twcm9wZXJ0eVBhdGhdID0gKGZpbHRlckNvbmRpdGlvbnNbcHJvcGVydHlQYXRoXSB8fCBbXSkuY29uY2F0KGNvbmRpdGlvbnMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNDb25kaXRpb25zRnJvbVNlbGVjdGlvblZhcmlhbnQoXG5cdHNFbnRpdHlTZXRQYXRoOiBzdHJpbmcsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50VHlwZVR5cGVzLFxuXHRnZXRDdXN0b21Db25kaXRpb25zPzogRnVuY3Rpb25cbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRsZXQgb0ZpbHRlckNvbmRpdGlvbnM6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4gPSB7fTtcblx0aWYgKCFzZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0cmV0dXJuIG9GaWx0ZXJDb25kaXRpb25zO1xuXHR9XG5cdGNvbnN0IGFTZWxlY3RPcHRpb25zID0gc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zLFxuXHRcdGFQYXJhbWV0ZXJzID0gc2VsZWN0aW9uVmFyaWFudC5QYXJhbWV0ZXJzO1xuXHRhU2VsZWN0T3B0aW9ucz8uZm9yRWFjaCgoc2VsZWN0T3B0aW9uOiBTZWxlY3RPcHRpb25UeXBlKSA9PiB7XG5cdFx0Y29uc3QgcHJvcGVydHlOYW1lOiBhbnkgPSBzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lLFxuXHRcdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nID0gcHJvcGVydHlOYW1lLnZhbHVlIHx8IHByb3BlcnR5TmFtZS4kUHJvcGVydHlQYXRoO1xuXHRcdGlmIChPYmplY3Qua2V5cyhvRmlsdGVyQ29uZGl0aW9ucykuaW5jbHVkZXMoc1Byb3BlcnR5TmFtZSkpIHtcblx0XHRcdG9GaWx0ZXJDb25kaXRpb25zW3NQcm9wZXJ0eU5hbWVdID0gb0ZpbHRlckNvbmRpdGlvbnNbc1Byb3BlcnR5TmFtZV0uY29uY2F0KFxuXHRcdFx0XHRfYnVpbGRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3RPcHRpb24oc2VsZWN0T3B0aW9uLCBvTWV0YU1vZGVsLCBzRW50aXR5U2V0UGF0aCwgZ2V0Q3VzdG9tQ29uZGl0aW9ucylbc1Byb3BlcnR5TmFtZV1cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWx0ZXJDb25kaXRpb25zID0ge1xuXHRcdFx0XHQuLi5vRmlsdGVyQ29uZGl0aW9ucyxcblx0XHRcdFx0Li4uX2J1aWxkRmlsdGVyc0NvbmRpdGlvbnNGcm9tU2VsZWN0T3B0aW9uKHNlbGVjdE9wdGlvbiwgb01ldGFNb2RlbCwgc0VudGl0eVNldFBhdGgsIGdldEN1c3RvbUNvbmRpdGlvbnMpXG5cdFx0XHR9O1xuXHRcdH1cblx0fSk7XG5cdGFQYXJhbWV0ZXJzPy5mb3JFYWNoKChwYXJhbWV0ZXI6IGFueSkgPT4ge1xuXHRcdGNvbnN0IHNQcm9wZXJ0eVBhdGggPSBwYXJhbWV0ZXIuUHJvcGVydHlOYW1lLnZhbHVlIHx8IHBhcmFtZXRlci5Qcm9wZXJ0eU5hbWUuJFByb3BlcnR5UGF0aDtcblx0XHRjb25zdCBvQ29uZGl0aW9uOiBhbnkgPSBnZXRDdXN0b21Db25kaXRpb25zXG5cdFx0XHQ/IHsgb3BlcmF0b3I6IFwiRVFcIiwgdmFsdWUxOiBwYXJhbWV0ZXIuUHJvcGVydHlWYWx1ZSwgdmFsdWUyOiBudWxsLCBwYXRoOiBzUHJvcGVydHlQYXRoLCBpc1BhcmFtZXRlcjogdHJ1ZSB9XG5cdFx0XHQ6IHtcblx0XHRcdFx0XHRvcGVyYXRvcjogXCJFUVwiLFxuXHRcdFx0XHRcdHZhbHVlczogW3BhcmFtZXRlci5Qcm9wZXJ0eVZhbHVlXSxcblx0XHRcdFx0XHRpc0VtcHR5OiBudWxsLFxuXHRcdFx0XHRcdHZhbGlkYXRlZDogQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZCxcblx0XHRcdFx0XHRpc1BhcmFtZXRlcjogdHJ1ZVxuXHRcdFx0ICB9O1xuXHRcdG9GaWx0ZXJDb25kaXRpb25zW3NQcm9wZXJ0eVBhdGhdID0gW29Db25kaXRpb25dO1xuXHR9KTtcblxuXHRyZXR1cm4gb0ZpbHRlckNvbmRpdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25kaXRpb25zKFJhbmdlOiBhbnksIG9WYWxpZFByb3BlcnR5OiBhbnkpOiBDb25kaXRpb25PYmplY3QgfCB1bmRlZmluZWQge1xuXHRsZXQgb0NvbmRpdGlvbjtcblx0Y29uc3Qgc2lnbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gUmFuZ2UuU2lnbjtcblx0Y29uc3Qgc09wdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gUmFuZ2UuT3B0aW9uID8gZ2V0T3BlcmF0b3IoUmFuZ2UuT3B0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3Qgb1ZhbHVlMTogYW55ID0gZ2V0VHlwZUNvbXBsaWFudFZhbHVlKFJhbmdlLkxvdywgb1ZhbGlkUHJvcGVydHkuJFR5cGUgfHwgb1ZhbGlkUHJvcGVydHkudHlwZSk7XG5cdGNvbnN0IG9WYWx1ZTI6IGFueSA9IFJhbmdlLkhpZ2ggPyBnZXRUeXBlQ29tcGxpYW50VmFsdWUoUmFuZ2UuSGlnaCwgb1ZhbGlkUHJvcGVydHkuJFR5cGUgfHwgb1ZhbGlkUHJvcGVydHkudHlwZSkgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IG9Db25kaXRpb25WYWx1ZXMgPSByZXNvbHZlQ29uZGl0aW9uVmFsdWVzKHNPcHRpb24sIG9WYWx1ZTEsIG9WYWx1ZTIsIHNpZ24pIGFzIGFueTtcblx0aWYgKG9Db25kaXRpb25WYWx1ZXMpIHtcblx0XHRvQ29uZGl0aW9uID0gQ29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihcblx0XHRcdG9Db25kaXRpb25WYWx1ZXMub3BlcmF0b3IsXG5cdFx0XHRvQ29uZGl0aW9uVmFsdWVzLnZhbHVlcyxcblx0XHRcdG51bGwsXG5cdFx0XHRudWxsLFxuXHRcdFx0Q29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZFxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIG9Db25kaXRpb247XG59XG5cbmNvbnN0IGdldERlZmF1bHRWYWx1ZUZpbHRlcnMgPSBmdW5jdGlvbihvQ29udGV4dDogYW55LCBwcm9wZXJ0aWVzOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0Y29uc3QgZmlsdGVyQ29uZGl0aW9uczogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiA9IHt9O1xuXHRjb25zdCBlbnRpdHlTZXRQYXRoID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldFBhdGgoKSxcblx0XHRvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0SW50ZXJmYWNlKDEpLmdldE1vZGVsKCk7XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEZpbHRlclZhbHVlID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXG5cdFx0XHRcdGVudGl0eVNldFBhdGggKyBcIi9cIiArIGtleSArIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5GaWx0ZXJEZWZhdWx0VmFsdWVcIlxuXHRcdFx0KTtcblx0XHRcdGlmIChkZWZhdWx0RmlsdGVyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb25zdCBQcm9wZXJ0eU5hbWUgPSBrZXk7XG5cdFx0XHRcdGZpbHRlckNvbmRpdGlvbnNbUHJvcGVydHlOYW1lXSA9IFtcblx0XHRcdFx0XHRDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKFwiRVFcIiwgW2RlZmF1bHRGaWx0ZXJWYWx1ZV0sIG51bGwsIG51bGwsIENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQpIGFzIEZpbHRlckNvbmRpdGlvbnNcblx0XHRcdFx0XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZpbHRlckNvbmRpdGlvbnM7XG59O1xuXG5jb25zdCBnZXREZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyA9IGZ1bmN0aW9uKFxuXHRvQ29udGV4dDogYW55LFxuXHRwcm9wZXJ0aWVzOiBhbnksXG5cdGRlZmF1bHRTZW1hbnRpY0RhdGVzOiBhbnlcbik6IFJlY29yZDxzdHJpbmcsIEZpbHRlckNvbmRpdGlvbnNbXT4ge1xuXHRjb25zdCBmaWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdGlmIChwcm9wZXJ0aWVzKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuXHRcdFx0Ly8gY3VycmVudGx5IGRlZmF1bHRTZW1hbnRpY0RhdGVzIGNhbiBzdXBwb3J0IG9ubHkgb25lIGVudHJ5LCB3ZSBwaWNrIHRoZSBmaXJzdCBvbmUgZGlyZWN0bHkgdXNpbmcgMCBpbmRleFxuXHRcdFx0aWYgKGRlZmF1bHRTZW1hbnRpY0RhdGVzW2tleV0gJiYgZGVmYXVsdFNlbWFudGljRGF0ZXNba2V5XVswXSkge1xuXHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zW2tleV0gPSBbXG5cdFx0XHRcdFx0Q29uZGl0aW9uLmNyZWF0ZUNvbmRpdGlvbihkZWZhdWx0U2VtYW50aWNEYXRlc1trZXldWzBdLm9wZXJhdG9yLCBbXSwgbnVsbCwgbnVsbCwgbnVsbCkgYXMgRmlsdGVyQ29uZGl0aW9uc1xuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmlsdGVyQ29uZGl0aW9ucztcbn07XG5cbmZ1bmN0aW9uIGdldEVkaXRTdGF0dXNGaWx0ZXIoKTogUmVjb3JkPHN0cmluZywgRmlsdGVyQ29uZGl0aW9uc1tdPiB7XG5cdGNvbnN0IG9maWx0ZXJDb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+ID0ge307XG5cdG9maWx0ZXJDb25kaXRpb25zW1wiJGVkaXRTdGF0ZVwiXSA9IFtcblx0XHRDb25kaXRpb24uY3JlYXRlQ29uZGl0aW9uKFwiRFJBRlRfRURJVF9TVEFURVwiLCBbXCJBTExcIl0sIG51bGwsIG51bGwsIENvbmRpdGlvblZhbGlkYXRlZC5WYWxpZGF0ZWQpIGFzIEZpbHRlckNvbmRpdGlvbnNcblx0XTtcblx0cmV0dXJuIG9maWx0ZXJDb25kaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyQ29uZGl0aW9ucyhvQ29udGV4dDogYW55LCBmaWx0ZXJDb25kaXRpb25zOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBGaWx0ZXJDb25kaXRpb25zW10+IHtcblx0bGV0IGVkaXRTdGF0ZUZpbHRlcjtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IG9Db250ZXh0LmdldEludGVyZmFjZSgxKS5nZXRQYXRoKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Db250ZXh0LmdldEludGVyZmFjZSgxKS5nZXRNb2RlbCgpLFxuXHRcdGVudGl0eVR5cGVBbm5vdGF0aW9ucyA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGggKyBcIkBcIiksXG5cdFx0ZW50aXR5VHlwZVByb3BlcnRpZXMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChlbnRpdHlTZXRQYXRoICsgXCIvXCIpO1xuXHRpZiAoXG5cdFx0ZW50aXR5VHlwZUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIl0gfHxcblx0XHRlbnRpdHlUeXBlQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Tm9kZVwiXVxuXHQpIHtcblx0XHRlZGl0U3RhdGVGaWx0ZXIgPSBnZXRFZGl0U3RhdHVzRmlsdGVyKCk7XG5cdH1cblx0Y29uc3Qgc2VsZWN0aW9uVmFyaWFudCA9IGZpbHRlckNvbmRpdGlvbnM/LnNlbGVjdGlvblZhcmlhbnQ7XG5cdGNvbnN0IGRlZmF1bHRTZW1hbnRpY0RhdGVzID0gZmlsdGVyQ29uZGl0aW9ucz8uZGVmYXVsdFNlbWFudGljRGF0ZXMgfHwge307XG5cdGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0gZ2V0RGVmYXVsdFZhbHVlRmlsdGVycyhvQ29udGV4dCwgZW50aXR5VHlwZVByb3BlcnRpZXMpO1xuXHRjb25zdCBkZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycyA9IGdldERlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzKG9Db250ZXh0LCBlbnRpdHlUeXBlUHJvcGVydGllcywgZGVmYXVsdFNlbWFudGljRGF0ZXMpO1xuXHRpZiAoc2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSBnZXRGaWx0ZXJzQ29uZGl0aW9uc0Zyb21TZWxlY3Rpb25WYXJpYW50KGVudGl0eVNldFBhdGgsIG9NZXRhTW9kZWwsIHNlbGVjdGlvblZhcmlhbnQpO1xuXHR9IGVsc2UgaWYgKGRlZmF1bHRGaWx0ZXJzKSB7XG5cdFx0ZmlsdGVyQ29uZGl0aW9ucyA9IGRlZmF1bHRGaWx0ZXJzO1xuXHR9XG5cdGlmIChkZWZhdWx0U2VtYW50aWNEYXRlRmlsdGVycykge1xuXHRcdC8vIG9ubHkgZm9yIHNlbWFudGljIGRhdGU6XG5cdFx0Ly8gMS4gdmFsdWUgZnJvbSBtYW5pZmVzdCBnZXQgbWVyZ2VkIHdpdGggU1Zcblx0XHQvLyAyLiBtYW5pZmVzdCB2YWx1ZSBpcyBnaXZlbiBwcmVmZXJlbmNlIHdoZW4gdGhlcmUgaXMgc2FtZSBzZW1hbnRpYyBkYXRlIHByb3BlcnR5IGluIFNWIGFuZCBtYW5pZmVzdFxuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmRlZmF1bHRTZW1hbnRpY0RhdGVGaWx0ZXJzIH07XG5cdH1cblx0aWYgKGVkaXRTdGF0ZUZpbHRlcikge1xuXHRcdGZpbHRlckNvbmRpdGlvbnMgPSB7IC4uLmZpbHRlckNvbmRpdGlvbnMsIC4uLmVkaXRTdGF0ZUZpbHRlciB9O1xuXHR9XG5cdHJldHVybiAoT2JqZWN0LmtleXMoZmlsdGVyQ29uZGl0aW9ucykubGVuZ3RoID4gMCA/IEpTT04uc3RyaW5naWZ5KGZpbHRlckNvbmRpdGlvbnMpLnJlcGxhY2UoLyhbXFx7XFx9XSkvZywgXCJcXFxcJDFcIikgOiB1bmRlZmluZWQpIGFzIGFueTtcbn1cblxuZ2V0RmlsdGVyQ29uZGl0aW9ucy5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbiJdfQ==
|